De uma perspectiva de desenvolvedor, posso dizer que quase todos os mecanismos tradicionais de banco de dados tradicionais que podem ser expandidos e expandidos são apenas um pós-pensamento.
Nos últimos anos, com a necessidade de maior escalabilidade e sistemas altamente disponíveis, houve esforços para fazer com que os bancos de dados existentes se expandissem. Mas como os designs são prejudicados pelo código legado, ele é muito mais apegado do que fundamental ao design. Você encontrará isso se tentar escalar a maioria dos mecanismos de banco de dados conhecidos. Adicionando servidores escravos pode ser bastante difícil de configurar e você perceberá que ele vem com limitações significativas, algumas das quais podem requerer o re-jigging de suas tabelas de banco de dados.
Por exemplo, a maioria deles são projetos mestre / (multi) escravo e não multi-mestre. Em outras palavras, você pode ter apenas um servidor inteiro ali parado e não conseguir processar consultas. Alguns fazem, mas com limitações ... por exemplo leia somente design multi-escravo. Portanto, você pode ter um servidor que usa gravações e todos os outros fornecem dados somente leitura. Você perceberá que ao configurar esses sistemas nem sempre é um processo direto e difícil de funcionar bem. Parece muito mais um parafuso em muitos casos.
Por outro lado, existem alguns mecanismos de banco de dados mais recentes sendo desenvolvidos com simultaneidade e design de vários mestres desde o início. NOSQL e NewSQL são a nova classe de design.
Assim, parece que a melhor maneira de obter um melhor desempenho de um servidor SQL tradicional é aumentar de escala! Enquanto com NOSQL & NewSQL é tanto scale up & expandir.
A razão pela qual os sistemas RDBMS tradicionais estão strongmente acoplados é porque todos eles precisam de uma visã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 por meio de algum tipo de mecanismo de bloqueio requer a cooperação de outros servidores que prejudiquem o desempenho ou afetem 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 que a carga de trabalho é distribuída entre os servidores e não apenas entre processos ou encadeamentos onde o acesso aos dados ainda é bastante rápido.