問題タブ [key-value]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Reliable and efficient key--value database for Linux?
I need a fast, reliable and memory-efficient key--value database for Linux. My keys are about 128 bytes, and the maximum value size can be 128K or 256K. The database subsystem shouldn't use more than about 1 MB of RAM. The total database size is 20G (!), but only a small random fraction of the data is accessed at a time. If necessary, I can move some data blobs out of the database (to regular files), so the size gets down to 2 GB maximum. The database must survive a system crash without any loss in recently unmodified data. I'll have about 100 times more reads than writes. It is a plus if it can use a block device (without a filesystem) as storage. I don't need client-server functionality, just a library. I need Python bindings (but I can implement them if they are not available).
Which solutions should I consider, and which one do you recommend?
Candidates I know of which could work:
- Tokyo Cabinet (Python bindings are pytc, see also pytc example code, supports hashes and B+trees, transaction log files and more, the size of the bucket array is fixed at database creation time; the writer must close the file to give others a chance; lots of small writes with reopening the file for each of them are very slow; the Tyrant server can help with the lots of small writes; speed comparison between Tokyo Cabinet, Tokyo Tyrant and Berkeley DB)
- VSDB (safe even on NFS, without locking; what about barriers?; updates are very slow, but not as slow as in cdb; last version in 2003)
- BerkeleyDB (provides crash recovery; provides transactions; the
bsddb
Python module provides bindings) - Samba's TDB (with transactions and Python bindings, some users experienced corruption, sometimes
mmap()
s the whole file, therepack
operation sometimes doubles the file size, produces mysterious failures if the database is larger than 2G (even on 64-bit systems), cluster implementation (CTDB) also available; file grows too large after lots of modifications; file becomes too slow after lots of hash contention; no built-in way to rebuild the file; very fast parallel updates by locking individual hash buckets) - aodbm (append-only so survives a system crash, with Python bindings)
- hamsterdb (with Python bindings)
- C-tree (mature, versatile commercial solution with high performance, has a free edition with reduced functionality)
- the old TDB (from 2001)
- bitcask (log-structured, written in Erlang)
- various other DBM implementations (such as GDBM, NDBM, QDBM,, Perl's SDBM or Ruby's; probably they don't have proper crash recovery)
I won't use these:
- MemcacheDB (client-server, uses BereleleyDB as a backend)
- cdb (needs to regenerate the whole database upon each write)
- http://www.wildsparx.com/apbcdb/ (ditto)
- Redis (keeps the whole database in memory)
- SQLite (it becomes very slow without periodic vacuuming, see autocompletion in the in the location bar in Firefox 3.0, even though versions 3.1 and later of sqlite allow
auto_vacuum
ing; beware: small writing transactions can be very slow; beware: if a busy process is doing many transactions, other processes starve, and they can never get the lock) - MongoDB (too heavy-weight, treats values as objects with internal structure)
- Firebird (SQL-based RDBMS, too heavy-weight)
FYI, a recent article about key--value databases in the Linux magazine.
FYI, an older software list
FYI, a speed comparison of MemcacheDB, Redis and Tokyo Cabinet Tyrant
Related questions on StackOverflow:
php - 配列なしでphpキーと値のペアのインスタンスを作成する
多次元配列を構築するための再帰関数を書いています。基本的に、問題は次のとおりです。
考え?関数の構造を書き直して機能させることができることは知っていますが、それは不要なようです。
scalability - 安定した本番品質の nosql データストアはありますか?
実稼働システムで使用できる実稼働品質の nosql ストアはありますか。私はcassandra、tokyodb、couchdbなどを見てきましたが、どれも本番環境のような環境に展開する準備ができていないようです. 毎分数千のリクエストと、大量の読み取り/書き込み/更新について話しています。私の唯一の懸念は、速度とサービス時間です。nosqlストアを効果的に使用する本番システムを知っている人はいますか? Google/Yahoo/IBM などの大企業が支援する nosql ストアを知っている人はいますか?
google-app-engine - 格納されたエンティティ間の関係も可能にする nosql ストアはありますか?
格納されたエンティティ間の関係を格納/維持するための nosql キー値ストアを探しています。Google App Engine のデータストアでは、エンティティ間の所有関係と非所有関係が許可されていることは知っています。人気のある nosql ストアのいずれかが同様のものを提供していますか?
それらのほとんどはスキーマレスですが、関係をキー値ストアに割り当てる方法はありますか?
c# - C#Linq Result ToDictionary Help
辞書から結果を取得するラムダ式があります。
式は必要なペアをプルバックします。IDEのデバッグモードでそれらを確認できます。
これをソースと同じタイプの辞書に戻すにはどうすればよいですか?sortDictのTElementがKeyValuePairであることは知っていますが、ToDictionary拡張メソッドの構文を完全に理解するのに問題があります。また、varの結果を区分的に作成して新しい辞書を作成しようとしましたが、役に立ちませんでした。
このようなものはありますか(機能的に):
php - 動的配列キーの追加
これが私のプリコードです...
そして、ここに私のコードがあります...
これを使用すると、次の結果が得られます...
さて、問題は、これがまさに私が望む結果であるということですが、私は を使用したくありませんeval()
。
コードへの入力として、 と のリストがkeys
ありnumber
ます。は、特定の配列の子ベースの生成に使用される配列number
の値に設定する必要があります。keys
keys
$array
これを達成する別の方法はありますか?コードが機能するため、キー/番号を新しい値で上書きしたくありません-eval()
これは既に保持されているため、新しいコードでも同じことを行う必要があります。
java - PostgreSQLデータベースを単純なキー値ストアとして使用するための最良の方法
postgreSQLデータベースを使用する必要があり、現在のberkeleyDBの使用に取って代わります。それでも; これは理想的な状況ではなく、私の手に負えない状況だと思います。
だから問題は...postgreSQLをキーバリューストアにする必要がある場合、可能な限り効率的にしながら、これをどのように行うのでしょうか?
私の値はバイト配列であり、私のキーは文字列です。これらの文字列の長さにいくつかの制限を課すことができます。
値とキーを保持する主キー列にblobを使用する必要があると思いますが、この旅に出たばかりなので、スタックオーバーフローコミュニティの誰かがこれを行ったかどうか、または特定の「落とし穴」があるかどうかに興味があります気をつけるべきです。
objective-c - 配列を使用せずに NSMutableDictionary に複数のキーと値を追加するにはどうすればよいですか?
すべてのキーを配列に追加して辞書の片側に追加できることは知っていますが、辞書の特定のポイントに値を追加または挿入する方法に興味があります。私が今持っている方法では、新しいエントリのためのスペースを空けるために最後のエントリを上書きし続けるだけだと思います:
出力は次のとおりです。
2010-01-13 11:08:51.484 割り当て_1b[6035:a0f] http://www.apple.com
scalability - 動的に水平方向にスケーラブルなKeyValueストア
次のようなキーバリューストアはありますか?
- ノードを追加および削除するだけで、データが自動的に再配布されます
- ノードを削除しても、冗長性を提供するために2つの追加データノードを追加できます
- 最大1GBのサイズのテキストまたは画像を保存できます
- 最大100TBのデータを保存できます
- 高速(その上でクエリを実行できるようになります)
- これをすべてクライアントに対して透過的にします
- Ubuntu/FreeBSDまたはMacで動作します
- 無料またはオープンソース
基本的に、「単一」を使用できるものが必要であり、memcached、db、およびいくつかのストレージコンポーネントについて心配する必要はないので、そうです、データベースの「銀の弾丸」が必要です。
ありがとう
ズベイル
これまでの回答:BackBlaze上にあるMogileFS-私が見る限り、これは単なるファイルシステムであり、いくつかの調査の結果、大きな画像ファイルにのみ適しているようです。
東京暴君-ライトクラウドが必要です。新しいノードを追加しても、これは自動スケーリングされません。私はこれを調べましたが、単一のノードに適合するクエリでは非常に高速であるようですが
Riak-これは私が自分で調べているものですが、まだ結果がありません
Amazon S3-本番環境で唯一の永続化レイヤーとしてこれを使用している人はいますか?私が見たところ、複雑なクエリは高すぎるため、画像の保存に使用されているようです
@shamanはCassandraを提案しました-間違いなく私が調べているものです
これまでのところ、100ポイントの賞金を提供した後でも、質問に答えられなかったとしても、私が述べた基準を満たすデータベースまたはキーバリューストアはないようです。