1

私はキー値ストアを初めて使用します。永続的な連想配列として LMDB を試して、ファイル パスや URL などの長いキーを使用できるようにしたいと考えています。

LMDB はコンパイル時定数 MDB_MAXKEYSIZE=511 を定義し、キーの長さに最大値を課します。

LMDB の上に永続的な長さのキー ディクショナリを実装するには、どの手法を使用すればよいですか? ある種のハッシングと衝突解決?または、2048 などの別の MAXKEYSIZE で再コンパイルしますか? それとも、LMDB はこの仕事には不適切なツールですか?

4

2 に答える 2

2

私自身の使用では、任意の長さの文字列キーをSHA-256でハッシュして、B+ ツリーの固定サイズの 32 バイト ダイジェスト キーを生成することで、同様のケースを処理しました。この戦略には、次の 2 つの注意事項があります。

  1. プレフィックス文字列の検索を実行する機能が完全に失われます。これは通常、あなたが説明したようなユースケースでは重大な問題ではありません.

  2. 元の文字列キーをすべて列挙できるようにする必要がある場合は、元の文字列を別の LMDB サブデータベースに格納して、SHA-256 ダイジェストに基づいてルックアップを実行し、対応する元の文字列を取得できるようにする必要があります。 -- サブデータベースにキーと値のペアの値として格納されるため、MDB_MAXKEYSIZE制限はありません。これにより、スペース要件が増加し、フル スキャンでのカーソル操作ごとに追加のツリー ルックアップが追加され、文字列が辞書順に生成されなくなります。これらの制限を許容できる場合、これは実行可能なアプローチです。

于 2015-04-23T02:16:56.650 に答える