Domanda

C'è una chiave di valore, che mi darà il seguente:

  • Mi permetta di aggiungere e rimuovere i nodi e redstribute i dati automaticamente
  • Consente di rimuovere i nodi e ancora 2 extra nodi di dati per fornire ridondanza
  • Mi permetta di memorizzare il testo o le immagini fino a 1 gb
  • Può memorizzare piccole dimensioni dati fino a 100TB di dati
  • Veloce (modo, le query eseguite su di essa)
  • Tutto questo trasparente per il client
  • Funziona su Ubuntu/FreeBSD o Mac
  • Libero o open source

Io, fondamentalmente, desidera qualcosa che posso utilizzare un "singolo", e non devono preoccuparsi di avere memcached, un db, e di varie componenti, quindi sì, voglio un database "pallottola d'argento" si potrebbe dire.

Grazie

Zubair

Le risposte finora:MogileFS sulla cima di BackBlaze - per Quanto posso vedere questo è solo un filesystem, e dopo qualche ricerca e sembra essere appropriato per il file immagine di grandi dimensioni

Tokyo Tiranno - Esigenze lightcloud.Questo non auto scala come aggiungere nuovi nodi.Ho fatto guardare in questo e sembra che è molto veloce per le query che si adattano su un singolo nodo, però

Riak - Questo è quello che sto cercando dentro di me, ma non ho nessun risultato di sicurezza

Amazon S3 - c'È qualcuno che utilizza questo come il loro unico strato di persistenza nel produzione?Da quello che ho visto sembra essere utilizzato per la memorizzazione delle immagini come query complesse sono troppo costosi

@sciamano suggerito Cassandra - sicuramente uno sto cercando in

Finora sembra che non c'è nessun database o il valore della chiave di negozio che soddisfa i criteri che ho indicato, non anche dopo aver offerto una taglia di 100 punti ha fatto la domanda ottenere risposta!

È stato utile?

Soluzione

Si sta chiedendo troppo da software open source.

Se si dispone di un paio di centinaia di migliaia di dollari nel vostro budget per alcune di classe enterprise software, ci sono un paio di soluzioni.Nulla sta per fare quello che vuoi, fuori dalla scatola, ma ci sono aziende che hanno prodotti che sono vicino a quello che stai cercando.

"Fast (così vi permetterà di query eseguite su di esso)"

Se si dispone di un key-value store, tutto dovrebbe essere molto veloce.Tuttavia il problema è che senza un'ontologia o schema dei dati costruito sulla cima della chiave-valore, si finirà per passare attraverso l'intero database per ogni query.Avete bisogno di un indice che contiene la chiave per ogni "tipo" di dati che si desidera conservare.

In questo caso, di solito si può eseguire query in parallelo contro tutti ~15,000 macchine.Il collo di bottiglia è che a buon mercato hard disk cap a 50 cerca per secondo.Se il set di dati si inserisce in RAM, le prestazioni saranno molto alti.Tuttavia, se le chiavi sono memorizzate nella RAM, ma non c'è abbastanza RAM per la memorizzazione di valori, il sistema goto disco su quasi tutte le chiave-valore ricerche.Le chiavi sono situati in posizioni casuali su l'unità.

Questo si limiti a 50 chiave-valore ricerche al secondo per server.Mentre nel caso di coppie chiave-valore vengono memorizzati in RAM, non è insolito avere 100k di operazioni al secondo per server su hardware commodity (ex.Redis).

Serie dischi prestazioni di lettura è tuttavia estremamente alta.Devo cercare di unità goto 50 MB/s (800 Mb/s) su tutta una serie di letture.Quindi, se siete di memorizzare i valori su disco, è necessario strutturare il sistema di archiviazione in modo che i valori che devono essere letti dal disco può essere letto in modo seriale.

Questo è il problema.Non è possibile ottenere buone prestazioni su un vaniglia chiave-valore, a meno che non si memorizzano le coppie chiave-valore completamente in RAM (o chiavi in RAM dei valori su SSD) o se si definisce un certo tipo di schema o un sistema di tipo superiore dei tasti e quindi cluster di dati su disco in modo che tutte le chiavi di un certo tipo possono essere recuperati facilmente attraverso una serie di lettura del disco.

