Qual é a maneira moderna de particionar o PostgreSQL entre máquinas, quando os dados são "particionados naturalmente"


22

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).

  1. 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.

  2. 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.

  3. 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:

  1. 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.

  2. 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:

  1. 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).
  2. Ser capaz de aumentar / diminuir a escala dinamicamente, adicionando / removendo nós do servidor. Principalmente como Riak é capaz de fazer.
  3. Não exijo que meu aplicativo saiba com quais nós conversar e quando.

Olá loxs, como você finalmente resolveu esse problema?
Dikla

Particionamento no nível do aplicativo com vários armazenamentos de dados. Uma bagunça realmente :( Realmente triste que algo como isso não existe ....
LOXS

Respostas:



4

Eu acho que a melhor opção é o pgpool-II . Você pode ter até 128 nós e

  1. É possível configurar regras complexas de particionamento e distribuição de dados
  2. Suporte "Provisionamento online". Não dimensiona gravações, mas é lido escalável
  3. Não tenho certeza, se possível pronto para uso. Talvez você precise usar o LVS

Outra opção pode ser o Stado

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.