Производительность теряется при многократном открытии базы данных в BerkeleyDB

StackOverflow https://stackoverflow.com/questions/1401497

Вопрос

Я использую BerkeleyDB для разработки небольшого приложения.И у меня есть вопрос об открытии базы данных несколько раз в BDB.

У меня есть большой набор текста (corpus ), и я хочу загрузить его часть для выполнения вычисления.У меня есть два псевдокода (смешанных с 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