Se un tasto è dotato di più tipi (per esempio, se si dispone di dati-tipo di relazioni di ereditarietà nel database), quindi premere il tasto sarà un elemento di indice più tabelle.In questo caso, si dovrà fare spazio-tempo dei compromessi per strutturare i valori in modo che possano essere letti in modo seriale del disco.Questo comporta la memorizzazione di copie ridondanti di valore per la chiave.

Che cosa si desidera che sta per essere un po ' più avanzato di una chiave-valore, soprattutto se avete intenzione di fare le query.Il problema della memorizzazione di file di grandi dimensioni, tuttavia, è un non-problema.Finta di sistema può tasti fino a 50 mega.Poi basta rompere un 1 giga di file in 50 meg segmenti e associare un tasto per ogni segmento di valore.Utilizzando un semplice server è dritto in avanti per tradurre la parte del file che si desidera in un valore-chiave operazione di ricerca.

Il problema di garantire la ridondanza è più difficile.La sua molto facile "fontana di codice" o "file di parte" la chiave-valore tabella per un server, in modo che i dati del server può essere ricostruito in velocità del filo (1 Gb/s) su un server di standby, se un particolare server muore.Normalmente, è possibile rilevare server morte di un "battito del cuore" del sistema che viene attivato se il server non risponde per 10 secondi.È anche possibile chiave-valore ricerche contro la parte di file codificati chiave-valore tabelle, ma è inefficiente a fare così, ma ancora dà una copia di backup per il caso di errore del server.Un più grandi problemi è quasi impossibile tenere il backup aggiornato e i dati possono essere di 3 minuti.Se si sta facendo un sacco di scrive, la funzionalità di backup intenzione di introdurre alcune prestazioni, ma il carico sarà trascurabile se il vostro sistema è principalmente fare legge.

Io non sono un esperto di mantenere la coerenza del database e vincoli di integrità in modalità di guasto, quindi non sono sicuro che i problemi di questo requisito sarebbe introdurre.Se non è necessario preoccuparsi di questo, semplifica notevolmente la progettazione del sistema e delle sue esigenze.

Veloce (modo, le query eseguite su di essa)

Primo, dimenticare join o qualsiasi operazione che le scale più veloce che n*log(n) quando il database è questo grande.Ci sono due cose che si possono fare per sostituire la funzionalità normalmente implementato con join.È possibile struttura di dati in modo che non è necessario fare join o è possibile "pre-compilare" la query che si sta facendo e fare un tempo-spazio trade-off e di pre-calcolare il join e di memorizzarli per la ricerca in anticipo.

Per il semantic web, database, penso che ci sarà a vedere la gente che la pre-compilazione di query e fare spazio-tempo trade-off per ottenere prestazioni decenti anche di dimensioni modeste, set di dati.Penso che questo può essere fatto automaticamente e in modo trasparente dal database di back-end, senza alcuno sforzo da parte del programmatore dell'applicazione.Tuttavia, stiamo solo iniziando a vedere dei database aziendali, l'implementazione di queste tecniche per i database relazionali.Nessun prodotto open source non per quanto sono informato e mi avrebbe sorpreso se qualcuno sta cercando di fare questo per i dati collegati in scalabile orizzontalmente database di sicurezza.

Per questi tipi di sistemi, se si dispone di più RAM o spazio di archiviazione il miglior uso di esso è il pre-calcolare e memorizzare il risultato di comuni sub-query per motivi di prestazioni, invece di aggiungere più di ridondanza per la chiave-valore.Pre-calcolare i risultati e l'ordine con i tasti che si sta per eseguire query per girare un n^2 si uniscono in un log(n) di ricerca.Qualsiasi query o sub-query scale peggio di n*log(n) è qualcosa i cui risultati devono essere eseguite e memorizzati nella cache della chiave-valore.

