TC 해시 데이터베이스에 약 800 만 레코드를 삽입 한 후 세그먼트 오류가 발생합니다. 모든 삽입 후 나는 DB를 닫습니다하지만 난 코드 (tchdb.c)의이 부분에서 분할의 오류를 잡았 :TokyoCabinet : hdb-> close()의 분할 오류
주석 라인에서 especificallystatic void tchdbsetflag(TCHDB *hdb, int flag, bool sign){
assert(hdb);
char *fp = (char *)hdb->map + HDBFLAGSOFF;
if(sign){
*fp |= (uint8_t)flag; //SEGFAULT HERE!
} else {
*fp &= ~(uint8_t)flag;
}
hdb->flags = *fp;
}
더.
DB를이 같이 연 :
tchdbtune(hdb, 25000000, -1, -1, HDBTLARGE);
tchdbsetcache(hdb, 100000);
.tch 파일 2GB의 (2,147,483,647 바이트)에 관한 것입니다 :
tchdbopen(hdb, db_file, HDBOWRITER | HDBOCREAT))
DB를은으로 두시면됩니다. 흥미로운 점은 약 800 만 건의 레코드를 삽입 할 때만 발생한다는 것입니다. 2 ~ 3 백만 명의 DB가 정상적으로 종료됩니다. 8 백만 건의 레코드를 삽입하는 데는 텍스트 파일에서 데이터를 읽는 데 약 3 시간이 걸립니다.
아이디어가 있으십니까?
감사합니다.