2011-11-08 37 views
6

Sto creando un'applicazione Web che dovrebbe avere un carico di scrittura elevato e migliaia, anche milioni di record gerarchici che rappresentano alberi definiti/definiti dall'utente. Non sto cercando di creare forum con thread ma un enorme database con migliaia di gerarchie di piccole dimensioni (alberi con fino a 10-20 discendenti) ...Memorizzazione di dati gerarchici in MySQL con carico di scrittura elevato

Sono a conoscenza di molti modelli per la memorizzazione di gerarchie - attualmente sto usando Nested Set, ma le prestazioni con enormi quantità di dati e di carico sono un problema. Sono anche dubbioso che elenchi di adiacenza o qualcosa di simile possa risolvere questo.

Ho sperimentato con il database Mongo che è la memoria chiave/valore superveloce ma posso usare solo MySQL.

Mi piacerebbe conoscere altre esperienze di persone con problemi simili.

+0

Potete chiarire un po '? Vuoi archiviare tutto questo e interrogare le gerarchie? Come hai intenzione di fare le tue domande? –

risposta

5

Se è possibile installare i plug-in MySQL, il motore di archiviazione OQGraph è ciò di cui si ha bisogno.

+1

+1 Tuttavia l'installazione di un plug-in non è aperta a tutti. Questo è il motivo per cui ho assegnato il premio a @barryhunter – Johan

+0

Grazie comunque;) Ricorda, più persone conoscono OQGraph, prima potremmo vederlo come parte delle installazioni predefinite presso le società di hosting :) – Mchl

4

Qual è il problema con gli insiemi nidificati?

Quando si aggiungono/rimuovono nodi, i valori lft/rgt vengono ricalcolati?

Piuttosto sicuro con un po 'di attenta pianificazione, è possibile modificarlo in modo da fare solo rare ricompense. Non l'ho provato, ma ho fatto un po 'di pianificazione per un sistema (il client non voleva il sistema alla fine!)

Uno, moltiplica i valori, per esempio 1000, quando li calcoliamo per primi. Quindi se aggiungi un nodo, puoi semplicemente inserire numeri tra i valori. È solo quando c'è un gran numero di inserimenti, si inizia a corto di numeri. Un processo batch a bassa priorità, è possibile ricalcolare l'albero per liberare i numeri per gli inserimenti nuovi.

L'eliminazione può anche essere archiviata, con numeri di manipolazione. In realtà un nodo senza figli è facile. Nessuna ricomputazione integrata. Diventa più complicato se i bambini, ma penso che dovrebbe essere fattibile.

+0

+1 Joe Celko ha alcuni ottimi post su questo da qualche parte. Credo che il suo libro "Joe Celko's SQL for smarties" abbia anche una sezione. Sicuramente vale la pena cercare su Google. –