Il raggiungimento di ricerche veloci per un grande set di dati: MEMORIA MySQL (heap), Memcached, o qualcos'altro

StackOverflow https://stackoverflow.com/questions/1098255

Domanda

Al momento lavorando su un progetto che è centrato intorno a una nomenclatura medica conosciuta come SNOMED. Al centro di Is SNOMED sono tre insiemi di dati relazionali che sono 350.000, 1,1 mil e 1.3 mil record di lunghezza. Vogliamo essere in grado di interrogare rapidamente questo set di dati per la parte di immissione dei dati in cui ci piacerebbe avere qualche forma di auto-completamento / suggerimento.

Le sue attualmente in un MySQL MyISAM DB solo per scopi dev ma vogliamo iniziare a giocare con un po 'di opzioni di memoria. E 'attualmente 30MB + 90MB + 70MB di dimensioni tra cui gli indici. Il MEMORIA MySQL motore e memcached erano quelli ovvi, quindi la mia domanda è: quale di questi è il vostro suggerimento o c'è qualcosa di meglio là fuori?

Stiamo lavorando in Python principalmente a livello applicazione se questo fa la differenza. Inoltre siamo in esecuzione su un singolo piccolo server dedicato in movimento a 4GB DDR2 presto.

Modifica: Altre Informazioni

Siamo interessati a mantenere il suggerire e completamento automatico veloce. Qualcosa che peform bene per questi tipi di queires è auspicabile. Ogni termine SNOMED tipicamente ha diversi sinonimi, abbreviazioni e un nome preferito. Ci sarà l'interrogazione di questo set di dati pesantemente (90MB dell'indice di formato compreso). Stiamo anche valutando la costruzione di un indice invertito per accelerare le cose e restituire risultati più pertinenti (molti dei termini sono lunghi "arteria spirale complessiva del basalis decidua (struttura del corpo)"). Lucene o qualche altra ricerca a testo integrale può essere appropriato.

È stato utile?

Soluzione

Si veda

Per informazioni su come fare questo con Lucene. Lucene è il più vicino all'industria libreria standard di ricerca full-text. E 'veloce e dà risultati di qualità. Tuttavia, ci vuole tempo per padroneggiare Lucene - si deve gestire molti dettagli di basso livello. Un modo più semplice potrebbe essere quella di utilizzare Solr , un sotto-progetto Lucene, che è molto più facile da configurare , e può dare uscita JSON, che può essere usato per autocomplete .

Come ha detto Todd, è anche possibile utilizzare Sfinge. Non ho mai usato, ma sentito dire che è altamente integrabile con MySQL. Non sono riuscito a trovare il modo di implementare completamento automatico utilizzando Sphinx - forse si dovrebbe pubblicare questo come una questione separata.

Altri suggerimenti

Dal vostro caso d'uso, suona come si vuole fare ricerca full-text; Vorrei suggerire sfinge . E 'velocissimo, anche su grandi insiemi di dati. È possibile integrare memcached se avete bisogno di maggiore velocità.

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