Производительность теряется при многократном открытии БД в BerkeleyDB - PullRequest
0 голосов
/ 09 сентября 2009

Я использую 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 Ответ

3 голосов
/ 09 сентября 2009

Если вы не кэшируете открытый файл, вы всегда потеряете производительность, потому что:

  • Вы вызываете open () и close () несколько раз, что довольно дорого,
  • вы теряете все потенциальные буферы (как системные буферы, так и внутренние буферы bdb).

Но я бы не слишком заботился о производительности до написания кода.

...