複数のプロセスをサポートするNode.jsの最速の非メモリKey-Valueストアは何ですか?
単純なキーと値の文字列/文字列のペア(ドキュメントやJSONではなく、文字列のみ)を保存する必要があります。
ここにいくつかの例があります(それらの数百万があるでしょう):
私が試してみました:
LevelDBの回避策は multilevel で、HTTPを介して単一のLevelDBプロセスを公開します。
しかし、もちろんそれは代償を伴います。速いものが必要です。
次のようなKey-Valueストアがありますか?
私は読書だけに関心があります。高速のマルチプロセス読み取りが必要ですが、書き込みは必要ありません。
私はLevelDBの現在の速度に満足しています。それが単一プロセスであるという事実だけではありません。
追加の詳細:
[〜#〜] lmdb [〜#〜] を確認することをお勧めします(これはOpenLDAPの最も効率的なエンジンであり、他の多くのオープンソースプロジェクトで使用されています)。
LMDBは、組み込みのキー/値ストアであり、Berkeley-DBまたはLevelDBのようなAPIを備えており、すべてをメモリに格納する必要がなく、複数のプロセスからのアクセスをサポートできます。 Node.jsバインディングがあります。
Leveldb上に構築されたredisプロトコル互換データベースであるssdb
を試すことができます。
https://github.com/ideawu/ssdb
一部のコマンドは異なる場合がありますが、既存のnode-redis
クライアントを使用できます。
ベンチマーク :
Redis (100.000x)
13,540 op/s ⨠ set small
13,289 op/s ⨠ set medium
13,279 op/s ⨠ set large
13,651 op/s ⨠ get large
13,681 op/s ⨠ get medium
14,428 op/s ⨠ get small
SSDB (100.000x)
12,252 op/s ⨠ set small
11,824 op/s ⨠ set medium
11,720 op/s ⨠ set large
13,810 op/s ⨠ get large
13,593 op/s ⨠ get medium
12,696 op/s ⨠ get small
lmdb (100.000x)
4,616 op/s ⨠ set small
11,104 op/s ⨠ set medium
17,283 op/s ⨠ set large
13,778 op/s ⨠ get large
16,002 op/s ⨠ get medium
50,562 op/s ⨠ get small
multilevel (100.000x)
6,124 op/s ⨠ set small
5,900 op/s ⨠ set medium
5,944 op/s ⨠ set large
6,215 op/s ⨠ get large
6,125 op/s ⨠ get medium
6,310 op/s ⨠ get small
ご覧のとおり、ssdb
はredisとほぼ同じ速度で、永続的なストレージ用に設計されています。 lmdb
言及されている@ didier-speziaは、小さなデータを取得するのに超高速ですが、設定が遅いです。
FaceBookの RocksDB は高速(特にSSDストレージ)であることが想定されており、他にもLMDB(前述)や WiredTiger などがあります。
あなたはRedisについて言及しました-Redis APIを使用したいが、RAMの代わりに上記のキー/値データベースの1つをストレージとして持っている場合、私が知っている2つのプロジェクトがあります(それらをテストしていません):- LedisDB (Goで記述)および ardb (C++で記述)。
CuttDB という名前のキー値データベースライブラリはあまり知られていませんが、あまり知られていない(変更されると確信しています)もののテストを最近開始しました。それは非常に高速なパフォーマンスを持ち、HDD上の大量のデータを処理するように構築されています。 Memcachedサーバーインターフェイスも含まれています。
あなたが遭遇しようとしている問題は、「値が非常に速い」ことと、特にキー値システムで行うようにランダムアクセス読み取りがある場合、ディスクが混在しないことです。メモリからの読み取りはディスクからの読み取りよりもはるかに高速であるため、できるだけ多くのデータをメモリに取り込む必要があります。
これは組み込みデータベースになるため、メモリを最小限にしたいのはなぜですか?その場合は、Empress- http://www.empress.com を参照してください。いくつかのプロジェクトでそれを使用しており、ロードする量を構成できます。ただし、RDBMSのオーバーヘッドが発生するため、希望どおりにリーンになるかどうかはわかりません。
また、MemcacheアドオンでMySQLを検討することもできます。これにより、MySQLをキー値ストアとして使用できます。 SQLレイヤーの処理をスキップするため、通常のMySQLよりもはるかに高速です。また、MySQLを使用すると、ノブを回してメモリの使用量を試すことができます。
Firebirdは、メモリ使用量の少ないもう1つのdb- http://www.firebirdnews.org/docs/fb2min.html です。
とにかく、これが役に立てば幸いです。ニーズの詳細な説明なし(これは埋め込まれているのに、なぜメモリを節約する必要があるのか、そしてメモリが貴重である場合、メモリ消費量が少ないと思うのは何ですか?より多くの分析を提供することは困難です。
MySQL(またはMariaDB)をマスター/スレーブレプリケーションで使用してみませんか。要件に基づきます。 MySqlのマスタースレーブアーキテクチャが適しています。
基本的に、NoSQLには多くのサーバーが必要です。たとえば、MongoDBの最小設定には3つのサーバーが必要で、HBaseには4つのサーバーが必要です。
この観点から、より読みやすくする必要がある場合は、mysqlアーキテクチャに新しいスレーブサーバーを追加します。
Mysqlの読み取りパフォーマンスは2k tpsであると想定しています。次に、mysqlの読み取りパフォーマンスの4つのノードは8k tpsです。
テスト結果とサービスの使用状況(読み取り/書き込み比率)によって異なります。
「Marco Cecconi-The StackOverflowのアーキテクチャ」というリンクを確認してください。 http://www.youtube.com/watch?v=t6kM2EM6so4