2014-09-13 18 views
10

Lo scenario è di circa 1 miliardo di record. Ogni record ha dimensioni di dati 1kb ed è memorizzato in SSD. Quale archivio kv può fornire le migliori prestazioni di lettura casuale? È necessario ridurre l'accesso al disco a una sola volta per query e tutto l'indice dei dati verrà archiviato in memoria.Memorizza valore chiave persistente ad alte prestazioni per una quantità enorme di record

Redis è veloce ma è troppo costoso per memorizzare 1 TB di dati in memoria. LevelDB legge il disco più volte per ogni query. Il più vicino che ho trovato è fatcache ma non è persistente. È un memcached con supporto SSD.

Qualche suggerimento?

risposta

8

RocksDB potrebbe essere la scelta giusta per te, che è ottimizzata per l'archiviazione veloce come memoria e flash-disk, ed è altamente personalizzabile. Se l'applicazione è di sola lettura dopo il caricamento di massa iniziale, è possibile configurare RocksDB per compattare tutto in un unico grande file. In questo modo, le letture sono garantite per avere al massimo I/O singolo. Tuttavia, se l'applicazione gestisce sia le letture che le scritture, al fine di avere al massimo un I/O per lettura, sarà necessario sacrificare le prestazioni di scrittura in quanto è necessario configare rocksdb per compattarlo molto spesso e ciò danneggia le prestazioni di scrittura.

La guida di regolazione per RocksDB si trova anche here.

0

Hai guardato aerospike? Non l'ho usato, ma affermano di avere buone prestazioni su SSD.

2

Si consiglia di provare RocksDB, è una libreria di Facebook ottimizzata per l'archiviazione SSD. Puoi anche provare Ardb, è un build DB NoSQL compatibile con protocollo redis su RockDB/LevelDB/LMDB.

1

LMDB è più veloce di RocksDB e utilizza 1/3 di memoria. Anche LMDb non richiede tuning; RocksDB richiede un'accurata ottimizzazione di oltre 40 parametri per ottenere prestazioni che si avvicinano agli LMDB.

http://www.lmdb.tech/bench/inmem/scaling.html

anche LMDB è pienamente transazionale e il 100% a prova di crash, RocksDB è nessuno dei due.

+0

Ho confrontato RocksDB e LMDB. Nel mio ambiente di test, RocksDB vince. – avhacker

+2

Immagino che LMDB vincerà quando tutti i dati possono essere caricati in memoria. Ecco il mio ambiente di test: 4 GB di RAM VM, 10 milioni di record, ogni record ha la chiave di dimensione 16 byte e il valore di dimensione 1024 byte. Puoi vedere che la dimensione dei dati è almeno 10 GB. Ho provato ripetutamente la lettura casuale nel test impostato più volte e RocksDB vince sempre. – avhacker

+0

Sicuro dipende dalla dimensione dei valori. Vedi questo nuovo rapporto benchmark su disco: http://symas.com/mdb/ondisk/ – hyc