在TC哈希数据库中插入大约800万条记录后,我陷入了分段错误。插入所有内容后,我关闭了数据库,但是在代码的这一部分(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;
}
更具体地说是注释行。
数据库是这样打开的:
tchdbopen(hdb, db_file, HDBOWRITER | HDBOCREAT))
数据库通过以下方式进行调整:
tchdbtune(hdb, 25000000, -1, -1, HDBTLARGE);
tchdbsetcache(hdb, 100000);
.tch文件大约是2GB(2147483647字节)。有趣的是,只有当我插入大约800万条记录时才会发生这种情况。有2或3百万的数据库关闭就可以了。插入800万条记录大约需要3个小时,因为我从文本文件中读取数据。
有什么想法吗?
由于
答案 0 :(得分:3)
刚刚解决了问题。 我使用的是32位系统,TC只能在这样的系统中处理高达2GB的数据库。 解决方案是使用“--enable-off64”选项构建TC。像这样:
./configure --enable-off64
make
make install