ソースを参照

Update persistent_storage.md

Hui Chen 12 年 前
コミット
1b51aabb94
1 ファイル変更52 行追加4 行削除
  1. 52 4
      docs/persistent_storage.md

+ 52 - 4
docs/persistent_storage.md

@@ -11,15 +11,63 @@ type EngineInitOptions struct {
   UsePersistentStorage bool
   PersistentStorageFolder string
   PersistentStorageShards int
+}
 ```
 
 当UsePersistentStorage为true时使用持久存储:
 
 1. 在引擎启动时(engine.Init函数),引擎从PersistentStorageFolder指定的目录中读取
-数据库保存的文档索引数据,重新计算索引表并给排序器注入排序数据。如果分词器的代码
-或者词典有变化,这些变化会体现在新的索引表中。
-
+文档索引数据,重新计算索引表并给排序器注入排序数据。如果分词器的代码
+或者词典有变化,这些变化会体现在启动后的引擎索引表中。
 2. 在调用engine.IndexDocument时,引擎将索引数据写入到PersistentStorageFolder指定
 的目录中。
-
 3. PersistentStorageShards定义了数据库裂分数目,默认为CPU数目。
+4. 在调用engine.RemoveDocument删除一个文档后,该文档会从持久存储中剔除,下次启动
+引擎时不会载入该文档。
+
+
+### 必须注意事项
+
+1. 如果排序器使用[自定义评分字段](/docs/custom_scoring_criteria.md),那么该类型必须在gob中注册:
+```go
+gob.Register(MyScoringFields{})
+```
+否则程序会崩溃。
+2. 在引擎退出时请使用engine.Close()来关闭数据库,如果数据库未关闭,数据库文件会被锁定,
+这会导致引擎重启失败。解锁的方法是,进入PersistentStorageFolder指定的目录,删除所有以"."开头的文件即可。
+
+### 性能测试
+
+[benchmark.go](/examples/benchmark.go)程序可用来测试持久存储的读写速度:
+
+```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 百万个索引
+```
+
+可以看出:
+
+1. 持久存储不影响搜索响应时间和吞吐量
+2. 写入持久存储的速度是不适用持久存储的四分之一
+3. 从持久存储中导入数据的速度是从内存中导入的二分之一