TC ハッシュ データベースに約 800 万件のレコードを挿入した後、セグメンテーション エラーが発生しました。すべてが挿入された後、DB を閉じますが、コードのこの部分 (tchdb.c) でセグメンテーション違反をキャッチしました。
static 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は次のように開かれました:
tchdbopen(hdb, db_file, HDBOWRITER | HDBOCREAT))
DB は次のように調整されます。
tchdbtune(hdb, 25000000, -1, -1, HDBTLARGE);
tchdbsetcache(hdb, 100000);
.tch ファイルは約 2GB (2147483647 バイト) です。興味深いのは、約 800 万件のレコードを挿入した場合にのみ発生していることです。200 万または 300 万で、DB は問題なく終了します。テキスト ファイルからデータを読み取るため、800 万件のレコードを挿入するには約 3 時間かかります。
何か案は?
ありがとう