Se si sta facendo un grande numero di scritture, la cache di sub-query decade più velocemente di quanto possano essere trattati e non c'è nessun vantaggio in termini di prestazioni.Trattare con invalidazione della cache cache per sub-query è un altro problema intrattabile.Penso che una soluzione è possibile, ma io non l'ho visto.

Benvenuti all'inferno.Non bisogna aspettarsi di ottenere un sistema come questo per libero per altri 20 anni.

Finora sembra che non c'è nessun database o il valore della chiave di negozio che soddisfa i criteri che ho indicato, non anche dopo aver offerto una taglia di 100 punti ha fatto la domanda ottenere risposta!

Si sta chiedendo per un miracolo.Attendere 20 anni, fino a quando abbiamo open source miracolo database o si dovrebbe essere disposti a pagare per una soluzione su misura per le esigenze dell'applicazione.

Altri suggerimenti

Amazon S3 è una soluzione di archiviazione, non è un database.

Se avete solo bisogno di semplice chiave / valore la soluzione migliore sarebbe quella di utilizzare Amazon SimpleDB in combinazione con S3. File di grandi dimensioni vengono memorizzati su S3, mentre i meta dati per la ricerca sono memorizzati in SimpleDB. questo ti dà un sistema di chiave / valore in senso orizzontale scalabile con accesso diretto alla S3.

C'è un'altra soluzione, che sembra essere esattamente quello che stai cercando: il progetto Apache Cassandra: http: //incubator.apache.org/cassandra/

Al momento Twitter sta transitando Cassandra dal gruppo mysql memcached +

HBase e HDFS insieme soddisfano la maggior parte di questi requisiti. HBase può essere utilizzato per memorizzare e recuperare oggetti di piccole dimensioni. HDFS può essere utilizzato per memorizzare oggetti di grandi dimensioni. HBase compatta piccoli oggetti e li memorizza come quelli più grandi su HDFS. La velocità è relativa - HBase non è veloce su casuale legge da disco come mysql (per esempio) - ma è abbastanza veloce porzione legge dalla memoria (simile a Cassandra). Ha ottime prestazioni in scrittura. HDFS, lo strato di archiviazione sottostante, è completamente resistente alla perdita di nodi multipli. Si replica attraverso le cremagliere così permettendo manutenzione livello di rack. Si tratta di uno stack basato su Java con licenza Apache -. Corre praticamente più OS

I principali difetti di questo stack sono inferiori prestazioni del disco lettura casuale ottimale e la mancanza di dati trasversali di supporto centrale (che è un work in progress).

ti posso suggerire due possibili soluzioni:

1) Servizio di Buy Amazon (Amazon S3). Per 100 TB vi costerà 14 512 $ al mese.
2) soluzione molto più economica:

Crea due pod di storage Backblaze personalizzato ( link ) ed eseguire un MogileFS su di esso.

Attualmente sto indagando come memorizzare petabyte di dati utilizzando soluzioni simili, quindi se si trova qualcosa di interessante su questo, si prega di inviare voi note.

Date un'occhiata a Tokyo Tyrant . E 'molto leggero e ad alte prestazioni, replicando demone l'esportazione di un Tokyo Gabinetto memoria dei valori-chiave per la rete . Ho sentito buone cose su di esso.

Da quello che vedo nella tua domanda Progetto Voldemort sembra essere il più vicino. Date un'occhiata al loro pagina design .

L'unico problema che vedo è come gestirà file di grandi dimensioni, e in base alle questa discussione , cosa che non sono tutti buoni. Ma si può sempre aggirare che abbastanza facilmente utilizzando i file. Alla fine - questo è lo scopo esatto di un file system. Date un'occhiata alla wikipedia elenco dei file system -. La lista è enorme

Si potrebbe voler dare un'occhiata a MongoDB .

Da quello che posso dire siete alla ricerca di un database / mix filesystem distrubuted, che potrebbe essere difficile o addirittura impossibile da trovare.

