Estou desenvolvendo um produto que, como parte de sua operação, deve rastrear um grande número de arquivos / diretórios. A idéia é armazenar informações estatísticas em um banco de dados e, na inicialização, criar relógios para cada arquivo. Os arquivos alterados serão colocados na fila (no banco de dados) para uma sincronização de grupo em um banco de dados remoto. Eles serão sincronizados em ordem de prioridade, um número entre 1 e 10.
Informações sobre o banco de dados:
- <100.000 entradas de informações estatísticas
- Banco de dados inteiro lido na inicialização, apenas o caminho do arquivo é necessário
- Os arquivos na fila terão um campo prioritário (nada mais precisa ser pesquisado)
- As inserções podem ser lentas
Encontrei alguns bancos de dados que acho que funcionarão, mas não tenho certeza qual seria o melhor:
- Redis - armazena o caminho do arquivo como chave, os dados estatísticos como valor; fila seria uma lista
- MongoDB - mais opções de consulta que Redis, mas ainda rápido
Estou pensando que um banco de dados NoSQL seria a melhor solução aqui, pois não há muita lógica relacional em andamento e o tamanho total dos dados não é muito grande (algo como <100 mb, mais próximo a <30 mb). Eu olhei para o SQLite porque parece ser simples o suficiente para incorporar em um aplicativo instalável.
Como esse é um aplicativo distribuído para usuários finais e não um servidor de alta carga, o banco de dados não precisa oferecer suporte a muitos usuários simultâneos. A principal prioridade aqui é encontrar um banco de dados cujo modelo faça mais sentido.
Então a pergunta, qual banco de dados seria mais aplicável a essa situação?
Além disso, existem outros bancos de dados que fariam mais sentido para um aplicativo como esse?
fonte
Se você não está preocupado com a lógica relacional, quer uma velocidade de leitura muito rápida e está disposto a trabalhar com um RDBMS, arriscaria-me a dizer o MySQL. Por quê ???
O mecanismo de armazenamento MyISAM possui uma opção que pode permitir que a estrutura física da tabela seja aumentada para melhor desempenho. Qual é essa opção? A opção ALTER TABLE ROW_FORMAT.
Por exemplo, o livro MySQL Database Design and Tuning recomenda o uso de ROW_FORMAT = FIXED nas páginas 72,73. Isso converterá internamente todos os campos VARCHAR em CHAR. Isso aumentará a tabela MyISAM, mas os SELECTs executados serão muito mais rápidos. Eu pessoalmente posso atestar isso. Certa vez, tive uma mesa com 1,9 GB. Alterei o formato com ALTER TABLE tblname ROW_FORMAT = FIXED. A tabela acabou com 3,7 GB. A velocidade dos SELECTs foi 20-25% mais rápida sem melhorar ou alterar qualquer outra coisa.
E se você já tiver uma tabela MyISAM preenchida com dados? Você pode obter métricas para as definições de coluna recomendadas com base nos dados presentes na tabela MyISAM. Que consulta apresenta essas métricas?
ANÁLISE DO PROCEDIMENTO () Isso não exibirá dados. Ele lerá o valor de cada coluna e recomendará definições de coluna. Por exemplo, se você tiver uma coluna de tipo cujos valores sejam de 1 a 4, sugira usar um ENUM desses 4 valores. Você pode optar por usar TINYINT ou CHAR (1), pois eles ocupam a mesma quantidade de espaço (1 byte).
Aqui está outra coisa a considerar: Como você estava pensando em usar um banco de dados NoSQL, você já pensou em usar o MyISAM de maneira NoSQL? Isso é bem possível. A página 175 do mesmo livro que mencionei sugere o uso de estruturas HANDLER para ler uma tabela sem a bagagem relacional . De fato, a página 175 dá este exemplo:
Esta tabela contém milhões de linhas. Suponha que você precise criar uma aplicação de análise de dados que possua os seguintes requisitos:
Estes comandos permitem leituras rápidas e sujas da tabela:
Eu espero que isso dê alimento para o pensamento. Por favor, olhe para ele.
EMBARGO
O que é muito irônico sobre mim escrever este post em particular é que escrevi um post anterior sobre o HANDLER sendo usado nos binários do Percona Server e pensando que usá-lo estava desatualizado . Desde aquele post anterior, nunca pensei que escreveria algo em apoio às estruturas HANDLER. Agora estou corrigido.
fonte
HANDLER
estruturas e recursos, a página de manual no mysql é a única página que consegui localizar e não há muito lá ... nova pergunta aqui: dba.stackexchange.com/q/253653/23271 e esperava que você conhecesse recursos adicionais?