Prestazioni perse quando si apre un db più volte in BerkeleyDB
-
05-07-2019 - |
Domanda
Sto usando BerkeleyDB per sviluppare una piccola app. E ho una domanda sull'apertura di un database più volte in BDB.
Ho una grande serie di testo (corpus) e voglio caricarne una parte per fare il calcolo. Ho due pseudo-codice (mix con python) qui
@ 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)
Nel secondo esempio, aprirò il db prima del calcolo, caricherò il token per ogni ciclo e poi chiuderò il db.
Nel primo esempio, ogni volta che il ciclo richiede il token, apro, ottengo e quindi chiudo il db.
Si sono perse delle prestazioni?
Noto anche che sto usando un DBEnv per gestire il database
Soluzione
Se non stai memorizzando nella cache il file aperto, le prestazioni andranno sempre perse perché:
- chiami open () e close () più volte che sono piuttosto costosi,
- perdi tutti i potenziali buffer (sia buffer di sistema che buffer interni bdb).
Ma non mi importerebbe troppo delle prestazioni prima che il codice venga scritto.