OnceDB 支持全文搜索和多条件关系查询的 Redis 数据库简介

2020-02-20 09:29:43 +08:00
 newghost

OnceDB 是基于 Redis 实现的全文搜索数据库。

项目背景

我们一直在开发一款能够在 ARM 和 x86 平台上都能运行的知识管理软件。

低端 Arm 开发板的 TF 存储卡读写速度其实非常有限,只有 Redis 这样的内存数据库,才能够在 NAS 持续向外传送文件时,依然保持非常优异的并发能力,而不会造成 Web 服务不可用。

但直接使用 Redis 非常不方便,所以我们修改了 Redis 的源码,使之可以像 SQL 数据库那样,实现全文搜索,多条件查询,并可自动创建辅助索引,提高数据搜索的性能,并大幅提高开发效率。

项目地址: http://oncedb.com

快速入门

在 Github 上下载最新的安装包,解压运行即可。

https://github.com/OnceDoc/OnceDB/releases/

OnceDB 并不改变 Redis 的数据存储结构,Redis 数据库文件可以直接在 OnceDB 中操作,然后再返回 Redis 中使用。所以可以直接使用目前的第三方 Redis 客户端来测试 OnceDB 的指令,您可以选择您熟悉的第三方工具或者 redis-cli 命令行来测试 OnceDB。

在 Windows 上启动 oncedb-server.exe ,打开 Redis 客户端,执行命令:

upsert user username @ dota password = 123456 title ? dev skill * c,node.js age / 18

然后我们看到,OnceDB 自动创建了一条 user:dota 的 HASH 数据:

同时也自动创建了一些索引:

keys *
 1)  "*user.skill:c"
 2)  "user:dota"
 3)  "*user.title:dev"
 4)  "*user"
 5)  "*user.skill:node.js"
 6)  "*user.age"

这些索引以 '*' 开头,均为 zset 有序列表 :

zrange *user 0 -1 withscores
 1)  "dota"
 2)  "1582158759852"

其中权重默认为当前的操作时间。

索引类型

OnceDB 通过操作符来自动创建这些索引。比如

@ 操作符代表的是主键,所有索引存放的都是主键的值。 ? 代表的是分组索引,会自动创建一条按值存在的分组,如 *user.title:dev * 代表的是多分组(关键字)索引,使用 ',' 分隔 / 代表提是排序索引,会按值排序,如 *user.age

数据搜索

可使用 find 指令搜索数据,比如搜索 skill 含 node.js 关键字的数据,并打印 username, password 字段:

find user 0 -1 username = * password = * skill * node.js
 1)  "1"
 2)  "user:dota"
 3)  "dota"
 4)  "123456"
 5)  "c,node.js"

第一行返回的 "1" 代表启用了索引搜索,符合条件的数据总数是 1。如果返回 -1 则表明使用的全文搜索,比如,查询含有 'js' 的数据

find user 0 -1 username = * password = * skill ~ js
 1)  "-1"
 2)  "user:dota"
 3)  "dota"
 4)  "123456"
 5)  "c,node.js"

关于更多指令说明可杳看帮助文档:

OnceDB 数据修改和查询帮助文档

OnceDB 搜索、查询、计算、求和指令

OnceOA 知识管理. 的介绍可参见这篇知乎问答

搭建家庭 NAS 服务器有什么好方案?

同时 oncedb 的 node.js 驱动引擎也将于近期发布,未完待续...

1620 次点击
所在节点    分享创造
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/646013

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX