1
TCハッシュデータベースに約800万レコードを挿入した後、セグメンテーションフォールトに陥りました。すべてが挿入された後、私はDBを閉じる私はコード(tchdb.c)のこの部分でセグメンテーション違反をキャッチ:especificallyコメント行でTokyoCabinet:hdb-> close()のセグメンテーションフォールト
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は次のように開いた:
tchdbtune(hdb, 25000000, -1, -1, HDBTLARGE);
tchdbsetcache(hdb, 100000);
.tchファイルが2GB(2147483647バイト)程度である。
tchdbopen(hdb, db_file, HDBOWRITER | HDBOCREAT))
DBを用いてtunnedれます。興味深いのは、約800万レコードを挿入したときだけ起こっているということです。 2〜3百万人がDBを完全に閉鎖します。テキストファイルからデータを読み込むので、800万レコードを挿入するのに約3時間かかります。
アイデア?
ありがとう