13

キー/バリュー ストア (おそらく Python) を作成しようと考えていますが、これはほとんど経験のためであり、非常に便利な製品だと思います。いくつか質問があります。一般に、キーと値のペアは通常、メモリとディスクにどのように保存されますか? ディスクに保存されているものをメモリにロードするにはどうすればよいでしょうか? キー/値ストアはすべてのキー/値ペアを一度にメモリに保持しますか? それともディスクから読み取られますか?

この件に関する文献をいくつか見つけようとしましたが、あまりうまくいかず、ここの誰かが私を助けてくれることを望んでいました.

4

7 に答える 7

24

それはすべて、飛び込みたい複雑さのレベルによって異なります。無数の可能な方法でファイルにシリアル化された単純な Python から始めてdict(その中でおそらく pickle が最も単純です)、完全なデータベース システムを実装するところまで行くことができます。

調べてみてくださいredis- これは C で書かれたキー/値ストアで、サーバー「DB」として動作します。優れたドキュメントと読みやすいコードが含まれているため、Python 実装のアイデアを借りることができます。

さらに先に進むには、B ツリーについて読むことができます。

特定の質問について: DB サイズを超えると、すべてをメモリに保持することはできないため、ディスクからデータをロードするための堅牢な方法が必要です。また、ストアがシングル クライアントかマルチ クライアントかを検討します。これは、その実装に深刻な影響を及ぼします。

于 2009-11-14T08:44:52.497 に答える
4

shelve永続的な辞書を提供するPython のモジュールを見てください。基本的には、ピクルスをデータベース (通常は dmb または BSDDB) に保存します。どのように機能するかを見るshelveと、いくつかの洞察が得られます。ソースコードは、Python ディストリビューションに付属しています。

注目すべきもう 1 つの製品はDurusです。これは、ディスクへの永続性のために独自の B ツリー実装を使用するオブジェクト データベースです。

于 2009-11-14T09:05:38.930 に答える
3

学習目的でPythonでキー/値ストアを実行している場合は、pickleモジュールから始めるのが最も簡単な場合があります。これは、任意のPythonデータストリームを永続ストアに書き込み、再度読み取るための高速で便利な方法です。

于 2009-11-14T07:53:43.007 に答える
3

' Berkley db 'を見て、それがどのように機能するかを確認できます。これはキー/値DBであるため、直接使用できます。または、オープンソースであるため、ほとんどの永続性、トランザクション、およびページングを処理する方法を確認できます。参照されたページ。

これがPythonバインディングですhttp://www.jcea.es/programacion/pybsddb.htm

于 2009-11-14T08:05:42.827 に答える
2

Amazon は、高可用性のキー値ストレージ システムである Dynamoに関するドキュメントをリリースしました。主にスケーリングの問題 (多数のマシンで実行されるキー/値ストアを作成する方法) を扱いますが、いくつかの基本事項も扱い、一般的に読む価値があります。

于 2009-11-14T08:35:59.270 に答える
1

まず、この質問はかなり古いことを知っています。

私は、キー値ストア ライブラリであるaodbm ( http://sf.net/projects/aodbm/ ) の作成者です。aodbm は不変の B+Tree を使用してデータを保存します。したがって、変更が行われるたびに、新しいツリーがファイルの末尾に追加されます。これはおそらくスペースの無駄遣いのように聞こえるかもしれませんが、前のツリーのノードの大部分が参照されているため、オーバーヘッドは実際には非常に低くなります。任意の時点でメモリに保持されるツリー全体はほとんどありません (最大で O(log n))。

于 2011-03-04T21:07:42.647 に答える