Domanda

Sto costruendo un indice dei dati, che comporterà la memorizzazione di un sacco di triplette in forma (document, term, weight). Sarò memorizzare fino a qualche milione di tali righe. Attualmente sto facendo questo in MySQL come una semplice tabella. Sto memorizzare gli identificatori del documento e termine, come valori di stringa di chiavi esterne ad altre tabelle. Sto ri-scrittura del software e alla ricerca di modi migliori di memorizzazione dei dati.

Guardando il modo in cui funziona HBase, questo sembra adattarsi allo schema piuttosto bene. Invece di memorizzare un sacco di triplette, ho potuto mappare document a {term => weight}.

sto facendo questo su un singolo nodo , quindi non mi preoccupo di nodi distribuiti ecc Devo solo bastone con MySQL perché funziona, o sarebbe saggio cercare HBase? Vedo che Lucene lo utilizza per l'indicizzazione full-text (che è analogo a quello che sto facendo). La mia domanda è in realtà come sarebbe un singolo nodo HBase confrontare con un singolo nodo di MySQL? Vengo da Scala, in modo forse un API Java diretta avere un vantaggio rispetto JDBC e MySQL parsing etc ogni query?

La mia preoccupazione principale è la velocità di inserimento, come che è stato il collo di bottiglia in precedenza. Dopo l'elaborazione, io probabilmente finire per mettere nuovamente i dati in MySQL per il live-interrogazione perché ho bisogno di fare alcuni calcoli che sono meglio fatto entro MySQL.

Cercherò prototipazione entrambi, ma sono sicuro che la comunità può darmi qualche informazioni preziose in questo.

È stato utile?

Soluzione

Utilizzare lo strumento giusto per il lavoro.

Ci sono un sacco di sistemi di base anti-RDBMS o (in pratica disponibile, Soft Stato, alla fine coerente), al contrario di ACID (Atomicità, Consistenza, Isolamento, Durabilità) tra cui scegliere qui e qui .

Ho usato RDBMS tradizionale e anche se è possibile memorizzare CLOB / BLOB, lo fanno Non sono dotati di indici su misura specificamente per la ricerca di questi oggetti.

Si vuole fare la maggior parte del lavoro (calcolando la frequenza ponderata ogni tupla trovato) durante l'inserimento di un documento.

Si potrebbe anche voler fare un certo lavoro segnando l'utilità di ciascuna (DocumentID, Searchword) coppia dopo ogni ricerca.

In questo modo si può dare ricerche sempre migliori ogni volta.

Anche voi volete memorizzare un punteggio o di peso per ogni ricerca e ponderata punteggi per somiglianza con altre ricerche.

E 'probabile che alcune ricerche sono più comuni di altri e che gli utenti non sono fraseggio loro query di ricerca in modo corretto anche se il loro significato di fare una ricerca comune.

L'inserimento di un documento dovrebbe anche causare qualche cambiamento al peso di ricerca indici.

Più ci penso, più complessa è la soluzione diventa. Si deve iniziare con un buon progetto prima. I più fattori vostra Design anticipa, migliore sarà il risultato.

Altri suggerimenti

MapReduce sembra un ottimo modo di generare le tuple. Se si riesce a ottenere un lavoro scala in un file JAR (non sono sicuro dal momento che non ho usato Scala prima e sono un n00b JVM), che sarebbe una semplice questione per inviarlo insieme e scrivere un po 'di un wrapper per eseguirlo sulla mappa di ridurre cluster.

Per quanto riguarda la memorizzazione delle tuple dopo il gioco è fatto, si potrebbe anche prendere in considerazione un database basato su documenti come MongoDB se sei solo la memorizzazione di tuple.

In generale, sembra che si sta facendo qualcosa di più statistiche con i testi ... avete considerato semplicemente utilizzando Lucene o solr di fare quello che stai facendo, invece di scrivere il proprio?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top