“AI 技术+人才”如何成为企业增长新引擎?戳此了解>>> 了解详情
写点什么

Realm 为 Node.js 发布对象数据库

  • 2016-11-29
  • 本文字数:1509 字

    阅读完需:约 5 分钟

Realm 为 Node.js 启动了一个对象数据库项目,使用这款数据库,移动开发者可以向客户端发送预处理的 Realm 对象。

宣布开源这款数据库时,Realm 的技术团队说,使用Realm Node.js“可以像以前那样跟对象打交道,不同之处在于,在Realm 里这些对象可以很容易地被持久化到磁盘上。你不需要把它们序列化成JSON,也不需要通过ORM 框架来把它们保存到表里面”。

Realm 项目在两年前启动,目标是作为SQLite 或Core Data 的替代方案,可以在iOS 和 Android 平台上使用,同时支持 React Native 。Realm Node.js 是第一个 Node.js 对象数据库。

之所以要为 Realm 开发一个服务器版本,是因为在 Realm 移动平台发布后,Realm 技术团队收到了很多关于为该平台提供 Node 接口的呼声。

Realm Node.js 使用多版本并发控制“为多线程和多进程环境提供并发的数据库访问”,也就是说,读进程和写进程看到的数据库视图是一致的。为了做到这点,在数据写入方完成事务时,Realm 使用通知系统来通知数据读取方。开发者可以使用Realm 的通知API 和它的通知系统在写事务完成时通知读线程。

以下代码使用 Express 框架创建 HTTP 端点,并用 Winston 记录请求日志:

复制代码
var express = require('express'),
util = require('util'),
winston = require('winston');
RealmWinston = require('./winston-realm').Realm;
var app = express();
// Use custom Winston transport: RealmWinston
// Writes log data to winston.realm
winston.add(RealmWinston, {});
app.get('/', function (req, res) {
res.send('Hello World!');
winston.info('Handled Hello World');
});
app.use(function (req, res, next) {
res.status(404).send('Sorry can not find that!');
winston.error('404 Error at: ' + req.url);
})
app.listen(3000, function () {
console.log('Example app listening on port 3000!');
});

接下来,日志会被保存到 Realm,然后启动另一个 Node 进程,注册一个 Realm 监听器:

复制代码
'use strict';
var Realm = require('realm');
let winstonRealm = new Realm({
path: 'winston.realm'
});
// Register listener to print out log messages at error level
winstonRealm.objects('Log').filtered('level = "error"').addListener((logs, changes) => {
changes.insertions.forEach((index) => {
let log = logs[index];
console.log(log.message);
})
});

Realm 的技术团队解释说,“监听器依赖 Realm 的支持来收集通知,这些通知包含了插入、删除或修改对象的相关信息。例子里的监听器监听一个针对所有错误级别日志的查询,然后把这些日志消息在控制台上打印出来”。

在 JavaScript 社区,有些人对这款数据库提出质疑。 Hacker News 上有个用户问了一个问题:”这款数据库是否具有最新的同步功能?”Realm 的产品总监Adam Fish回答说:“这个版本并不包含同步功能,不过它可以跟本地的Realm 结合起来使用。我们之所以把它贡献给Node.js 社区,是因为我们认为它能够提供特殊的价值,比如进程间通信”。

Fish 补充说,“很快”会有跟同步功能相关的更新放出。

当被问及 Realm Node.js 是 Realm 的纯 JavaScript 实现还是对 Realm 进程的 JavaScript 包装时,Fish解释说,它仍然使用 Realm Core ,并通过 JavaScript API 暴露接口。

最后,有人:“它的性能怎么样?很难相信它可以跟SQL 媲美。”Fish回答说,目前还没有正式地拿它跟其它运行在服务器端的SQL 数据库进行过对比,不过Realm 跟SQLite 可以一比高下。针对Android 的数据库测试基准可以在这里看到。

Realm Node.js 可以从 NPM 获取,它完全开源,可以自由使用。

查看英文原文: Realm Releases Object Database for Node.js

2016-11-29 18:002536
用户头像

发布了 322 篇内容, 共 133.6 次阅读, 收获喜欢 142 次。

关注

评论

发布
暂无评论
发现更多内容

依赖倒置原则

Z冰红茶

手撕设计原则:接口隔离

JefferLiu

面向对象 架构师 面向对象设计 面向对象设计原则

week02 作业

Geek_196d0f

Spring中依赖倒置原则的理解

极客李

ElasticSearch原理解析

Chank

elasticsearch

架构师训练营第二周作业(1)

烟雨濛濛

架构师训练营第二周作业

olderwei

极客大学架构师训练营

2020/6/16 架构学习心得

架构5班杨娟Jessie

极客大学架构师训练营

docker-mcr 助您全速下载 dotnet 镜像

newbe36524

Docker netcore

架构师训练营第二周作业

子豪sirius

极客时间架构课 Week02- 作业一:命题作业

yulyulcl

架构师训练营:第二周 作业

Bruce Xiong

SharePoint 往事之:使用Bootstrap定制SharePoint网站页面

手艺人杨柳

SharePoint

第二周学习总结

赵龙

区块链在农业领域能有什么用武之地?

CECBC

区块链技术 上链 农业链 三农

架构师训练营第二周作业

张锐

极客大学 极客大学架构师训练营

重拾依赖倒置原则(训练营第二课)

看山是山

oop 极客大学架构师训练营 依赖倒置原则 DIP

架构师训练营第二周作业(2)

烟雨濛濛

【架构师训练营】第2周作业

花生无翼

极客大学架构师训练营

Week 02 学习总结 框架 设计原则

Z冰红茶

北京疫情反弹 区块链怎样破解食品溯源难题?

CECBC

区块链技术 商品溯源 上链

week02 小结

Geek_196d0f

架构师训练营week2 学习小结

李锦

架构师训练营第二周总结

olderwei

架构师训练营:第二周学习总结

Bruce Xiong

第二周作业

而立斋

依赖倒置 接口隔离原则

第二周作业

赵龙

依赖倒置及Cache重构设计

架构5班杨娟Jessie

极客大学架构师训练营

面向对象设计原则课后作业

周冬辉

架构师训练营第二周感悟

张锐

极客大学架构师训练营

架构师实现自己架构目标工具手段-软件设计

WulalaOlala

极客大学架构师训练营

Realm为Node.js发布对象数据库_JavaScript_James Chesters_InfoQ精选文章