Do ponto de vista do desenvolvedor, posso dizer que quase todos os mecanismos tradicionais de banco de dados existentes no mercado só podem ser ampliados e ampliados.
Nos últimos anos, com a necessidade de maior escalabilidade e sistemas altamente disponíveis, houve esforços para aumentar a escala dos bancos de dados existentes. Mas, como os designs são prejudicados pelo código legado, é muito mais importante do que fundamental para o design. Você encontrará isso se tentar dimensionar a maioria dos mecanismos de banco de dados conhecidos. A adição de servidores escravos pode ser bastante difícil de configurar e você notará que ele possui limitações significativas, algumas das quais podem exigir uma nova alteração nas tabelas do banco de dados.
Por exemplo, a maioria deles é mestre / (multi) escrava, em vez de projetos com vários mestres. Em outras palavras, você pode ter apenas um servidor inteiro sentado lá e não conseguir processar consultas. Alguns o fazem, mas com limitações ... por exemplo, leia apenas o projeto multi-escravo. Portanto, você pode ter um servidor que recebe gravações e todos os outros fornecem dados somente leitura. Você notará que, ao configurar esses sistemas, nem sempre é um processo direto e difícil de funcionar bem. Em muitos casos, parece muito mais um acréscimo.
Por outro lado, existem alguns mecanismos de banco de dados mais recentes sendo desenvolvidos com simultaneidade e design multimestre desde o início. NOSQL e NewSQL são a nova classe de design.
Portanto, parece que a melhor maneira de obter melhor desempenho de um servidor SQL tradicional é aumentar a escala! Enquanto no NOSQL e NewSQL, ambos aumentam e aumentam.
A razão pela qual os sistemas RDBMS tradicionais são fortemente acoplados é porque todos eles precisam de uma visualização consistente dos mesmos dados. Quando você tem vários servidores aceitando atualizações para os mesmos dados de clientes diferentes, em qual deles você confia? Qualquer método que tente garantir que os dados sejam consistentes através de algum tipo de mecanismo de bloqueio exige cooperação de outros servidores que prejudicam o desempenho ou afetam a qualidade dos dados, pois quaisquer dados lidos de um cliente podem estar desatualizados. E os servidores precisam decidir entre si quais dados são mais recentes ao gravar no mesmo registro. Como você pode ver, é um problema complexo que se torna mais complexo pelo fato de a carga de trabalho estar espalhada pelos servidores e não apenas entre processos ou threads em que o acesso aos dados ainda é bastante rápido.