ドキュメントを読みましたが、単一のkyotocabinetデータベースにアクセスする複数のプロセス(リーダーとライター)についてはほとんどわかりませんでした。複数のリーダーを作成できるようですが、ONOLOCKを指定しない限り、複数のライターがデータベースを開こうとするのをブロックします。誰かがこれがどのように機能するか、またはそれが可能かどうかについて何か光を当てることができますか?私はKyotoTycoonが1つの選択肢であることを理解していますが、KyotoCabinetについて特に興味があります。
2 に答える
tokyocabinet のマンページでこれを見つけました:
Tokyo Cabinet では、データベースへの接続方法として「リーダー」と「ライター」の 2 つのモードを用意しています。リーダーは検索を実行できますが、保存も削除も実行できません。ライターはすべてのアクセス方法を実行できます。ファイルロックによるデータベース接続時に、プロセス間の排他制御を行います。ライターがデータベースに接続されている間は、リーダーもライターも接続できません。リーダーがデータベースに接続している間、他のリーダーは接続できますが、ライターは接続できません。この仕組みにより、マルチタスク環境での同時接続でデータの一貫性が保証されます。
推測すると、これは京都にも当てはまります。
Kyoto Cabinet はスレッドセーフですが、別々のプロセスで同時に読み取りと書き込みを行うことはできません。ライターが接続されていない限り、複数のリーダー プロセスを使用できます。
ウェブサイトから:
複数のプロセスによる 1 つのデータベースの共有
複数のプロセスが 1 つのデータベース ファイルに同時にアクセスすることはできません。プロセスが接続されている間、データベース ファイルはリーダー/ライター ロックによってロックされます。ファイルのロック機構をエスケープするために `BasicDB::ONOLOCK' オプションを使用しないでください。このオプションは、ファイル ロック メカニズムをサポートしない NFS などの一部のファイル システムに対する回避策です。
複数のプロセスで 1 つのデータベースを共有する場合は、代わりに Kyoto Tycoon を使用してください。これは、Kyoto Cabinet へのネットワーク インターフェイスとしての軽量データベース サーバーです。