LokiJS 是一个性能优先的内存数据库,其 1.4 版本已经发布,带来了 NativeScript 适配器。
Loki 这个名字源于北欧神话的恶作剧之神。它支持集合,方式和 MongoDB 类似。它还支持字段索引,提供更快地文档访问速度。此外,它使用 JSON 格式将数据保存到磁盘,使数据具备了可移植性。
项目自述中的“首席”开发者 Joe Minichino 在接受 InfoQ 采访时表示,这个主要版本修复了“许多 Bug,并带来了巨大的性能提升。”Minichino 指出:
该版本新增或改进了若干查询操作符,如
$where、$ne、$len、$keyin、$nkeyin、$type、$contains
和$containsAny
。存活时间(TTL)特性也十分方便,它会自动删除一定时间间隔内没有被访问的对象。举例来说,这在存储会话或游戏中非常有用。
Loki 最初是作为一个在 phonegap/cordova 应用上存储数据的解决方案,但相对于他对 Loki 的需求而言,Minichino 认为 SQLite“太笨重”。如果你在使用 JavaScript,对于 JavaScript 对象和对象字面量,将它们转化为表格会很痛苦,Minichino 表示,这就是为什么 Loki 被创建成了一个组件,它接收对象,然后在本地文件系统上序列化为 JSON。这样,开发人员就可以在接下来的工作环节中重新加载数据。
1.4 版本新增了 NativeScript 应用适配器。请看下面的示例代码:
// 基本要求 var fs = require("file-system"); var Loki = require("./node_modules/lokijs/src/lokijs.js"); var LokiNativeScriptAdapter = require("./node_modules/loki-nativescript-adapter/loki-nativescript-adapter.js"); // 配置 Loki var path = fs.path.join(fs.knownFolders.currentApp().path, "database.db"); var db = new Loki(path, { adapter: new LokiNativeScriptAdapter() }); // 保存一些影片 var movies = db.addCollection("movies"); movies.insert({ title: "Ghost Busters", year: 1984 }); movies.insert({ title: "Ghost Busters II", year: 1989 }); movies.insert({ title: "Ghost Busters", year: 2016 }); console.log(movies.data); db.saveDatabase(); // 加载并找出部分影片 db.loadDatabase({}, function() { var movies = db.getCollection("movies"); console.log(movies.find({ title: "Ghost Busters" })); });
Minichino 将这个主要版本说成是三个开发人员“精雕细琢的工作成果”,包括 obeliskos 、 aleandernst 和 VladimirTechMan 。他们一起改进了查询和动态视图的内部构件,进一步提升了性能。
在 LokiJS 的路线图上,有一个服务器端持久化适配器。目前,其存在形式是整个 db 序列化成了一个文件,每当保存时文件会被重写。
有些开发人员将 LokiJS 用于一个大小几 GB 的 db,每次他们更新一条记录,文件就会被重写。当 db 大小只有几 MB 时,不管在浏览器端,还是在移动设备上,这都没有问题,因为保存操作是毫秒级的。但 Minichino 指出,对于后端,就需要增量持久化适配器了,并且要有用于网络操作和复制的 http/tcp 封装器。
LokiJS 遵循 MIT 许可协议。愿意为项目做贡献的 InfoQ 读者可以在 GitHub 上注册,并提交 pull request 或开放问题。LokiJS 团队乐意听取任何具有负面经验的用户的建设性批评。
查看英文原文: LokiJS 1.4 Release Brings Performance Improvement, NativeScript Adapter
评论