我正在使用 BerkeleyDB 开发一个小型应用程序。我有一个关于在 BDB 中多次打开数据库的问题。

我有一大堆文本(语料库),我想加载其中的一部分来进行计算。我这里有两个伪代码(与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)

在第二个示例中,我将在计算之前打开数据库,为每个循环加载令牌,然后关闭数据库。

在第一个示例中,每次循环请求令牌时,我都会打开、获取然后关闭数据库。

有性能损失吗?

我还注意到我正在使用 DBEnv 来管理数据库

有帮助吗?

解决方案

如果您不缓存打开的文件,您将始终会损失性能,因为:

  • 你多次调用 open() 和 close() ,这是相当昂贵的,
  • 您将丢失所有潜在的缓冲区(系统缓冲区和 bdb 内部缓冲区)。

但在代码编写之前我不会太关心性能。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top