7月QCon广州站2022,关注Web 3.0、数据架构选型、数字化转型等热门话题,点击了解 了解详情
写点什么

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

发布了 321 篇内容, 共 119.3 次阅读, 收获喜欢 126 次。

关注

评论

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

Azure App 部署Django 和 PostgrSQL

yann [扬] :曹同学

Python azure

谈谈控制感(4):损失的后果很严重

史方远

职场 心理 成长

零基础如何学架构

兆熊

架构

识别代码中的坏味道(一)

Page

Java 面向对象 重构

“四个维度” 讲明白什么是微服务!

攀岩鱼

微服务 单体系统 架构设计 团队组织 康威定律

如何在 Mac 上优雅的截图和录屏

Winann

macos 效率 效率工具 Mac

JVM源码分析之Object.wait/notify实现

猿灯塔

JVM

Web3极客日报#140

谢锐 | Frozen

区块链 独立开发者 技术社区 Rebase Web3 Daily

谈谈双亲委派模型的第四次破坏-模块化

寻筝

Java JVM

《零基础学 Java》 FAQ 之 5-如何在IntelliJ IDEA里配置JDK

臧萌

Java jdk intellij

看完这篇HTTP,跟面试官扯皮就没问题了

cxuan

https okhttp

为什么软件开发很难外包

刘华Kenneth

外包 DevOps 风险 背锅

MySQL安全-审计

一个有志气的DB

安全 MySQ

香港科技大学与OSL海科签订无毒海洋防污技术独家授权协议

极客编

测试开发专题:spring-boot自定义返回参数校验错误信息

怪老憨

Spring Boot 测试

游戏夜读 | Scikit-learn的2018自述

game1night

原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (八)好单元测试的特质

编程道与术

Java 编程 软件测试 TDD 单元测试

游戏发行中学到的重要经验(严肃长文)

谢锐 | Frozen

独立开发者 游戏开发 游戏出海 移动互联网

elasticsearch源码解析(一)——restapi

罗琦

elasticsearch 源码分析 RESTful

初次见面

KAMI

记一次MHA切换故障踩的坑

一个有志气的DB

MySQL 高可用 复制 主从同步 故障分析

战略懒惰有多可怕

Neco.W

创业 重新理解创业 初创公司

经历过疫情,你懂得了什么

Winann

疫情 个人成长 生活 成长

Leetcode 556. Next Greater Element III

隔壁小王

算法

我画了35张图就是为了让你深入 AQS

一枝花算不算浪漫

AQS jdk源码

看完这篇,你也是字符编码大神(ASCII、Unicode、UTF-8、UTF-16、UTF-32)

Meandni

Java 面试 Unicode utf-8 utf-16

找一个更好的理由

史方远

职场 成长 工作

阿里巴巴泰山版《Java 开发者手册》,也是一份防坑指南

古时的风筝

Java规范 Java开发手册

高仿瑞幸小程序 09 云数据库初体验

曾伟@喵先森

小程序 微信小程序 大前端 移动

Binlog2sql恢复误删除的数据

一个有志气的DB

MySQL 安全 数据

当你不被尊重的时候,才会想起去尊重别人

小天同学

人生 个人成长 感悟

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