wukong icon indicating copy to clipboard operation
wukong copied to clipboard

发现索引数据太庞大了,内存完全不够用,想把索引数据改存在数据库,应该改哪个位置?

Open insionng opened this issue 9 years ago • 23 comments

目前看来要修改索引器的代码...有什么提示吗?

insionng avatar Nov 22 '15 06:11 insionng

索引表放在内存中是为了方便查询,如果放在数据库会慢很多,你确定这是你想要的?

huichen avatar Nov 27 '15 04:11 huichen

服务器内存太小,我目前考虑是改用Goleveldb来存索引表,应该属于可以接受的范围内。

insionng avatar Nov 27 '15 07:11 insionng

确实,我现在已经把悟空用到项目中了,不过做了很大的改动,其中就有core中对接数据库的改造,直接存储反向索引文档,节约内存,也节约初始化时间。

andeya avatar Nov 27 '15 07:11 andeya

@henrylee2cn 能否告知修改的思路?大概哪些地方做了怎么的修改?

insionng avatar Nov 27 '15 08:11 insionng

创建两个公共变量,一个反向索引列表的,一个文档评分字段的,在索引器、排序器初始化时,将指针赋给对应字段,大致是这个思路,当然原来的持久化存储那一套要全部去掉。

andeya avatar Nov 27 '15 08:11 andeya

@henrylee2cn 哦,也就是修改后原有的持久存储部分就废了,明白~

insionng avatar Nov 27 '15 08:11 insionng

@henrylee2cn https://github.com/henrylee2cn/wukong 好像没有看到存储到数据库的部分.

insionng avatar Nov 27 '15 08:11 insionng

嗯,因为我把悟空写进了我这边的一个核心架构中,涉及一小部分业务方面的东西,不能独立使用,所以就没更上去

andeya avatar Nov 27 '15 09:11 andeya

今天我根据作者的最新源码,改个较完美版本,提交上来吧

andeya avatar Nov 28 '15 00:11 andeya

@henrylee2cn 期待!

insionng avatar Nov 28 '15 08:11 insionng

https://github.com/henrylee2cn/wukong 这个版本是在官方最新源码基础上改进的:

  1. 持久化存储对象,从原始文档改为反向索引文档与文档评分字段,从而避免程序重启后,需要重新分词、索引的麻烦;
  2. 将持久数据库分片数与索引器、排序器的分片数保持一致,即实现一一对应关系,从而保证从数据库可以完美恢复;
  3. 依然存在的问题:悟空采用的这两中KV数据库,读写速率太慢,严重拖累高并发的特性。

andeya avatar Nov 28 '15 12:11 andeya

@henrylee2cn 第三个问题我建议用goleveldb,读写都很快,之前我就是用这个替换原来的两种数据库。

insionng avatar Nov 28 '15 14:11 insionng

@henrylee2cn 我提交了Goleveldb存储的支持代码,因为并发协程的关系,分片越多,读写就越快,我分了64片,每分钟基本1万数据左右。

insionng avatar Nov 29 '15 04:11 insionng

@insionng 没有找到你提交的代码啊?

andeya avatar Nov 29 '15 06:11 andeya

@insionng 急用啊,兄弟,哪里有你改的代码?那个存储分片的问题,我可以优化的。

andeya avatar Nov 29 '15 06:11 andeya

@henrylee2cn https://github.com/henrylee2cn/wukong/pull/1 https://github.com/henrylee2cn/wukong/pull/1/commits 我提交到这里了,须要合并一下~

使用的时候设一下 os.Setenv("WUKONG_STORAGE_ENGINE", "ldb") 就可以了~

insionng avatar Nov 29 '15 06:11 insionng

@henrylee2cn 数据持续增加中,内存快爆了...索引表改存数据库改得怎样呢?期待不需要占用太多内存的版本,慢点是可以接受的.

insionng avatar Dec 02 '15 07:12 insionng

@insionng @henrylee2cn 搞得怎么样了你们

tugouer avatar Dec 13 '15 12:12 tugouer

@boojoo-exp 单纯的sego分词效果其实不好,所以还是需要wukong做索引。我现在也在等 @henrylee2cn 的消息。

insionng avatar Dec 18 '15 13:12 insionng

@henrylee2cn 你基于wukong做的改进是放在你的代码库还是已经merge到了wukong了。

csrgxtu avatar Aug 04 '16 12:08 csrgxtu

因为索引很大,所以我将索引内容放到了文件中持久化,但是没次搜索启动载入的时候很耗时间,这里我不知道Lucene是如何做的,lucene就很快。

csrgxtu avatar Aug 04 '16 12:08 csrgxtu

@csrgxtu wukong 最初是作为 无状态微服务 的核心搜索模块来设计的,全量数据保存在内存中,不做持久化存储,可以随时重启服务,并主要从网络数据库中更新全量和增量数据,建索引的瓶颈主要在网络 IO 的 latency。lucene 的优化方向并不是 wukong 的初衷。

huichen avatar Aug 04 '16 13:08 huichen

有没有支持多级索引的计划

WanliTian avatar Aug 02 '17 13:08 WanliTian