Domanda

Ho bisogno di eseguire ricerche distribuite su un ampio insieme di piccoli file (~ 10 M) con ogni file che è un insieme di coppie chiave: valore . Ho un set di server con un totale di 56 core CPU disponibili per questo - questi sono principalmente dual core e quad core, ma anche un grande DL785 con 16 core.

Il sistema deve essere progettato per le query online, sto idealmente cercando di implementare un servizio web che restituisca l'output JSON su richiesta da un front-end.

Per complicare ulteriormente le cose, per ogni particolare ricerca a volte vorrei solo guardare la ultima versione di ciascun file, ma altre ricerche potrebbero applicarsi solo a quelle versioni di file esistenti in un data particolare.

Ho esaminato Hadoop, ma l'amministrazione è piuttosto orribile e i metodi di inoltro dei lavori predefiniti sono lenti. Sembra essere progettato per l'elaborazione offline su larga scala e non per l'elaborazione dei dati online.

CouchDB ha un bell'aspetto come archivio documenti e conosce i documenti e il versioning di key: value e MapReduce, ma non riesco a trovare nulla su come può essere usato come distribuito sistema MapReduce. Tutta la documentazione relativa al clustering parla dell'utilizzo del clustering e della replica dell'intero intero database per bilanciamento del carico , mentre ciò di cui ho bisogno è distribuzione del carico .

Ho anche studiato vari DHT e, sebbene vadano bene per l'archiviazione e il recupero di singoli record, sono generalmente scarsi nel fare la parte 'map' di MapReduce. È cruciale passare in rassegna l'intero set di documenti.

Quindi il mio sistema ideale comprenderebbe un file system distribuito come HDFS di Hadoop, con le funzionalità di servizio web di CouchDB.

Qualcuno può indirizzarmi verso qualcosa che possa aiutare? Il linguaggio di implementazione non è troppo preoccupante, tranne per il fatto che deve essere eseguito su Linux.

È stato utile?

Soluzione

Sembra che il dominio problematico sia più adatto a una soluzione come Solr. Solr offre interfacce http ad altre applicazioni, anche JSON . È possibile partizionare la ricerca su più macchine o distribuire una singola copia su macchine per il bilanciamento del carico (master / slave). Dipenderebbe da ciò che ha funzionato meglio per i tuoi dati. Ma nella mia esperienza con risultati di ricerca in tempo reale, Lucene / Solr batterà qualsiasi sistema basato su un sistema di mappa / riduzione.

È molto semplice integrare Solr in un'applicazione e fare aggiornamenti incrementali. Non ha davvero idea del controllo delle versioni. Se è davvero necessario, potresti dover trovare un altro modo per affrontarlo.

Altri suggerimenti

Potrei essere un po 'confuso su ciò di cui la tua applicazione ha bisogno, hai detto che devi essere in grado di cercare tra coppie chiave / valore, dove Solr sarebbe un'ottima applicazione. Ma menzioni anche la necessità di utilizzare la parte della mappa della mappa / riduzione e che devi scansionare documenti 10M. Non sono sicuro che troverai una soluzione in grado di scansionare documenti da 10 milioni e restituire risultati online (nel giro di millisecondi). Ma un'altra soluzione è anche guardare HBase . Questo si basa su HDFS e consente di eseguire la mappa per ridurre i lavori del tipo desiderato, milioni di elementi più piccoli. Ma un lavoro non sarà sottomettibile e terminerà in qualsiasi momento vicino al tempo che stai cercando.

Attualmente ho un HBase di prova configurato con elementi RSS (2M articoli, diversi Kb per articolo). La dimensione totale del DB è di ~ 5Gb. Esistono diversi lavori eseguiti su questo DB che scansionano tutti gli elementi e quindi producono i risultati. Il cluster eseguirà la scansione degli elementi a ~ 5.000 / secondo, ma per completare un processo sono ancora necessari circa 10 minuti.

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