Numero massimo di database per singola istanza di PostgreSQL 9


9

Sviluppando un'applicazione multicustomer intendiamo utilizzare un database diverso per ogni cliente. Ma potrebbero essere più di 1000 clienti (applicazioni).

PostgreSQL lo gestirà senza problemi?

Qualcuno ha provato qualcosa di simile?

Nota: 35 tabelle per ognuna, con un massimo di 3000 record in media, per ciascun database.

Risposte:


5

Non l'ho provato da solo, ma ce ne sono altri in giro. Qui puoi vedere che anche 10.000 database funzionano senza problemi su una singola istanza. Puoi anche trovare alcuni aspetti pratici su ServerFault .

Poiché i database sono piuttosto piccoli, non si verificherà alcun tipo di limitazione del numero di file del sistema operativo host. L'unico problema a cui riesco a pensare è che quando si accederà a tutti questi database contemporaneamente, sarà difficile gestire tutte quelle connessioni.

E, come ultima nota: sei il benvenuto in questo sito. Speriamo che tu rimanga con noi per molto tempo.


Grazie per i tuoi commenti Sì, i collegamenti simultanei potrebbero essere un mal di testa, ma l'altra opzione è una tabella condivisa per ogni applicazione, incredibilmente più complessa (è necessario riprogrammare per l'app).
Juanin,

2

Sembra una cosa disordinata da fare dal punto di vista gestionale. Come pensi di eseguire il backup di tanti database? con una sceneggiatura che gira comunque ciascuno?

A meno che tu non abbia una buona ragione, perché non avere un solo database in cui la struttura è progettata in modo che tutti i dati rimandino a un ID cliente. Aggiungi indici / chiave esterna / chiavi primarie in base a questo campo per garantire l'integrità dei dati.

Quindi devi solo avere una clausola where in tutte le tue query per accedere a un solo ID cliente. Questo sarà molto più semplice da mantenere ed è altrettanto facile da sviluppare (perché in entrambi i casi è necessario consentire l'identificazione del cliente)


1
Questo è un punto molto valido e valido. Forse l'OP dovrebbe pensare all'utilizzo degli schemi e avere solo alcune tabelle nello schema pubblico, disponibili per l'UNIONE con le tabelle nello schema del cliente privato.
François Beausoleil,

Grazie, ma questa opzione è stata scartata fin dall'inizio. Questa è una porta di un'applicazione già sviluppata, e cambiare TUTTO il codice non è così banale in questa fase. Ma sì, la gestione giornaliera di oltre 100 database sarà ... interessante ... no?
Juanin,

1
Passare da database separati a schemi separati non dovrebbe comportare cambiamenti significativi nel codice. In particolare non è necessario aggiungere un prefisso agli oggetti con i loro schemi perché lo search_pathfa per te.
Daniel Vérité,

Wal Archiviazione per un backup avrebbe senso qui.
Jharwood,

0

Ci sono persone che lo fanno, in particolare per l'hosting di server condiviso.

Pensando ai problemi qui non c'è pranzo gratis. Probabilmente potresti farlo con gli schemi in modo trasparente per l'applicazione. Tuttavia, si arriva a migliaia di schemi e decine di migliaia di tabelle, il che pone ulteriori problemi.

Penso che nel complesso, l'approccio multibb sia più sano alla luce dei tuoi commenti.

La gestione (come i backup) diventerà interessante. Inoltre, penso che ad un certo punto le connessioni al db inizieranno a richiedere più tempo. Se stai usando pg_hba.conf per limitare l'accesso (cosa che dovresti fare) anche questo diventerà un mal di testa e probabilmente vorrai creare una soluzione per generare quel file per te .....


Non riesco a vedere il problema con pg_hba.conf. La nostra app utilizza Ruby on Rails e commuta connessioni per database diversi, ma sempre nella stessa scatola di Linux. stai parlando di problemi di concorrenza durante l'accesso al file?
Juanin,

1
No, solo se vuoi gestire a quali dbs è possibile accedere da quali host, diventerà un file lungo e la gestione potrebbe diventare un po 'fastidiosa.
Chris Travers,

0

Spero che questo link sia meglio da leggere: 10.000 database su un cluster PostgreSQL di Jon Jensen, 2008.

Un estratto:

La risposta breve: Postgres 8.1 gestisce ben 10.000 database. \l in psql genera un lungo elenco di database, ovviamente, ma restituisce abbastanza rapidamente. Il test di concorrenza ad hoc andava bene. L'esecuzione di query, inserimenti, ecc. Su un gruppo selezionato tra i vari database di gioco ha funzionato bene, anche durante la creazione di nuovi database.

[...]

Il limite effettivo su questa piattaforma [ Linux ext3 ] è probabilmente 31995 database, poiché ogni database occupa una sottodirectory in data / base / e il filesystem ext3 ha un limite di 31998 sottodirectory per una directory, derivante dal suo limite di 32000 collegamenti per inode.


1
Le risposte che contengono solo collegamenti non sono molto utili, poiché i collegamenti tendono a diventare obsoleti nel tempo. Ti preghiamo di considerare di aggiungere il riepilogo di qualunque cosa tu stia collegando nella tua risposta.
Mustaccio,
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.