OnceDoc支持 Word、Excel、pptx 和 pdf 及文本文件的全文搜索。OnceDoc 在网页、本地编辑和更新时,会自动提取文档的文本内容,然后存放到 OnceDB 内存数据库中,因此可以以极快的速度搜索到您想要的内容。
OnceDB提供直接搜索指令,支持 String 和 Hash 等对象,
hsearch article:* visit >= 20 visit <= 30 key = js
1) article:001
2) 21
3)
4) js
支持像 SQL 关系数据库和 NoSQL 无模式数据库那样操作数据。可使用下面的代码, 此处使用同步语法,需要在 async 函数里调用:
(async () => {
// 更新数据
await upsert('user', { username: 'dota', password: '123456', title: 'SDEI', skills: 'java,go,c' })
// 查询数据
let rows = await select('user', { skills: 'c' })
console.log('rows.count', rows.count)
console.log(rows)
})();
OnceDB 最新版添加了连接查询的功能,可以用数组实现多条件连接查询.
多条件查询的前提是搜索的字段在 schema 中都被定义成了索引,这样在 OnceDB 中可以通过一系列的交集和并集运算来提取数据,语法如下:
OurJS原有架构博客是基于文件系统的。优点是不需要配置数据库。所有文章在初始化时都会加载到内存中,能够支承大流量的访问。
但随着文章数量的增加,初始化启动时,硬盘IO读写会有一定的压力,再加上一些云服务器限制了IO频率。造成启动时间较慢。
这篇文章将介绍如何将OurJS博客移到到OnceOA架构。
单线程的 Node.js 为了充分利用 CPU 的多核特性,采用了 cluster 模块,利用主从模式,生成与 CPU 核心数量相当的子进程,主进程捕获请求随机分配给子进程处理,并负责子进程的崩溃重启。进程与进程之间是不能共享数据的,如果把 Session 存储在内存里,存储在不同进程的内存中的 Session 将无法共享,Session 认证机制会出现问题。例如,用户 A 认证的过程是由进程 1 处理的,那么维持会话的 Session 将保存在进程 1 的内存数据中;用户 A 接下来的请求被分配给进程 2 处理,因为进程 2 没有处理过用户 A 的认证,没有维持这个会话的 Session,所以进程 2 会判断用户 A 并没有授权。这样用户 A 需要多次重复认证访问才能继续下去。
OnceDB是OnceDoc企业内容(网盘)管理系统的底层数据存储机制。它将Redis扩展增强成为一个分布式模式定义内存数据库,它将Redis从一个简单的健/值存储数据库,增强为支持索引和关系查询的模式(schema)数据库。在OnceDB中,数据模式将由具体应用而不是数据库来决定。通过OnceDB您可以自由动态定义数据库模式,或者在扩展模块中修改或扩展展已有的数据库存储模式。OnceDB即拥有内存数据库的强大性能,同时又具备强大的定制和扩展能力。