From e59d71e31663b4b2b44727d21f06c7b32afa89bb Mon Sep 17 00:00:00 2001 From: lion Date: Mon, 20 Jun 2022 21:45:59 +0800 Subject: [PATCH] add docs for cache searcher create --- binding/golang/ReadMe.md | 57 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 52 insertions(+), 5 deletions(-) diff --git a/binding/golang/ReadMe.md b/binding/golang/ReadMe.md index 3569f46..badfffc 100644 --- a/binding/golang/ReadMe.md +++ b/binding/golang/ReadMe.md @@ -7,7 +7,8 @@ go get github.com/lionsoul2014/ip2region/binding/golang ``` -### API 使用 Demo +### 完全基于文件的查询 + ```golang import ( "fmt" @@ -17,11 +18,11 @@ import ( func main() { var dbPath = "ip2region.xdb file path" - searcher, err := xdb.New(dbPath) - if err != nil { - fmt.Printf("failed to create searcher: %s\n", err.Error()) + searcher, err := xdb.NewWithFileOnly(dbPath) + if err != nil { + fmt.Printf("failed to create searcher: %s\n", err.Error()) return - } + } defer searcher.Close() @@ -35,9 +36,55 @@ func main() { } 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 可执行程序: