diff --git a/README.md b/README.md
index 97adec6..6f9b695 100644
--- a/README.md
+++ b/README.md
@@ -1,11 +1,15 @@
-ip2region - 最自由的ip地址查询库,ip到地区的映射库,提供Binary,B树和纯内存三种查询算法,妈妈再也不用担心我的ip地址定位。
+# Ip2region是什么?
-### 1. 前言:
-ip2region重点在于研究ip数据的存储设计和各种语言的查询实现,并没有原始ip数据的支撑,数据来源请参考下面的描述,升级数据需要很多IP的支撑并且会对原始平台造成一定量的请求压力,本项目不保证及时的数据更新,没有也不会有商用版本,你可以使用自定义的数据导入ip2region进行自定义查询的实现。
+ip2region - 准确率99.9%的离线IP地址定位库,0.0x毫秒级查询,ip2region.db数据库只有数MB,提供了java,php,c,python,nodejs,golang,c#等查询绑定和Binary,B树,内存三种查询算法。
-### 2. 99.9%准确率,定时更新:
-数据聚合了一些知名ip到地名查询提供商的数据,这些是他们官方的的准确率,经测试着实比纯真啥的准确一些。
+
+
+# Ip2region特性
+
+### 99.9%准确率
+
+数据聚合了一些知名ip到地名查询提供商的数据,这些是他们官方的的准确率,经测试着实比经典的纯真IP定位准确一些。
ip2region的数据聚合自以下服务商的开放API或者数据(升级程序每秒请求次数2到4次):
01, >80%, 淘宝IP地址库, [http://ip.taobao.com/](http://ip.taobao.com/)
02, ≈10%, GeoIP, [https://geoip.com/](https://geoip.com/)
@@ -13,80 +17,65 @@ ip2region的数据聚合自以下服务商的开放API或者数据(升级程序
备注:如果上述开放API或者数据都不给开放数据时ip2region将停止数据的更新服务。
-### 3. 标准化的数据格式:
+### 标准化的数据格式
-每条ip数据段都固定了格式:_城市Id|国家|区域|省份|城市|ISP_
-
-只有中国的数据精确到了城市,其他国家只能定位到国家,后前的选项全部是0,已经包含了全部你能查到的大大小小的国家。
-(请忽略前面的城市Id,个人项目需求)
-
-### 4. 体积小:
-
-生成的数据库文件ip2region.db只有1.5M(1.2版本前是3.5M)
-
-### 5. 多查询客户端的支持,0.0x毫秒级别的查询
-
-已经集成的客户端有:java、C#、php、c、python、nodejs、php扩展(php5和php7)、golang、rust、lua、lua_c。
-
- 提供了两种查询算法,响应时间如下:
- 客户端/binary算法/b-tree算法/Memory算法:
- c#/0.x毫秒/0.x毫秒/0.x毫秒
- java/0.x毫秒/0.x毫秒/0.1x毫秒 (使用RandomAccessFile)
- php/0.x毫秒/0.1x毫秒/0.1x毫秒
- c/0.0x毫秒/0.0x毫秒/0.00x毫秒(b-tree算法基本稳定在0.02x毫秒级别)
- python/0.x毫秒/0.1x毫秒/未知
- lua/0.x毫秒/0.x毫秒/0.x毫秒
- lua_c/0.0x毫秒/0.0x毫秒/0.00x毫秒
-
-任何客户端b-tree都比binary算法快,当然Memory算法固然是最快的!
-
-maven仓库地址:
-```xml
-
- org.lionsoul
- ip2region
- 1.7.2
-
+每条ip数据段都固定了格式:
```
-nuget安装命令
-```shell
-Install-Package IP2Region
+_城市Id|国家|区域|省份|城市|ISP_
```
-### 6. 测试程序:
-C#、Node.js、lua_c的测试请具体参考文件夹中README.md 说明。
+只有中国的数据精确到了城市,其他国家有部分数据只能定位到国家,后前的选项全部是0,已经包含了全部你能查到的大大小小的国家(请忽略前面的城市Id,个人项目需求)。
-java:
-```shell
-cd binding/java
-ant all
-java -jar ip2region-{version}.jar ./data/ip2region.db
-```
-php:
-```shell
-php binding/php/testSearcher.php ./data/ip2region.db
-```
+### 体积小
-c:
+包含了全部的IP,生成的数据库文件ip2region.db只有几MB,最小的版本只有1.5MB,随着数据的详细度增加数据库的大小也慢慢增大,目前还没超过8MB。
+
+
+### 查询速度快
+
+全部的查询客户端单次查询都在0.x毫秒级别,内置了三种查询算法
+
+1. memory算法:整个数据库全部载入内存,单次查询都在0.1x毫秒内,C语言的客户端单次查询在0.00x毫秒级别。
+2. binary算法:基于二分查找,基于ip2region.db文件,不需要载入内存,单次查询在0.x毫秒级别。
+3. b-tree算法:基于btree算法,基于ip2region.db文件,不需要载入内存,单词查询在0.x毫秒级别,比binary算法更快。
+
+任何客户端b-tree都比binary算法快,当然memory算法固然是最快的!
+
+
+### 多查询客户端的支持
+
+已经集成的客户端有:java、C#、php、c、python、nodejs、php扩展(php5和php7)、golang、rust、lua、lua_c, nginx。
+
+binding | 描述 | 开发状态 | binary查询耗时 | b-tree查询耗时 | memory查询耗时
+:-: | :-: | :-: | :-: | :-: | :-:
+[c](binding/c) | ANSC c binding | 已完成 | 0.0x毫秒 | 0.0x毫秒 | 0.00x毫秒
+[c#](binding/c#) | c# binding | 已完成 | 0.x毫秒 | 0.x毫秒 | 0.1x毫秒
+[golang](binding/golang) | golang binding | 已完成 | 0.x毫秒 | 0.x毫秒 | 0.1x毫秒
+[java](binding/java) | java binding | 已完成 | 0.x毫秒 | 0.x毫秒 | 0.1x毫秒
+[lua](binding/lua) | lua实现的binding | 已完成 | 0.x毫秒 | 0.x毫秒 | 0.x毫秒
+[lua_c](binding/lua_c) | lua的c扩展 | 已完成 | 0.0x毫秒 | 0.0x毫秒 | 0.00x毫秒
+[nginx](binding/nginx) | nginx的c扩展 | 已完成 | 0.0x毫秒 | 0.0x毫秒 | 0.00x毫秒
+[nodejs](binding/nodejs) | nodejs | 已完成 | 0.x毫秒 | 0.x毫秒 | 0.1x毫秒
+[php](binding/php) | php实现的binding | 已完成 | 0.x毫秒 | 0.1x毫秒 | 0.1x毫秒
+[php5_ext](binding/php5_ext) | php5的c扩展 | 已完成 | 0.0x毫秒 | 0.0x毫秒 | 0.00x毫秒
+[php7_ext](binding/php7_ext) | php7的c扩展 | 已完成 | 0.0毫秒 | 0.0x毫秒 | 0.00x毫秒
+[python](binding/python) | python bindng | 已完成 | 0.x毫秒 | 0.x毫秒 | 0.x毫秒
+[rust](binding/rust) | rust binding | 已完成 | 0.x毫秒 | 0.x毫秒 | 0.x毫秒
+
+
+
+
+# ip2region快速测试
+
+请参考每个binding下的README说明去运行cli测试程序,例如C语言的demo运行如下:
```shell
cd binding/c/
gcc -g -O2 testSearcher.c ip2region.c
./a.out ../../data/ip2region.db
```
-python:
-```shell
-python binding/python/testSearcher.py ./data/ip2region.db
-```
-
-lua:
-```shell
-cd binding/lua/
-lua testSearcher.lua ../../data/ip2region.db
-```
-
-均会看到如下界面:
+会看到如下cli界面:
```shell
initializing B-tree ...
+----------------------------------+
@@ -98,19 +87,60 @@ p2region>> 101.105.35.57
2163|中国|华南|广东省|深圳市|鹏博士 in 0.02295 millseconds
```
-输入ip地址开始测试,第一次会稍微有点慢,在运行命令后面接入binary,memory来尝试其他算法,建议使用b-tree算法,速度和并发需求的可以使用memory算法。
-
-具体集成请参考不同客户端的测试源码。
+输入IP地址开始测试,第一次会稍微有点慢,在运行命令后面接入binary,memory来尝试其他算法,建议使用b-tree算法,速度和并发需求的可以使用memory算法,具体集成请参考不同binding下的测试源码。
-### 7. 如何生成ip2region.db文件
+
+
+# ip2region安装
+
+具体请参考每个binding下的README文档和测试demo,以下是一些可用的快捷安装方式:
+
+### maven仓库地址
+```xml
+
+ org.lionsoul
+ ip2region
+ 1.7.2
+
+```
+
+### nodejs
+```
+npm install node-ip2region --save
+```
+
+### nuget安装
+```shell
+Install-Package IP2Region
+```
+
+### php composer
+```shell
+# 插件来自:https://github.com/zoujingli/ip2region
+composer require zoujingli/ip2region
+```
+
+
+
+# ip2region 并发使用
+
+1. 全部binding的各个search接口都不是线程安全的实现,不同线程可以通过创建不同的查询对象来使用,并发量很大的情况下,binary和b-tree算法可能会打开文件数过多的错误,请修改内核的最大允许打开文件数(fs.file-max=一个更高的值),或者使用持久化的memory算法。
+
+2. memorySearch接口,在发布对象前进行一次预查询(本质上是把ip2region.db文件加载到内存),可以安全用于多线程环境。
+
+
+
+
+# ip2region.db的生成
从1.8版本开始,ip2region开源了ip2region.db生成程序的java实现,提供了ant编译支持,编译后会得到以下提到的dbMaker-{version}.jar,对于需要研究生成程序的或者更改自定义生成配置的请参考${ip2region_root}/maker/java内的java源码。
从ip2region 1.2.2版本开始里面提交了一个dbMaker-{version}.jar的可以执行jar文件,用它来完成这个工作:
-* 1, 确保你安装好了java环境(不玩Java的童鞋就自己谷歌找找拉,临时用一用,几分钟的事情)
-* 2, cd到${ip2region_root}/maker/java,然后运行如下命令:
+
+1. 确保你安装好了java环境(不玩Java的童鞋就自己谷歌找找拉,临时用一用,几分钟的事情)
+2. cd到${ip2region_root}/maker/java,然后运行如下命令:
```shell
java -jar dbMaker-{version}.jar -src 文本数据文件 -region 地域csv文件 [-dst 生成的ip2region.db文件的目录]
@@ -120,8 +150,8 @@ java -jar dbMaker-{version}.jar -src 文本数据文件 -region 地域csv文件
# ip2region.db文件的目录:是可选参数,没有指定的话会在当前目录生成一份./data/ip2region.db文件
```
-* 3, 获取生成的ip2region.db文件覆盖原来的ip2region.db文件即可
-* 4, 默认的ip2region.db文件生成命令:
+3. 获取生成的ip2region.db文件覆盖原来的ip2region.db文件即可
+4. 默认的ip2region.db文件生成命令:
```shell
cd ${ip2region_root}/java/
@@ -130,10 +160,14 @@ java -jar dbMaker-1.2.2.jar -src ./data/ip.merge.txt -region ./data/global_regio
# 会看到一大片的输出
```
-* 5, 数据库文件的结构和原理请阅读 @冬芽 的blog:[“ip2region数据库文件的结构和原理”](http://dongyado.com/tool/2016/08/18/structure-of-ip2region-database-file/)
-### 8. 其他备注
-* 1, 全部binding的各个search接口都不是线程安全的实现,不同线程可以通过创建不同的查询对象来使用。
-* 2, memorySearch接口,在发布对象前进行一次预查询,可以安全用于多线程环境。
-* 3, ip2region交流分享,微信:lionsoul2014,QQ:1187582057
+
+# 相关备注
+
+### 声明
+ip2region重点在于研究IP数据的存储设计和各种语言的查询实现,并没有原始IP数据的支撑,数据来源请参考上面的描述,升级数据需要很多IP的支撑并且会对原始平台造成一定量的请求压力,本项目不保证及时的数据更新,没有也不会有商用版本,你可以使用自定义的数据导入ip2region进行自定义查询的实现。
+
+### 技术交流
+1. 数据库文件的结构和原理请阅读 @冬芽 的blog:[“ip2region数据库文件的结构和原理”](https://github.com/dongyado/dongyado.github.io/blob/master/_posts/2016-08-18-structure-of-ip2region-database-file.md)
+2. ip2region交流分享,微信:lionsoul2014(请备注ip2region),QQ:1187582057(很少关注)
diff --git a/binding/nodejs/README.md b/binding/nodejs/README.md
index a5d00c7..7a45b22 100644
--- a/binding/nodejs/README.md
+++ b/binding/nodejs/README.md
@@ -1,14 +1,31 @@
# nodejs 客户端
+官方维护的 ip2region, 每次数据更新后会更新到 npm
+
+
## Install
+
+**node 版本 : >= 6.0.0**
+
```
-npm install lionsoul-ip2region --save
+npm install node-ip2region --save
```
+## 已测试通过的 node 版本列表
+
+```
+6.0.0
+6.11.2
+8.0.0
+10.0.0
+12.0.0
+```
+
+
## Example
```
-const searcher = require('lionsoul-ip2region').create();
+const searcher = require('node-ip2region').create();
searcher.btreeSearchSync('xxx.xxx.xxx.xxx')
// => { city: 2163, region: '中国|0|广东省|深圳市|联通' }
```
@@ -83,4 +100,4 @@ Rand Name Time (in milliseconds)
4 BinarySearchSync 1.639
5 BtreeSearch 3.407
6 BinarySearch 6.497
-```
\ No newline at end of file
+```
diff --git a/binding/nodejs/deploy.sh b/binding/nodejs/deploy.sh
old mode 100644
new mode 100755
diff --git a/binding/nodejs/package.json b/binding/nodejs/package.json
index fe8bee7..160befe 100644
--- a/binding/nodejs/package.json
+++ b/binding/nodejs/package.json
@@ -1,7 +1,7 @@
{
- "name": "lionsoul-ip2region",
- "version": "0.0.1",
- "description": "ip database ",
+ "name": "node-ip2region",
+ "version": "1.0.2",
+ "description": "official nodejs client of ip2region",
"main": "ip2region.js",
"scripts": {
"test": "jest",
@@ -10,7 +10,7 @@
"files": ["data/"],
"repository": {
"type": "git",
- "url": "https://github.com/lionsoul2016/ip2region"
+ "url": "https://github.com/lionsoul2014/ip2region"
},
"keywords": [
"ip2region",
@@ -20,11 +20,14 @@
"author": "dongyado",
"license": "ISC",
"bugs": {
- "url": "https://github.com/lionsoul2016/ip2region/issues"
+ "url": "https://github.com/lionsoul2014/ip2region/issues"
},
- "homepage": "https://github.com/lionsoul2016/ip2region",
+ "homepage": "https://github.com/lionsoul2014/ip2region",
"devDependencies": {
"jest": "^19.0.2",
"benchmark": "^2.1.4"
+ },
+ "engines": {
+ "node" : ">=6.0.0"
}
-}
\ No newline at end of file
+}
diff --git a/binding/php_extension/php5/ip2region/.gitignore b/binding/php5_ext/.gitignore
similarity index 100%
rename from binding/php_extension/php5/ip2region/.gitignore
rename to binding/php5_ext/.gitignore
diff --git a/binding/php_extension/php5/ip2region/CREDITS b/binding/php5_ext/CREDITS
similarity index 100%
rename from binding/php_extension/php5/ip2region/CREDITS
rename to binding/php5_ext/CREDITS
diff --git a/binding/php_extension/php5/ip2region/README.md b/binding/php5_ext/README.md
similarity index 86%
rename from binding/php_extension/php5/ip2region/README.md
rename to binding/php5_ext/README.md
index d2380cd..decbcd1 100644
--- a/binding/php_extension/php5/ip2region/README.md
+++ b/binding/php5_ext/README.md
@@ -3,7 +3,7 @@
### 安装步骤
* git clone https://github.com/lionsoul2014/ip2region.git
* cd ip2region
-* cp binding/php_extension/php5/ip2region 到 php source code 的 ext 目录下
+* cp binding/php5_ext 到 php source code 的 ext/ip2region 目录下
* cp binding/c/ 里面所有的文件到 php source code 的 ext/ip2region/lib 目录下
* 在 ext/ip2region 下,运行
diff --git a/binding/php_extension/php5/ip2region/config.m4 b/binding/php5_ext/config.m4
similarity index 100%
rename from binding/php_extension/php5/ip2region/config.m4
rename to binding/php5_ext/config.m4
diff --git a/binding/php_extension/php5/ip2region/config.w32 b/binding/php5_ext/config.w32
similarity index 100%
rename from binding/php_extension/php5/ip2region/config.w32
rename to binding/php5_ext/config.w32
diff --git a/binding/php_extension/php5/ip2region/ip2region.c b/binding/php5_ext/ip2region.c
similarity index 97%
rename from binding/php_extension/php5/ip2region/ip2region.c
rename to binding/php5_ext/ip2region.c
index 7139f3b..bb7a2d6 100644
--- a/binding/php_extension/php5/ip2region/ip2region.c
+++ b/binding/php5_ext/ip2region.c
@@ -50,7 +50,7 @@ static zend_class_entry *ip2region_class_entry_ptr;
//}
-void search(
+static void search(
ip2region_t g_resouce_ptr,
uint_t (*func_ptr) (ip2region_t, uint_t, datablock_t),
long ip,
@@ -182,7 +182,7 @@ PHP_METHOD(ip2region_class_entry_ptr, binarySearch)
PHP_MSHUTDOWN_FUNCTION(ip2region)
{
UNREGISTER_INI_ENTRIES();
- ip2region_destroy(&g_resource);
+ if(g_resource_ptr != NULL) ip2region_destroy(&g_resource);
return SUCCESS;
}
/* }}} */
@@ -256,8 +256,8 @@ PHP_MINIT_FUNCTION(ip2region)
ZEND_INIT_MODULE_GLOBALS(ip2region, php_ip2region_init_globals, NULL);
REGISTER_INI_ENTRIES();
-
- if (ip2region_create( &g_resource, IP2REGION_G(db_file)) == 0)
+ char* _db_file = IP2REGION_G(db_file);
+ if ( _db_file == NULL || ip2region_create( &g_resource, _db_file) == 0)
{
g_resource_ptr = NULL;
} else {
diff --git a/binding/php_extension/php5/ip2region/ip2region.php b/binding/php5_ext/ip2region.php
similarity index 100%
rename from binding/php_extension/php5/ip2region/ip2region.php
rename to binding/php5_ext/ip2region.php
diff --git a/binding/php_extension/php5/ip2region/lib/README.md b/binding/php5_ext/lib/README.md
similarity index 100%
rename from binding/php_extension/php5/ip2region/lib/README.md
rename to binding/php5_ext/lib/README.md
diff --git a/binding/php_extension/php7/ip2region/php_ip2region.h b/binding/php5_ext/php_ip2region.h
similarity index 96%
rename from binding/php_extension/php7/ip2region/php_ip2region.h
rename to binding/php5_ext/php_ip2region.h
index 3ff128b..e2be7cc 100644
--- a/binding/php_extension/php7/ip2region/php_ip2region.h
+++ b/binding/php5_ext/php_ip2region.h
@@ -65,7 +65,6 @@ static void php_ip2region_init_globals(zend_ip2region_globals *);
#define le_ip2region_name "Ip2region"
-void search( ip2region_t, uint_t (*func_ptr) (ip2region_t, uint_t, datablock_t), long , zval **, datablock_t);
#endif /* PHP_IP2REGION_H */
/*
diff --git a/binding/php_extension/php5/ip2region/tests/001.phpt b/binding/php5_ext/tests/001.phpt
similarity index 100%
rename from binding/php_extension/php5/ip2region/tests/001.phpt
rename to binding/php5_ext/tests/001.phpt
diff --git a/binding/php_extension/php7/ip2region/.gitignore b/binding/php7_ext/.gitignore
similarity index 100%
rename from binding/php_extension/php7/ip2region/.gitignore
rename to binding/php7_ext/.gitignore
diff --git a/binding/php_extension/php7/ip2region/CREDITS b/binding/php7_ext/CREDITS
similarity index 100%
rename from binding/php_extension/php7/ip2region/CREDITS
rename to binding/php7_ext/CREDITS
diff --git a/binding/php_extension/php7/ip2region/README.md b/binding/php7_ext/README.md
similarity index 86%
rename from binding/php_extension/php7/ip2region/README.md
rename to binding/php7_ext/README.md
index 32764e4..4b73ef1 100644
--- a/binding/php_extension/php7/ip2region/README.md
+++ b/binding/php7_ext/README.md
@@ -3,7 +3,7 @@
### 安装步骤
* git clone https://github.com/lionsoul2014/ip2region.git
* cd ip2region
-* cp binding/php_extension/php7/ip2region 到 php source code 的 ext 目录下
+* cp binding/php7_ext 到 php source code 的 ext/ip2region 目录下
* cp binding/c/ 里面所有的文件到 php source code 的 ext/ip2region/lib 目录下
* 在 ext/ip2region 下,运行
diff --git a/binding/php_extension/php7/ip2region/config.m4 b/binding/php7_ext/config.m4
similarity index 100%
rename from binding/php_extension/php7/ip2region/config.m4
rename to binding/php7_ext/config.m4
diff --git a/binding/php_extension/php7/ip2region/config.w32 b/binding/php7_ext/config.w32
similarity index 100%
rename from binding/php_extension/php7/ip2region/config.w32
rename to binding/php7_ext/config.w32
diff --git a/binding/php_extension/php7/ip2region/ip2region.c b/binding/php7_ext/ip2region.c
similarity index 97%
rename from binding/php_extension/php7/ip2region/ip2region.c
rename to binding/php7_ext/ip2region.c
index 6b6e121..1f7f062 100644
--- a/binding/php_extension/php7/ip2region/ip2region.c
+++ b/binding/php7_ext/ip2region.c
@@ -50,7 +50,7 @@ static zend_class_entry *ip2region_class_entry_ptr;
//}
-void search(
+static void search(
ip2region_t g_resouce_ptr,
uint_t (*func_ptr) (ip2region_t, uint_t, datablock_t),
long ip,
@@ -188,7 +188,7 @@ PHP_METHOD(ip2region_class_entry_ptr, binarySearch)
PHP_MSHUTDOWN_FUNCTION(ip2region)
{
UNREGISTER_INI_ENTRIES();
- ip2region_destroy(&g_resource);
+ if( g_resource_ptr != NULL ) ip2region_destroy(&g_resource);
return SUCCESS;
}
/* }}} */
@@ -262,8 +262,8 @@ PHP_MINIT_FUNCTION(ip2region)
ZEND_INIT_MODULE_GLOBALS(ip2region, php_ip2region_init_globals, NULL);
REGISTER_INI_ENTRIES();
-
- if (ip2region_create( &g_resource, IP2REGION_G(db_file)) == 0)
+ char* _db_file = IP2REGION_G(db_file);
+ if ( _db_file == NULL || ip2region_create( &g_resource, _db_file) == 0)
{
g_resource_ptr = NULL;
} else {
diff --git a/binding/php_extension/php7/ip2region/ip2region.php b/binding/php7_ext/ip2region.php
similarity index 100%
rename from binding/php_extension/php7/ip2region/ip2region.php
rename to binding/php7_ext/ip2region.php
diff --git a/binding/php_extension/php7/ip2region/lib/README.md b/binding/php7_ext/lib/README.md
similarity index 100%
rename from binding/php_extension/php7/ip2region/lib/README.md
rename to binding/php7_ext/lib/README.md
diff --git a/binding/php_extension/php5/ip2region/php_ip2region.h b/binding/php7_ext/php_ip2region.h
similarity index 96%
rename from binding/php_extension/php5/ip2region/php_ip2region.h
rename to binding/php7_ext/php_ip2region.h
index 3ff128b..e2be7cc 100644
--- a/binding/php_extension/php5/ip2region/php_ip2region.h
+++ b/binding/php7_ext/php_ip2region.h
@@ -65,7 +65,6 @@ static void php_ip2region_init_globals(zend_ip2region_globals *);
#define le_ip2region_name "Ip2region"
-void search( ip2region_t, uint_t (*func_ptr) (ip2region_t, uint_t, datablock_t), long , zval **, datablock_t);
#endif /* PHP_IP2REGION_H */
/*
diff --git a/binding/php_extension/php7/ip2region/tests/001.phpt b/binding/php7_ext/tests/001.phpt
similarity index 100%
rename from binding/php_extension/php7/ip2region/tests/001.phpt
rename to binding/php7_ext/tests/001.phpt
diff --git a/binding/rust/readme.md b/binding/rust/readme.md
index 700624c..d7af656 100644
--- a/binding/rust/readme.md
+++ b/binding/rust/readme.md
@@ -28,7 +28,7 @@ version = "*"
取消上面 toml 的 `# features = ["lazy"]` 行的注释即可使用,其 api 是 `memory_search` 和 `memory_search_ip`。
-只是目前 DB 足有3.2M,还是有些感人的。
+只是目前 DB 只有3.2M,还是有些感人的。
关键的一行是 `features = ["lazy"]` ,不需要则可以注释或者删掉。