代码之家  ›  专栏  ›  技术社区  ›  ntcong

在BerkeleyDB中多次打开数据库时性能下降

  •  0
  • ntcong  · 技术社区  · 15 年前

    我正在用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管理数据库

    1 回复  |  直到 15 年前
        1
  •  3
  •   Piotr Czapla    15 年前

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

    • 您多次调用open()和close(),这是非常昂贵的,
    • 您将丢失所有可能的缓冲区(系统缓冲区和BDB内部缓冲区)。

    但在编写代码之前,我不会太在意性能。