Após vários anos estudando o espaço "NoSQL", agora tenho um problema que é bastante "relacional" por natureza. Hoje eu vejo repositórios de dados com olhos bem diferentes do que antes. Coisas como Riak me estragaram de uma maneira que não consigo mais tolerar pontos únicos de falha, "em manutenção" etc. É claro (ou espero) que não perdi totalmente minha sanidade. Esse é um projeto pessoal que ainda não possui requisitos extremamente altos (ou ainda).
A maioria das soluções de fragmentação não me dá o que quero (pelo menos de relance), provavelmente porque meu problema é bastante "fácil" de resolver. Pelo menos no nível conceitual (ignorando as restrições que os próprios RDBMs trazem para a mesa).
Eu tenho uma pequena quantidade de dados "compartilhados", que podem ser duplicados livremente. Não possui requisitos de consistência rígida. Isso pode ser armazenado em um banco de dados do tipo dínamo e será escalado infinitamente. Mas ainda gostaria de usar um único banco de dados, se possível.
Eu tenho muitos dados "por usuário". Ou seja - muitos usuários, com todos os usuários com dados de tamanho absolutamente razoável, realmente adequados para serem armazenados em um único nó do PostgreSQL. Estamos falando de 10s de milhares de registros no máximo.
Eu nunca preciso consultar usuários cruzados e não preciso de atomicidade entre usuários.
Isso parece extremamente fácil de conseguir. Pelo menos quando estou olhando com meus "olhos NoSQL".
Aqui estão minhas idéias ingênuas para iniciantes:
No extremo, eu poderia apenas serializar o usuário inteiro como uma única Chave / Valor no Riak. Obviamente, a de / serialização constante de vários megabytes de dados será lenta e é por isso que estou pensando em usar o PostgreSQL. Muitos Riak K / Vs são proibidos, pois preciso de atomicidade / transações nos dados de cada usuário.
Eu poderia usar um banco de dados SQLite por usuário e usar algo como GlusterFS para redundância / disponibilidade. Esta é provavelmente a solução que eu vou escolher se não encontrar algo igualmente bom usando o PostgreSQL. Prós: Pode diminuir / aumentar a escala muito bem; Contras: Eu preferiria ter os tipos e rigidez do PostgreSQL sobre o SQLite
Então, o que eu idealmente solicitaria de uma solução de fragmentação do PostgreSQL:
- Mantenha automaticamente várias cópias dos dados de todos os usuários (em máquinas diferentes). Consiga alternar dinamicamente o nó mestre por usuário / shard (se o mestre anterior ficar inativo).
- Ser capaz de aumentar / diminuir a escala dinamicamente, adicionando / removendo nós do servidor. Principalmente como Riak é capaz de fazer.
- Não exijo que meu aplicativo saiba com quais nós conversar e quando.
Respostas:
O Postgres-XL está tentando resolver isso a partir de 2014. Eles estão visando diretamente o big data no PostgreSQL e têm desenvolvedores do Stado a bordo.
fonte
Eu acho que a melhor opção é o pgpool-II . Você pode ter até 128 nós e
Outra opção pode ser o Stado
fonte