[Python] Progetto SW
Enrico Bianchi
enrico.bianchi a ymail.com
Sab 7 Nov 2015 16:51:28 CET
On 11/06/2015 06:39 PM, enrico franchi wrote:
> Altri aggeggi (che so, il clustering) richiedono comunque parecchia
> infrastruttura. Che sia o meno multi-vendor (ovvero, che sia piu'
> integrato in Oracle, ok... ma se vuoi un cluster hai comunque bisogno
> di tirare su nodi, lb, possibilmente qualche sorta di controller).
Vero, ma comunque in ottica di HA e` qualcosa che serve e fa comodo.
Gia` l'avere BDR (che si spera che sia integrata completamente in 9.5)
sara` un ottimo passo avanti, almeno nella gestione del bilanciamento
delle connessioni tramite pgBouncer
> Poi, su una nota completamente differente, mi viene sempre da dire...
> ma *veramente* vogliamo queste cose in un db relazionale?
Enrico, per essere franchi (scusa il gioco di parole), si, sono cose che
in un db relazionale come PostgreSQL servono. Perche` in un contesto di
datawarehouse o di business intelligence hai a che fare con tabelle con
milioni di record (dove milioni e` piu` di 5, giusto per tenersi bassi).
Introdurre un sistema di di partizionamento dei dati ed una gestione
parallela delle query significa quindi non solo avere una gestione
migliore dei dati, ma anche delle performance non indifferenti. E il
mettere un middleware in mezzo (e.g. per la gestione delle query
parallele) significa solo aggiungere una pezza, perche` non solo
aggiungi uno strato da manutenere, ma rischia anche di peggiorare le
prestazioni piuttosto che migliorarle (siamo ad un livello superiore
rispetto all'implementazione nativa. Ed e` da vedere anche in
quest'ottica l'aggiunta delle viste materializzate in PostgreSQL 9.3
> Spiego meglio... molte delle feature che menzioni (sharding e
> partizionamento) non sono per nulla banali da risolvere in modo
> efficiente in modo generale.
In teoria partizionamento (tramite rule, trigger e viste) e sharding
(tramite fdw) lo hai gia`, ma avere una gestione semplificata ("alla
Oracle" per intenderci) e` qualcosa a cui dovrebbero puntare (e comunque
ci vogliono puntare, basta vedere che uno dei punti fermi nella TODO
List di PostgreSQL e` ad esempio la semplificazione della gestione del
partizionamento) anche nell'ottica di ottenere performance migliori
> Quindi se il mio db offre queste feature, ottimo, eh. Ma se poi devo
> comunque mettermi a pensare le query in modo diverso che tengono conto
> di come sono messe le cose, altrimenti mi parte completamente la
> performance...
Il pensare le query diferentemente e` un concetto alquanto labile.
Poniamo ad esempio Oracle: il parallelismo delle query si ottiene
tramite un costrutto ad hoc del CREATE TABLE (che di suo e` fortemente
dipendente dal RDBMS) e successivamente mediante un SELECT /*+
PARALLEL(n) */ , ovvero a conti fatti non cambia nulla e, soprattutto,
rimane compatibile con praticamente tutto. Ed il discorso di pensare
differentemente e` un discorso che devi fare sempre, ovvero ad esempio
se in MongoDB non ragioni in logica di sharding dei dati le prestazioni
se ne vanno a donnine (testato sulla mia pelle)
> e quindi magari mi metto a progettare lo schema in modo da supportare
> meglio il tutto, etc etc etc.
Sinceramente non capisco questo tuo ragionamento, quando progetto uno
schema dati uso le funzionalita` che mi servono, non tutte le
funzionalita` del database. Per intenderci, se ho un database in cui la
tabella piu` grande ha 50.000 record non partiziono le tabelle.
Diversamente, gia` se mi aspetto 1.000.000 e piu` record posso
cominciare a valutare la questione
> Quindi: sta roba... l'hai provata *davvero*?
Personalmente non mi e` mai servita, ovvero non sono mai arrivato a
gestire moli di dati cosi` grosse. Ma sono funzionalita` pesantemente
utilizzate in ambito finanziario o in ambito bancario (per dire, SAP
usava - ora non so se hanno cambiato qualcosa - una tabella di
"journaling" in cui venivano loggate tutte le operazioni effettuate,
ovvero avevi un mostro che dopo pochi giorni diventava grosso circa
30mln di record, non usare il partizionamento in quel caso significava
avere una tabella ingestibile)
> Perche' se c'e', ma di fatto va usata con molta cura, non sono
> convinto che non mi convenga usare Dynamo o mettere su un cluster
> cassandra o hadoop.
Anche un indice e` da usare con molta cura, eh ;)
> Ok. Perche' PG fa un bel po' di roba "unica" su tutto questo. Roba
> anche *preziosa* per cui mi viene voglia di non considerare soluzioni
> NoSQL per tanto e' fatta bene.
Lo so, infatti stavamo valutando il passaggio da Oracle 11g a PostgreSQL
proprio per il supporto a JSON (passaggio che poi non si fara` per una
serie di molteplici motivi)
> Se si tratta solo di avere json sintatticamente corretto con qualche
> forma di ricerca limitata e lenta (come per esempio era nelle versioni
> piu' vecchie di postgresql) la cosa mi interessa di meno.
Da quello che ho visto, in Oracle 12c fai query del tipo SELECT
tabella.campojson.chiave FROM tabella e da qui lo tratti come se fosse
un dato normale, ma non so dirti di piu` (e.g. non capisco come faccia a
gestire gli array). Ovviamente ci sono anche delle funzioni e dei
constraint per gestire il tipo di dato, ma il mio assunto rimane lo
stesso :)
Enrico
Maggiori informazioni sulla lista
Python