V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
newghost
V2EX  ›  分享创造

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

  •  2
     
  •   newghost · 2020-02-20 09:29:43 +08:00 · 1307 次点击
    这是一个创建于 648 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 数据:

    oncedb_start_1.png

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

    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 驱动引擎也将于近期发布,未完待续...

    目前尚无回复
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1542 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 17:20 · PVG 01:20 · LAX 09:20 · JFK 12:20
    ♥ Do have faith in what you're doing.