Banco de dados de 100 terabytes no PostgreSQL sem sharding

9

É realista configurar um banco de dados de 100 TB (aproximadamente 90 TB) no PostgreSQL sem compartilhamento de dados entre vários nós? Existem histórias / exemplos de sucesso sobre configurações semelhantes?

lagarto
fonte
4
Eu imagino que depende da sua carga de trabalho. Como os dados são distribuídos e como serão consultados? Que tipo de tempo de resposta você precisa?
Frank fazendeiro
Bem, o perfil de carga pode ser descrito como inserções frequentes (cerca de 50 K por segundo no pico), relativamente raramente seleciona (intervalo de linhas por usuário e registro de data e hora). Os dados podem ser facilmente Sharded / repartida pelo utilizador e a data / timestamp

Respostas:

9

50 mil gravações por segundo que precisam ser absorvidas é mais do que um desafio normalmente. Mesmo em benchmarks sintéticos com inserções bastante simples, os limites do PostgreSQL tendem a atingir cerca de 10 K / s - e você nem tem uma fera tão grande em termos de tamanho do banco de dados.

Além disso, o sistema de E / S para esse único nó do PostgreSQL também será interessante, mesmo com o RAID 10 e assumindo que as inserções de 50K serão iguais a apenas 50K IOPS (o que provavelmente está errado, mas depende do esquema e dos índices do banco de dados). ), você precisará de aproximadamente cem discos emparelhados com uma matriz muito boa, para evitar a compra de várias centenas de discos para atender essas gravações em tempo hábil.

Se o sharding for fácil e você espera uma carga de gravação tão grande, escolha sharding. As gravações podem ser muito difíceis de dimensionar.

pfo
fonte
Aceita. Este é o domínio de um sistema do tipo ExaData. Que pena, obter 50k IOPS é bastante trivial nos dias de hoje com o SSD - ou seja, isso vai ser caro. Eu esperaria aqui um orçamento maior de 7 dígitos para o hardware, incluindo um SAN de gama média a alta.
TomTom
Sim, o ExaData é uma opção se você deseja acessar a "pilha de soluções verticalmente integrada", o que provavelmente não é tão ruim, considerando as demandas.
pfo 29/03
Sim. Existem sérias vantagens para algo assim: tanto os 100tb quanto os 50.000 iops não gritam "barato" ´. O Exadata faz o que - 1 milhão de IOPS quando totalmente carregado com SSD?
TomTom
2
Para adicionar a esses comentários, acho que, dado o orçamento necessário para obter esse volume de dados com esse volume de inserções, ficaria tentado a usar um mecanismo SQL pago, seria uma pequena porcentagem do orçamento geral e você Terá um suporte muito melhor.
Chopper3
Eu concordo plenamente. No momento em que seu orçamento para uma SAN atinge algumas centenas de milhares, muitas alterações são alteradas.
TomTom
1

É realista e vai funcionar. O desempenho depende muito da quantidade de RAM que você possui. Quanto maior a RAM, maior o cache e mais o PostgreSQL pode armazenar em cache os dados antes de descarregar para o disco.

O PostgreSQL grava dados no cache e descarrega o cache de tempos em tempos. Portanto, 50k INSERTs por segundo não serão traduzidos para 50k IOPS. Será muito menor, porque agrupará os registros e gravará todos eles ao mesmo tempo.

Um banco de dados desse tamanho não será um problema se a maioria do trabalho for INSERT. O PostgreSQL precisará alterar os índices aqui e ali, mas esse é realmente um trabalho fácil. Se você tivesse muitos SELECTs em um banco de dados desse tamanho, realmente precisaria fazer o shard.

Certa vez, trabalhei em um banco de dados Oracle (Oracle 10g) com 400 TB em um servidor de 16 GB, apenas uma instância. A carga de trabalho do banco de dados também era INSERTs primária, portanto, alguns SELECTs por dia e milhões de INSERTs todos os dias. O desempenho estava longe de ser um problema.

ThoriumBR
fonte
1

Com 100 TB, você tem alguns desafios importantes. Se funcionará ou não para você, depende de como você deseja resolvê-los.

  1. Você precisa de maneiras suficientes para absorver a carga de gravação. Isso depende da carga de gravação. Mas com armazenamento suficientemente impressionante, ele pode ser resolvido. A velocidade é um grande problema aqui. Da mesma forma, o acesso de leitura deve ser analisado com cuidado.

  2. A maioria dos bancos de dados não consiste em várias tabelas pequenas, mas geralmente possui uma ou duas realmente grandes, que podem ter até a metade do tamanho do banco de dados. O PostgreSQL tem um limite rígido de 32 TB por tabela. Depois disso, o tipo de maré fica sem contadores de páginas. Isso pode ser tratado por uma compilação personalizada do PostgreSQL ou pelo particionamento de tabelas, mas é um sério desafio que precisa ser abordado primeiro.

  3. O PostgreSQL possui limites reais de quanta RAM ele pode usar para várias tarefas. Portanto, ter mais memória RAM pode ou não ajudá-lo além de um certo ponto.

  4. Backups .... Os backups são interessantes nessa escala. Os db de 60 TB que eu conheço precisavam usar backups de snapshots fs e depois falsificar os backups do barman para arquivamento wal. Esses backups falsos eram proxies para backups de instantâneo fs. Como eu disse "Eles não são backups falsos. São backups alternativos!"

Existem pessoas com bancos de dados que se aproximam desse intervalo. Eu conheci pelo menos um indivíduo que trabalhava para um banco na Holanda que tinha um banco de dados PostgreSQL de 60 TB. No entanto, depende realmente da sua carga de trabalho e o tamanho por si só não é o problema.

Chris Travers
fonte