写点什么

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:002719
用户头像

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

关注

评论

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

三大「价值流」搞定技术型管理

蔡建斌

管理 技术管理 精益 引航计划 内容合集

14 种编程语言书写关机脚本,真香

梦想橡皮擦

9月日更

Who is Mavenir?

俞凡

Mavenir

循环神经网络LSTM RNN回归:sin曲线预测

华为云开发者联盟

RNN 循环神经网络 LSTM LSTM RNN回归

使用Git分布式控制系统,怒斩腾讯和阿里的Offer

Java 程序员 后端

NDK-AAudio

Changing Lin

9月日更

Vite + Vue3 + OpenLayers

德育处主任

大前端 地图 vite Vue3 openlayers

三面滴滴Java岗,Java程序员校招蚂蚁金服

Java 程序员 后端

三面美团、四面阿里成功斩下offer,下血本买的

Java 程序员 后端

三面蚂蚁惨败,面试官要求手写算法,从外包公司到今日头条offer

Java 后端

测试模型中理解压力测试和负载测试

FunTester

性能测试 接口测试 压力测试 FunTester 负载测试

如何从零搭建起一支技术团队

石云升

团队管理 管理 引航计划 内容合集 9月日更

什么是事务数据库?,Java程序员面试题集大全

Java 程序员 后端

【墨天轮专访第四期】华为云GaussDB:发挥生态优势,培养应用型DBA

华为云数据库小助手

GaussDB 交流 华为云数据库 人物访谈

【Flutter 专题】50 图解动画小插曲之 Lottie 动画

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 9月日更

狄刚谈区块链:技术上去中心化并不等于管理去中心化

CECBC

号外!号外!极客时间出插件了😎

IT蜗壳-Tango

极客时间 9月日更 浏览器插件

人才缺口超70万,15所高校新设区块链专业

CECBC

世界的尽头是铁岭,互联网的尽头是它

艾小仙

什么是Spring-Cloud、需要掌握哪些知识点,Java面试常问的算法题

Java 程序员 后端

手撸二叉树之二叉搜索树的最小绝对差

HelloWorld杰少

数据结构与算法 9月日更

Vue进阶(幺零七):arr.forEach() 跳出循环

No Silver Bullet

Vue 9月日更

带你读AI论文丨用于细粒度分类的Transformer结构—TransFG

华为云开发者联盟

细粒度 映射 Transformer TransFG 差异性图片

【优化技术专题】「线程间的高性能消息框架」深入浅出Disruptor的使用和原理

洛神灬殇

Disruptor LinkedBlockingQueue ArrayBlockingQueue 9月日更

北鲲云SaaS平台让生物医学关键环节不再靠“猜”

北鲲云

什么?语音合成开源代码不会跑,Follow me!

华为云开发者联盟

tensorflow 语音合成 Tacotron2 DeepMind 深度神经网络模型

RocksDB原理及应用

hanaper

性能测试中标记请求参数实践

FunTester

性能测试 接口测试 压力测试 FunTester 标记参数

用IoT放羊养牛,不出门也能知道它们的动向

华为云开发者联盟

物联网 华为云 iotda 畜牧业 华为云物联网平台

如何选择收银机主板?

双赞工控

安卓主板

没有Linux服务器,该如何学习Linux呢?

Simon郎

大数据 Linux java;

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