0

私は 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 番目の例では、計算の前にデータベースを開き、ループごとにトークンをロードしてからデータベースを閉じます。

最初の例では、ループがトークンを要求するたびに、データベースを開き、取得してから閉じます。

パフォーマンスが失われることはありますか?

また、DBEnv を使用してデータベースを管理していることにも注意してください。

4

1 に答える 1

3

開いているファイルをキャッシュしていない場合、次の理由により、常にパフォーマンスが低下します。

  • open() と close() を複数回呼び出すと、かなりコストがかかります。
  • すべての潜在的なバッファー (システム バッファーと bdb 内部バッファーの両方) が失われます。

しかし、コードを書く前のパフォーマンスはあまり気にしません。

于 2009-09-09T19:19:15.563 に答える