No momento, estamos rodando com recursos limitados com nossa solução baseada em servidor mssql.
Agora temos muitas opções tradicionais em relação ao próximo passo para lidar com a carga:
- compre CPUs e IO mais rápidos
- dividir alguns clientes para separar o servidor
- mover db para o cluster
Todos são caros em termos de licenciamento e hardware ou tempo. Portanto, quero adicionar outra opção, movendo todo o sistema para uma solução escalável que o nosql engine cassandra promete.
No entanto, não tenho certeza e não tenho experiência com bancos de dados noSQL, portanto, preciso entender a estrutura dos dados "não estruturados".
Em nosso aplicativo, basicamente armazenamos os dados inseridos pelos usuários de várias maneiras como listas de "valores-chave". Há uma tabela pai, que contém o elemento principal (como um Pedido) e uma tabela filho com os pares de valores-chave que compreendem o conteúdo do pedido (como Order_Lines).
Em termos de negócios, Order e OrderLines são uma unidade. Porém, devido ao RDBMS, eles são armazenados em tabelas e devem ser unidos o tempo todo.
Durante as operações, às vezes escolhemos carregar apenas a parte superior, mas na maioria das vezes carregamos a linha principal + alguns KVPs para exibir algumas informações úteis.
Por exemplo, em uma lista de visão geral, mostramos o identificador de cabeçalho + alguns valores nas colunas de cada linha.
ATUALIZAÇÃO: Armazenamos formas de qualquer tipo. Então, basicamente nós armazenamos "documentos". No entanto, precisamos preparar e pesquisar esses formulários por qualquer valor, tipo, etc. O controle de acesso a dados adiciona outra camada de compexidade ao banco de dados.
Como você pode imaginar, a quantidade e a disponibilidade de determinados KVPs variam de objeto para objeto. Não há possibilidade válida de criar tabelas únicas para cada tipo de objeto, pois teríamos que criar milhares de tabelas para as diferentes combinações de dados.
Esse tipo de "dicionário", como conjuntos de dados, seria melhor armazenado em um banco de dados noSQL? E teremos benefícios de desempenho com isso? Cassandra modelaria esses head + KVPs como um conjunto de dados? Olhando para a página da web do cassandra e alguns tutoriais, tenho a impressão de que não há muita diferença entre nosso RDBMS e o cassandra em termos de organização de dados - deixando-nos a mesma quantidade enorme de junções se você quiser selecionar 5 KVPs para uma lista para cada linha.
A iluminação é bem-vinda, também há indicações de artigos que explicam os problemas.