wukong
wukong copied to clipboard
发现索引数据太庞大了,内存完全不够用,想把索引数据改存在数据库,应该改哪个位置?
目前看来要修改索引器的代码...有什么提示吗?
索引表放在内存中是为了方便查询,如果放在数据库会慢很多,你确定这是你想要的?
服务器内存太小,我目前考虑是改用Goleveldb来存索引表,应该属于可以接受的范围内。
确实,我现在已经把悟空用到项目中了,不过做了很大的改动,其中就有core中对接数据库的改造,直接存储反向索引文档,节约内存,也节约初始化时间。
@henrylee2cn 能否告知修改的思路?大概哪些地方做了怎么的修改?
创建两个公共变量,一个反向索引列表的,一个文档评分字段的,在索引器、排序器初始化时,将指针赋给对应字段,大致是这个思路,当然原来的持久化存储那一套要全部去掉。
@henrylee2cn 哦,也就是修改后原有的持久存储部分就废了,明白~
@henrylee2cn https://github.com/henrylee2cn/wukong 好像没有看到存储到数据库的部分.
嗯,因为我把悟空写进了我这边的一个核心架构中,涉及一小部分业务方面的东西,不能独立使用,所以就没更上去
今天我根据作者的最新源码,改个较完美版本,提交上来吧
@henrylee2cn 期待!
https://github.com/henrylee2cn/wukong 这个版本是在官方最新源码基础上改进的:
- 持久化存储对象,从原始文档改为反向索引文档与文档评分字段,从而避免程序重启后,需要重新分词、索引的麻烦;
- 将持久数据库分片数与索引器、排序器的分片数保持一致,即实现一一对应关系,从而保证从数据库可以完美恢复;
- 依然存在的问题:悟空采用的这两中KV数据库,读写速率太慢,严重拖累高并发的特性。
@henrylee2cn 第三个问题我建议用goleveldb,读写都很快,之前我就是用这个替换原来的两种数据库。
@henrylee2cn 我提交了Goleveldb存储的支持代码,因为并发协程的关系,分片越多,读写就越快,我分了64片,每分钟基本1万数据左右。
@insionng 没有找到你提交的代码啊?
@insionng 急用啊,兄弟,哪里有你改的代码?那个存储分片的问题,我可以优化的。
@henrylee2cn https://github.com/henrylee2cn/wukong/pull/1 https://github.com/henrylee2cn/wukong/pull/1/commits 我提交到这里了,须要合并一下~
使用的时候设一下 os.Setenv("WUKONG_STORAGE_ENGINE", "ldb") 就可以了~
@henrylee2cn 数据持续增加中,内存快爆了...索引表改存数据库改得怎样呢?期待不需要占用太多内存的版本,慢点是可以接受的.
@insionng @henrylee2cn 搞得怎么样了你们
@boojoo-exp 单纯的sego分词效果其实不好,所以还是需要wukong做索引。我现在也在等 @henrylee2cn 的消息。
@henrylee2cn 你基于wukong做的改进是放在你的代码库还是已经merge到了wukong了。
因为索引很大,所以我将索引内容放到了文件中持久化,但是没次搜索启动载入的时候很耗时间,这里我不知道Lucene是如何做的,lucene就很快。
@csrgxtu wukong 最初是作为 无状态微服务 的核心搜索模块来设计的,全量数据保存在内存中,不做持久化存储,可以随时重启服务,并主要从网络数据库中更新全量和增量数据,建索引的瓶颈主要在网络 IO 的 latency。lucene 的优化方向并不是 wukong 的初衷。
有没有支持多级索引的计划