Si potrebbe voler dare un'occhiata al file system distribuiti come MooseFS o Gluster e mantenere i vostri dati come file. Entrambi i sistemi sono fault-tolerant e distribuito (si può mettere e togliere i nodi a piacere), ed entrambi sono trasparenti per i clienti (costruito su di FUSE) - si sta utilizzando semplici ops filesystem. Questo copre seguenti caratteristiche: 1), 2), 3), 4), 6), 7), 8). Stiamo utilizzando MooseFS per l'archiviazione di film digitale con qualcosa intorno a 1,5 PB di storage e di upload / download è veloce come la configurazione della rete consente (per cui le prestazioni è di I / O dipendente, non protocollo o applicazione dipendente). Non avrete query (funzione 5) sulla vostra lista), ma si può paio tale file system con qualcosa come MongoDB o anche qualche motore di ricerca come Lucene (è cluster indici) per interrogare i dati memorizzati nel file system.

Zubair,

Sto lavorando su un archivio di valori-chiave che finora è più veloce di qualsiasi altra cosa .

Non lo fa (ancora) utilizza la replica, mancano i primi 2 requisiti, ma questa domanda mi ha ispirato -! Grazie per questo

no: Permettetemi di aggiungere in modo semplice e rimuovere i nodi e sarà redstribute i dati
automaticamente no: Mi permetta di rimuovere i nodi e avere ancora 2 nodi di dati aggiuntivi per fornire ridondanza
ok: Mi permetta di memorizzare il testo o le immagini fino a 1 GB di dimensione (sì: illimitato)
ok: può memorizzare i dati di piccole dimensioni fino a 100 TB di dati di (sì: illimitato)
ok: veloce (in modo permetteranno query da eseguire su di esso) (sì: più veloce di serie TC-fissa di Tokyo Cabinet)
ok: Fare tutto questo trasparente per il client (sì: integrato al web server)
ok: Funziona su Ubuntu / FreeBSD o Mac (sì: Linux)
ok: libero o open source (sì: freeware)

Oltre a prestazioni single-thread superiori a hash-tabelle e B-alberi, questo negozio KV è l'unico che conosco di essere "WAIT-FREE" (non il blocco, né ritardare qualsiasi operazione).

Mark Logic sta andando in questa direzione. Niente affatto gratuito, anche se ...

In aggiunta a ciò che altri hanno detto - si potrebbe dare un'occhiata a OrientDB - http: // codice .google.com / p / Orient / un documento e negozio di K / V che sembra molto promettente.

BigCouch . E 'CouchDB, ma ottimizzato per i cluster (e tutti i grandi problemi di dati cluster sono appropriati per). BigCouch è sempre uniti nel progetto di CouchDB come parliamo, dalla gente di Cloudant , molti dei quali sono committer fondamentali per CouchDB.

riepilogo delle vostre esigenze:

  

Mi permetto di aggiungere in modo semplice e rimuovere i nodi e sarà redstribute i dati automaticamente

     

Mi permetta di rimuovere i nodi e avere ancora 2 nodi di dati aggiuntivi per fornire ridondanza

Sì. BigCouch usa il concetto della Dinamo di Quorum per impostare il numero di nodi a mantenere il numero di copie dei dati.

  

Mi permetta di memorizzare il testo o le immagini fino a 1GB di dimensioni

Sì. Proprio come CouchDB, è possibile lo streaming macchie (ad esempio i file) di dimensione arbitraria al database.

  

Può memorizzare piccole dimensioni dei dati fino a 100 TB di dati

Sì. Il team che ha costruito BigCouch lo ha fatto perché sono stati di fronte ad una generazione di sistema di petabyte di dati al secondo.

  

veloce (in modo permetteranno query da eseguire su di esso)

Sì. Le query sono fatte da MapReduce in O (log n) .

  

Fare tutto questo trasparente per il client

     

Funziona su Ubuntu / FreeBSD o Mac

     

libero o open source

Yup! Open source sotto licenza Apache 2.0. installazione di default istruzioni sono per un sistema Debian, come Ubuntu.

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