悟空引擎支持将搜索数据存入硬盘,并在当机重启动时从硬盘恢复数据。使用持久存储只需设置EngineInitOptions中的三个选项:
type EngineInitOptions struct {
// 略过其他选项
// 是否使用持久数据库,以及数据库文件保存的目录和裂分数目
UsePersistentStorage bool
PersistentStorageFolder string
PersistentStorageShards int
}
当UsePersistentStorage为true时使用持久存储:
一、如果排序器使用自定义评分字段,那么该类型必须在gob中注册,比如在左边的例子中需要在调用engine.Init前加入:
gob.Register(MyScoringFields{})
否则程序会崩溃。
二、在引擎退出时请使用engine.Close()来关闭数据库,如果数据库未关闭,数据库文件会被锁定, 这会导致引擎重启失败。解锁的方法是,进入PersistentStorageFolder指定的目录,删除所有以"."开头的文件即可。
benchmark.go程序可用来测试持久存储的读写速度:
go run benchmark.go --num_repeat_text 1 --use_persistent
不使用持久存储的结果:
加入的索引总数3711375
建立索引花费时间 3.159781129s
建立索引速度每秒添加 1.174567 百万个索引
搜索平均响应时间 0.051146982400000006 毫秒
搜索吞吐量每秒 78205.98229466612 次查询
使用持久存储:
建立索引花费时间 13.068458511s
建立索引速度每秒添加 0.283995 百万个索引
搜索平均响应时间 0.05819595780000001 毫秒
搜索吞吐量每秒 68733.29611219149 次查询
从持久存储加入的索引总数3711375
从持久存储建立索引花费时间 6.406528378999999
从持久存储建立索引速度每秒添加 0.579311 百万个索引
可以看出,和不使用持久存储相比: