BerkeleyDBでdbを複数回開くとパフォーマンスが低下する
-
05-07-2019 - |
質問
私はBerkeleyDBを使用して小さなアプリを開発しています。また、BDBでデータベースを複数回開くことについて質問があります。
大量のテキスト(コーパス)があり、その一部を読み込んで計算を行いたい。ここに2つの擬似コード(Pythonとのミックス)があります
@ 1
def getCorpus(token):
DB.open()
DB.get(token)
DB.close()
@ 2
#open and wait
def openCorpus():
DB.open()
#close database
def closeCorpus():
DB.close()
def getCorpus(token):
DB.get(token)
2番目の例では、計算の前にdbを開き、各ループのトークンをロードしてからdbを閉じます。
最初の例では、ループがトークンを要求するたびに、dbを開いて取得し、閉じます。
パフォーマンスの低下はありますか?
また、データベースの管理にDBEnvを使用していることに注意してください
解決
開いたファイルをキャッシュしない場合、次の理由で常にパフォーマンスが低下します:
- open()とclose()を複数回呼び出しますが、これは非常に高価です
- すべての潜在的なバッファ(システムバッファとbdb内部バッファの両方)を失います。
しかし、コードを書く前のパフォーマンスについてはあまり気にしません。
所属していません StackOverflow