Database da 100 terabyte su PostgreSQL senza sharding


9

È realistico impostare un database da 100 TB (circa 90 TB in realtà) su PostgreSQL senza condivisione dei dati tra un numero di nodi? Ci sono storie / esempi di successo su configurazioni simili?


4
Immagino che dipenda dal tuo carico di lavoro. Come vengono distribuiti i dati e come verranno interrogati? Che tipo di tempo di risposta hai bisogno?
Frank Farmer,

Bene, il profilo di carico può essere descritto come inserti frequenti (circa 50 K al secondo al picco), relativamente raramente seleziona (intervallo di righe per utente e data / ora). I dati possono essere facilmente frammentati / suddivisi per utente e data / data / ora

Risposte:


9

50 K scrive al secondo che devono essere assorbiti è più che una sfida di solito. Anche nei benchmark sintetici con inserti abbastanza semplici, i limiti di PostgreSQL tendono a raggiungere un massimo di circa 10 K / s - e lì non hai nemmeno una bestia così grande in termini di dimensioni del database.

Anche il sistema I / O per quel singolo nodo PostgreSQL sarà interessante come anche con RAID 10 e supponendo che gli inserti da 50K saranno pari a soli 50K IOPS (il che è probabilmente sbagliato, ma dipende dallo schema del database e dagli indici ), avrai bisogno di circa un centinaio di dischi abbinati a un array molto buono che ti salva dall'acquisto di diverse centinaia di dischi per servire quelle scritture in modo tempestivo.

Se lo sharding è facile e ti aspetti un carico di scrittura così grande, allora scegli lo sharding. Le scritture possono essere molto difficili da ridimensionare.


Essere d'accordo. Questo è il dominio di un sistema di tipo ExaData. È triste, ottenere 50k IOPS è abbastanza banale in questi giorni con SSD - anche se questi saranno costosi. Mi aspetterei un budget di 7 cifre più grande qui per l'hardware, compreso un SAN di fascia media e alta.
TomTom

Sì, ExaData è un'opzione se si desidera passare allo "stack di soluzioni integrate verticalmente" che probabilmente non è poi così male considerando le esigenze.
pfo

Si. Ci sono seri vantaggi per qualcosa del genere, sia un 100 tb che 50.000 iop non gridano davvero "a buon mercato". Exadata fa cosa: 1 milione di IOPS quando è completamente caricato con SSD?
TomTom

2
Per aggiungere a questi commenti, penso che dato il budget richiesto per ottenere quel volume di dati con quel volume di inserti sarei tentato di usare un motore SQL a pagamento, sarà una piccola percentuale del budget complessivo e tu avremo un supporto molto migliore.
Chopper3

Sono completamente d'accordo. Nel momento in cui il budget per una SAN raggiunge un paio di centomila, molte valutazioni cambiano.
TomTom

1

È realistico e funzionerà. Le prestazioni dipendono in larga misura dalla quantità di RAM disponibile. Maggiore è la RAM, maggiore è la cache e più lungo PostgreSQL può memorizzare nella cache i dati prima di scaricare su disco.

PostgreSQL scriverà i dati nella cache e scaricherà la cache di volta in volta. Pertanto, 50.000 INSERTI al secondo non verranno tradotti in 50.000 IOPS. Sarà molto meno, perché raggrupperà insieme i record e li scriverà tutti contemporaneamente.

Un database così grande non è un problema se la maggior parte del lavoro è INSERT. PostgreSQL dovrà cambiare gli indici qua e là, ma è davvero un lavoro facile. Se avessi un sacco di SELECT su un database di queste dimensioni, avresti davvero bisogno di partizionare.

Una volta ho lavorato su un DB Oracle (Oracle 10g) con 400 TB su un server da 16 GB, solo un'istanza. Anche il carico di lavoro del database era INSERT primario, quindi alcuni SELECT al giorno e milioni di INSERT ogni giorno. Le prestazioni erano lungi dall'essere un problema.


1

A 100 TB hai alcune sfide importanti. Se funzionerà per te o no dipende da come vuoi affrontarli.

  1. Sono necessari modi sufficienti per assorbire il carico di scrittura. Questo dipende dal carico di scrittura. Ma con una memoria sufficientemente impressionante può essere risolto. La velocità è un grosso problema qui. Allo stesso modo, l'accesso alla lettura deve essere esaminato attentamente.

  2. La maggior parte dei database non sono costituiti da un gruppo di tabelle piccole ma spesso ne hanno una o due veramente grandi, che possono raggiungere la metà della dimensione del db. PostgreSQL ha un limite rigido di 32 TB per tabella. Dopodiché il tipo di marea esaurisce i contatori di pagine. Questo potrebbe essere gestito da una build personalizzata di PostgreSQL o dal partizionamento delle tabelle, ma è una sfida seria che deve essere affrontata all'inizio.

  3. PostgreSQL ha limiti reali nella quantità di RAM che può utilizzare per varie attività. Quindi avere più RAM può aiutarti o meno oltre un certo punto.

  4. Backup .... I backup sono interessanti su questa scala. Il db da 60 TB che conosco doveva usare i backup dell'istantanea fs e quindi falsificare i backup per barman per l'archiviazione wal. Questi backup falsi erano proxy per i backup di istantanee di fs. Come ho detto "Non sono backup falsi. Sono backup alternativi!"

Ci sono persone con database che si avvicinano a questo intervallo. Ho incontrato almeno un individuo che lavorava per una banca nei Paesi Bassi con un database PostgreSQL da 60 TB. Tuttavia, dipende molto dal carico di lavoro e le dimensioni da sole non sono il problema.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.