tagphi / czdb-search-java

This project is a Java library for searching IP address-related data in a CZDB database. It supports three types of search algorithms: memory search, binary search, and B-tree search.
Apache License 2.0
17 stars 6 forks source link

czdb-search 使用指南

czdb-search 是一个用于在纯真(CZ88)IP库中搜索数据的类。它支持三种类型的搜索算法:内存搜索(MEMORY)和B树搜索(BTREE)。数据库类型(IPv4或IPv6)和查询类型(MEMORY、BTREE)在运行时确定。

Maven 依赖

如果你想在你的Maven项目中使用czdb-search,请在你的pom.xml中添加以下依赖:

<dependency>
    <groupId>net.cz88</groupId>
    <artifactId>czdb-search</artifactId>
    <version>${cz88db.version}</version>
</dependency>

请替换${cz88db.version}为你想要使用的版本。目前最新的版本是1.0.2.5

支持 IPv4 和 IPv6

czdb-search 支持 IPv4 和 IPv6 地址的查询。在创建 DbSearcher 实例时,你需要提供相应的数据库文件和密钥。

数据库文件和密钥可以从 www.cz88.net 获取。

如何使用

首先,你需要创建一个 DbSearcher 的实例。在创建实例时,你需要提供数据库文件的路径、查询类型和用于解密数据库的密钥。

DbSearcher searcher = new DbSearcher("数据库文件路径", QueryType.MEMORY, "密钥");

然后,你可以使用 search 方法来根据提供的 IP 地址在数据库中搜索数据。

String region = searcher.search("IP地址");

如果搜索成功,search 方法将返回找到的数据块的区域。如果搜索失败,它将返回 null。

返回的字符串格式为 "国家–省份–城市–区域 ISP"。例如,对于一个位于中国上海市虹口区的IP地址,返回的字符串可能是 "中国–上海–上海–虹口区 电信"。如果搜索失败,它将返回 null。

查询类型

DbSearcher 支持2种查询类型:MEMORY 和 BTREE。

你可以在创建 DbSearcher 实例时选择查询类型。

DbSearcher searcher = new DbSearcher("数据库文件路径", QueryType.BTREE, "密钥");

线程安全

请注意,只有 MEMORY 查询模式是线程安全的。如果你在高并发环境下使用 BTREE 查询模式,可能会导致打开的文件过多的错误。在这种情况下,你可以增加内核中允许打开的最大文件数(fs.file-max),或者使用 MEMORY 查询模式。当然更合理的一个方式是为线程池中的每一个线程只创建一个DbSearcher实例。

关闭数据库

当查询结束时,你应该关闭数据库。注意并不是说每次查询都需要创建DbSearcher实例查完后关闭,如果是为每个线程创建一个DbSearcher实例,那么只有在线程结束时才需要关闭数据库。

searcher.close();

这将释放所有使用的资源,并关闭对数据库文件的访问。

如何进行查询测试

我们提供了一个名为 SearcherTest 的类,你可以通过命令行来使用它进行查询测试。以下是如何使用的说明:

首先,你需要从 GitHub 的 release 中下载 czdb-search-1.0.jar 文件。你可以点击这里下载。

然后,你可以运行 SearcherTest。它需要三个参数:

以下是一个运行 SearcherTest 的示例命令:

java -cp czdb-search-1.0.2.3.jar net.cz88.czdb.SearcherTest -d your-db-file-path -t MEMORY -k your-key

请将 your-db-file-path 和 your-key 替换为实际的值。 在运行 SearcherTest 后,你可以输入 IP 地址进行查询,或输入 'q' 退出程序。

性能测试

做性能测试,需要额外提供两个参数:

程序会每行抽取一个ip查询,查询完后打印查询时间,查询次数和QPS。