add docs for cache searcher create
This commit is contained in:
parent
08b1656e02
commit
e59d71e316
|
|
@ -7,7 +7,8 @@
|
||||||
go get github.com/lionsoul2014/ip2region/binding/golang
|
go get github.com/lionsoul2014/ip2region/binding/golang
|
||||||
```
|
```
|
||||||
|
|
||||||
### API 使用 Demo
|
### 完全基于文件的查询
|
||||||
|
|
||||||
```golang
|
```golang
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
@ -17,7 +18,7 @@ import (
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
var dbPath = "ip2region.xdb file path"
|
var dbPath = "ip2region.xdb file path"
|
||||||
searcher, err := xdb.New(dbPath)
|
searcher, err := xdb.NewWithFileOnly(dbPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("failed to create searcher: %s\n", err.Error())
|
fmt.Printf("failed to create searcher: %s\n", err.Error())
|
||||||
return
|
return
|
||||||
|
|
@ -35,9 +36,55 @@ func main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Printf("{region: %s, took: %s}\n", region, time.Since(tStart))
|
fmt.Printf("{region: %s, took: %s}\n", region, time.Since(tStart))
|
||||||
|
|
||||||
|
// 备注:并发使用,每个 goroutine 需要创建一个独立的 searcher 对象。
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### 缓存 `VetorIndex` 索引
|
||||||
|
|
||||||
|
可以预先加载 vecotorIndex 缓存,然后做成全局变量,每次创建 searcher 的时候使用全局的 vectorIndex,可以减少一次固定的 IO 操作从而加速查询减少系统 io 压力。
|
||||||
|
```golang
|
||||||
|
// 1、从 dbPath 加载 VectorIndex 缓存,把下述 vIndex 变量全局到内存里面。
|
||||||
|
vIndex, err := LoadVectorIndexFromFile(dbPath)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("failed to load vector index from `%s`: %s\n", dbPath, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2、用全局的 vIndex 创建带 VectorIndex 缓存的查询对象。
|
||||||
|
searcher, err := xdb.NewWithVectorIndex(dbPath, vIndex)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("failed to create searcher with vector index: %s\n", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 备注:并发使用,全部 goroutine 共享全局的只读 vIndex 缓存,每个 goroutine 创建一个独立的 searcher 对象
|
||||||
|
```
|
||||||
|
|
||||||
|
### 缓存整个 xdb 数据
|
||||||
|
|
||||||
|
可以预先加载整个 ip2region.xdb 到内存,完全基于内存查询,类似于之前的 memory search 查询。
|
||||||
|
```golang
|
||||||
|
// 1、从 dbPath 加载整个 xdb 到内存
|
||||||
|
cBuff, err := LoadContentFromFile(dbPath)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("failed to load content from `%s`: %s\n", dbPath, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2、用全局的 cBuff 创建完全基于内存的查询对象。
|
||||||
|
searcher, err := xdb.NewWithBuffer(cBuff)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("failed to create searcher with content: %s\n", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 备注:并发使用,用整个 xdb 缓存创建的 searcher 对象可以安全用于并发。
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# 编译测试程序
|
# 编译测试程序
|
||||||
|
|
||||||
通过如下方式编译得到 xdb_searcher 可执行程序:
|
通过如下方式编译得到 xdb_searcher 可执行程序:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue