python - pyplot - Quale negozio chiave/valore è il più promettente/stabile?




title matplotlib python (10)

Sto cercando di iniziare a utilizzare un negozio di chiavi / valore per alcuni progetti collaterali (principalmente come esperienza di apprendimento), ma nel recente passato sono sorti così tanti che non ho idea da dove cominciare. Solo elencando dalla memoria, posso pensare a:

  1. CouchDB
  2. MongoDB
  3. Riak
  4. Redis
  5. Gabinetto di Tokyo
  6. Berkeley DB
  7. cassandra
  8. MemcacheDB

E sono sicuro che ci sono più là fuori che sono sfuggiti ai miei sforzi di ricerca. Con tutte le informazioni là fuori, è difficile trovare solidi confronti tra tutti i concorrenti. I miei criteri e le mie domande sono:

  1. (Il più importante) Quale raccomandi e perché ?
  2. Qual è il più veloce?
  3. Qual è il più stabile?
  4. Qual è il più facile da installare e installare?
  5. Quali hanno collegamenti per Python e / o Ruby?

Modificare:
Finora sembra che Redis sia la soluzione migliore, ma è solo perché ho ottenuto una risposta solida (da ardsrk). Sto cercando altre risposte come la sua, perché mi indicano la direzione di informazioni utili e quantitative. Quale negozio di Key-Value usi e perché ?

Modifica 2:
Se qualcuno ha esperienza con CouchDB, Riak o MongoDB, mi piacerebbe sentire le tue esperienze con loro (e ancor più se puoi offrire un'analisi comparativa di molti di loro)


Quale negozio di valore chiave è il più promettente / stabile?

Lo store G-WAN KV sembra piuttosto promettente :

DB engine            Traversal
-----------          ----------------------------
SQLite               0.261 ms  (b-tree)
Tokyo-Cabinet (TC)   4.188 ms  (hash table)
TC-FIXED             0.103 ms  (fixed-size array)
G-WAN KV             0.010 ms  (unamed)

Inoltre, viene utilizzato internamente dal server Web G-WAN, noto per le sue elevate prestazioni di concorrenza (vale a dire per la domanda di stabilità ).


Quale raccomandi e perché?

Raccomando Redis. Perché? Continua a leggere!!

Qual è il più veloce?

Non posso dire se è il più veloce. Ma Redis è fast . È veloce perché contiene tutti i dati nella RAM. Recentemente, è stata aggiunta la funzione di memoria virtuale, ma tutti i tasti rimangono nella memoria principale con i soli valori usati raramente scambiati su disco.

Qual è il più stabile?

Di nuovo, poiché non ho esperienza diretta con gli altri negozi di valore-chiave, non posso confrontarmi. Tuttavia, Redis viene utilizzato in produzione da molte applicazioni Web come GitHub e Instagram , tra molti altri.

Qual è il più facile da installare e installare?

Redis è abbastanza facile da configurare. Prendi il source e su Linux make install eseguire make install . Questo rende il binario redis-server che potresti metterlo sul tuo percorso e avviarlo.

redis-server si collega alla porta 6379 per impostazione predefinita. redis.conf un'occhiata a redis.conf fornito con il sorgente per maggiori opzioni di configurazione e configurazione.

Quali hanno collegamenti per Python e / o Ruby?

Redis ha un eccellente supporto per Ruby e Python .

In risposta al commento di Xorlev di seguito: Memcached è solo un semplice archivio di valori-chiave. Redis supporta tipi di dati complessi come elenchi, set e serie ordinate e allo stesso tempo fornisce un'interfaccia semplice a questi tipi di dati.

C'è anche make 32bit che rende tutti i puntatori solo a 32 bit di dimensione anche su macchine a 64 bit. Ciò consente di risparmiare una notevole quantità di memoria su macchine con meno di 4 GB di RAM.


C'è anche zodb.


Come dicevano gli altri, dipende sempre dalle tue esigenze. Per esempio preferisco qualsiasi cosa sia adatta alle mie applicazioni.

Ho usato per la prima volta memcached per avere un accesso veloce in lettura / scrittura. Come API Java ho usato SpyMemcached, ciò che viene fornito con un'interfaccia molto semplice che puoi usare per scrivere e leggere dati. A causa di perdite di memoria (non più RAM) mi è stato richiesto di cercare un'altra soluzione, anche io non ero in grado di bilanciare, solo aumentare la memoria per un singolo processo sembrava non essere un buon risultato.

Dopo alcune revisioni ho visto couchbase, viene fornito con replica, clustering, auto-failover e una community edition (MS Windows, MacOs, Linux). E la cosa migliore per me era che il client Java implementava anche SpyMemcached, quindi non avevo quasi nient'altro da fare come configurare il server e usare couchbase invece di memcached come datastore. Vantaggio? Certo, i miei dati sono ora persistenti, replicati e indicizzati. Viene fornito con una webconsole per scrivere la mappa ridurre le funzioni per le viste del documento in erlang.

Ha supporto per Python, Ruby, .Net e altro, facile configurazione tramite webconsole e strumenti client. Funziona stabile. Con alcuni test ero in grado di scrivere circa 10k al secondo per record di 200 - 400 byte. Leggere le Performance era molto più alto (entrambi testati localmente). Ti diverti molto a prendere la tua decisione.


Hanno tutti caratteristiche diverse. E non dimenticare Project Voldemort che viene effettivamente utilizzato / testato da LinkedIn nella loro produzione prima di ogni uscita.

È difficile da confrontare. Devi chiederti cosa ti serve: es. Vuoi partizionare? se è così allora alcuni di loro, come CouchDB, non lo supportano. Vuoi la codifica della cancellazione? Quindi la maggior parte di loro non ha questo. Eccetera.

Berkeley DB è un motore di archiviazione di basso livello molto semplice, che forse può essere scusato da questa discussione. Su di esso sono costruiti diversi sistemi a valore-chiave, per fornire funzionalità aggiuntive come replica, versioning, codifica, ecc.

Inoltre, di cosa ha bisogno la tua applicazione? Molte delle soluzioni contengono complessità che potrebbero non essere necessarie. Ad esempio, se si memorizzano solo dati statici che non cambieranno, è possibile memorizzarli sotto l'hash del contenuto SHA-1 dei dati (ad esempio, utilizzare l'hash del contenuto come chiave). In questo caso, non devi preoccuparti di freschezza, sincronizzazione, controllo delle versioni e molte complessità possono essere rimosse.


