문제

BerkeleyDB를 사용하여 작은 앱을 개발하고 있습니다. 그리고 BDB에서 여러 시간에 데이터베이스를 열는 것에 대한 질문이 있습니다.

나는 큰 텍스트 세트 (코퍼스)를 가지고 있으며 계산을하기 위해 그 일부를로드하고 싶습니다. 여기에는 두 개의 의사 코드 (파이썬과 혼합)가 있습니다.

@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)

두 번째 예에서는 계산하기 전에 DB를 열고 각 루프에 대한 토큰을로드 한 다음 DB를 닫습니다.

첫 번째 예에서, 루프가 토큰을 요청할 때마다, 나는 DB를 열고, 가져 와서 닫을 것이다.

성능 손실이 있습니까?

또한 DBENV를 사용하여 데이터베이스를 관리하고 있습니다.

도움이 되었습니까?

해결책

열린 파일을 캐싱하지 않으면 항상 성능이 손실됩니다.

  • 당신은 꽤 비싼 오픈 ()와 close ()를 여러 번 호출합니다.
  • 모든 잠재적 버퍼 (시스템 버퍼 및 BDB 내부 버퍼 모두)를 잃어 버립니다.

그러나 코드가 작성되기 전에 성능에 대해별로 신경 쓰지 않을 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top