Denormalizzazione automatica per un'applicazione di database NoSQL

1

Abbiamo un caso d'uso in cui memorizziamo dati simili a tabelle, ma conosciamo lo schema dei dati solo in fase di esecuzione. Nella nostra applicazione, un utente esperto definisce uno schema e l'utente normale può creare record e stabilire relazioni tra tali record. Il problema che stiamo avendo è che quando si eseguono query complesse sulle relative "tabelle" (si potrebbe dire, join) con il filtraggio e l'ordinamento, le cose diventano lente, il che è logico.

Per fare un esempio. Diciamo che abbiamo una tabella di articoli con righe 1M e tabella fornitori con 500 righe. Alcuni fornitori hanno articoli da 50K. Ora diciamo che voglio ottenere tutti gli articoli da quel fornitore, ma ordinati per nome dell'articolo. Questa query è lenta. Il che non è strano poiché in pratica crea una sorta di tabella / risultato temporaneo, che ha bisogno di ordinare, ma non può farlo velocemente in quanto non esiste un indice su una tabella / risultato temporaneo.

La nostra soluzione corrente utilizza Neo4j, ma ho anche provato questo su orientdb e in entrambi i casi le query sono lente, a causa dello stesso comportamento.

Ora abbiamo risolto questo problema per ora creando indici al runtime in base allo schema fornito dall'utente, denormalizzando articoli e fornitori in un unico indice. Il problema è che mantenere aggiornato questo indice è molto complicato. Diciamo che vogliamo filtrare sulla tabella degli articoli sul nome del fornitore. Ora il nome del fornitore è nell'indice, ma è stato replicato 50K volte nell'esempio sopra. Quindi, se l'utente cambia il nome del fornitore, è necessario aggiornare i record dell'indice 50K. Dandoci ogni sorta di mal di testa e problemi di temporizzazione delle prestazioni come quello che succede se l'utente in un paio di secondi cambia il nome del fornitore due volte, abbiamo bisogno di accodare le operazioni. Ecc ecc.

Quindi, la mia domanda attuale, esiste un modo pulito e non ingombrante per denormalizzare automaticamente o indicizzare fuori dalla scatola, per un sistema in cui lo schema DB può cambiare in fase di esecuzione?

    
posta Wouter 04.09.2014 - 09:19
fonte

1 risposta

1

Stai chiedendo un'operazione SQL su un database NOSQL che mi sembra alquanto illogico. Si avvicina a NOSQL con una mentalità SQL, che dovresti scatenare.

Per il problema in questione, direi di guardare in una soluzione NOSQL che fornisce l'indicizzazione full-text come Apache Solr o < a href="http://sphinxsearch.com/"> Sfinge

    
risposta data 04.09.2014 - 09:43
fonte

Leggi altre domande sui tag