Производительность теряется при многократном открытии базы данных в BerkeleyDB
-
05-07-2019 - |
Вопрос
Я использую 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).
Но я бы не слишком заботился о производительности до того, как код будет написан.