Ho giocato con MongoDB e ha una cosa che lo rende perfetto per la mia applicazione, la possibilità di memorizzare mappe / elenchi complessi nel database direttamente. Ho una grande mappa in cui ogni valore è una lista e non devo fare nulla di speciale solo per scrivere e recuperare quello senza conoscere tutte le diverse chiavi e valori di lista. Non so molto delle altre opzioni, ma la velocità e l'abilità rendono Mongo perfetto per la mia applicazione. Inoltre, il driver Java è molto semplice da usare.


Ho solo esperienza con Berkeley DB, quindi parlerò di ciò che mi piace.

  • È veloce
  • È molto maturo e stabile
  • Ha una documentazione eccezionale
  • Dispone di collegamenti C, C ++, Java e C #, pronti all'uso. Sono disponibili altri collegamenti alla lingua. Credo che Python sia dotato di binding come parte delle sue "batterie".

L'unico lato negativo che ho incontrato è che i binding C # sono nuovi e non sembrano supportare tutte le funzionalità.


Mi piace molto memcached personalmente.

Lo uso su un paio dei miei siti ed è semplice, veloce e facile. Era davvero incredibilmente semplice da usare, l'API è facile da usare. Non memorizza nulla sul disco, quindi il nome memcached, quindi è fuori se stai cercando un motore di archiviazione persistente.

Python ha una copia di Python .

Non ho usato il client Ruby, ma una rapida ricerca su Google rivela RMemCache

Se hai solo bisogno di un motore di memorizzazione nella cache, memcached è la strada da percorrere. È sviluppato, è stabile e ha un sanguinamento veloce. C'è una ragione per cui LiveJournal lo ha fatto e Facebook lo sviluppa. È in uso in alcuni dei più grandi siti là fuori con grande effetto. Scala estremamente bene.


Solo per completare la lista: c'è anche Dreamcache. È compatibile con Memcached (in termini di protocollo, quindi puoi usare qualsiasi libreria client scritta per Memcached), è solo più veloce.


Una distinzione che devi fare è per che cosa userai il DB? Non saltare a bordo solo perché è di tendenza. Hai bisogno di un negozio di valore chiave? o hai bisogno di un negozio basato su documenti? Qual è il tuo fabbisogno di memoria? eseguendolo su una piccola VM o su una separata?

Raccomando di elencare prima i tuoi requisiti e poi vedere quali si sovrappongono ai tuoi requisiti.

Detto ciò, ho usato CouchDB / MongoDB e preferisco usare MongoDB per la sua facilità di configurazione e la migliore transizione dalle query di stile mysql. Ho scelto mongodb su sql a causa degli schemi dinamici (nessun file di migrazione!) E una migliore modellazione dei dati (array, hash). Non ho valutato in base alla scalabilità.

MongoMapper è un grande mapper MongoDB orm per Ruby e c'è già un fork di Rails 3 funzionante.

Ho elencato alcuni dettagli sul motivo per cui ho preferito mongodb nelle diapositive della mia scribd http://tommy.chheng.com/index.php/2010/02/mongodb-for-natural-development/





comparison