首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TokyoCabinet: hdb出现分段故障->close()

TokyoCabinet: hdb出现分段故障->close()
EN

Stack Overflow用户
提问于 2009-08-27 03:01:28
回答 1查看 394关注 0票数 1

在TC Hash数据库中插入了大约800万条记录后,我遇到了分段故障。在插入所有内容之后,我关闭了DB,但我在代码的这一部分(tchdb.c)捕获了一个分段错误:

代码语言:javascript
复制
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;
}

更具体地说,在注释行。

数据库是这样打开的:

代码语言:javascript
复制
tchdbopen(hdb, db_file,  HDBOWRITER | HDBOCREAT))

使用以下命令调整数据库:

代码语言:javascript
复制
tchdbtune(hdb, 25000000, -1, -1, HDBTLARGE);
tchdbsetcache(hdb, 100000);

.tch文件大约为2 2GB (2147483647字节)。有趣的是,只有当我插入大约800万条记录时,才会发生这种情况。如果有两三百万,数据库就完了。插入800万条记录需要大约3个小时,因为我从文本文件中读取数据。

有什么想法吗?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-08-28 03:49:01

只是解决了这个问题。我使用的是32位系统,在这种系统中,TC只能处理最大2 2GB的数据库。解决方案是使用"--enable-off64“选项构建TC。如下所示:

代码语言:javascript
复制
./configure --enable-off64
make
make install
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1338645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档