在TC Hash数据库中插入了大约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;
}更具体地说,在注释行。
数据库是这样打开的:
tchdbopen(hdb, db_file, HDBOWRITER | HDBOCREAT))使用以下命令调整数据库:
tchdbtune(hdb, 25000000, -1, -1, HDBTLARGE);
tchdbsetcache(hdb, 100000);.tch文件大约为2 2GB (2147483647字节)。有趣的是,只有当我插入大约800万条记录时,才会发生这种情况。如果有两三百万,数据库就完了。插入800万条记录需要大约3个小时,因为我从文本文件中读取数据。
有什么想法吗?
谢谢
发布于 2009-08-28 03:49:01
只是解决了这个问题。我使用的是32位系统,在这种系统中,TC只能处理最大2 2GB的数据库。解决方案是使用"--enable-off64“选项构建TC。如下所示:
./configure --enable-off64
make
make installhttps://stackoverflow.com/questions/1338645
复制相似问题