写点什么

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

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

关注

评论

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

《Operating System Concepts》阅读笔记:p26-p33

codists

操作系统

数字名片管理系统(源码+文档+部署+讲解)

深圳亥时科技

DeepSeek-R1满血版性能飙升四倍,成本大降,竟是因为……

天翼云开发者社区

大模型 AI应用 DeepSeek

用户或有意或不经意正在使用零信任理念解决安全问题

芯盾时代

统一身份认证 零信任

平台工程年度盘点与2025展望

杨振涛

DevOps 云原生 平台工程 平台工程社区 PECommunity

《Indie Tools • 半月刊》第001期

沉浸式趣谈

花西子携手赛博威共创新品创新平台,驱动“新质美力”高质量发展

赛博威科技

数字化转型 赛博威

中烟创新为千行百业客户免费部署DeepSeek,让AI应用遍地开花

中烟创新

电子病历信息系统(源码+文档+部署+讲解)

深圳亥时科技

让编程变成一种享受-明基RD320U显示器

陈老老老板

Flink Materialized Table:构建流批一体 ETL

Apache Flink

大数据 flink 实时计算 流批一体

Svelte 最新中文文档翻译(11)—— 动画相关语法 transition、in、out、animate

冴羽

vue.js 前端 React Svelte SvelteKit

人工智能丨提问攻略:如何让 DeepSeek 更懂你?

测试人

人工智能

阿里巴巴商品详情接口(阿里巴巴API系列)

tbapi

阿里巴巴商品详情接口 阿里巴巴API

Karmada社区带薪实习申请中,欢迎加入LFX Mentorship 2025

华为云原生团队

云计算 容器 云原生

夜莺监控发布 v8.beta5 版本,优化 UI,新增接口认证方式便于鉴权

巴辉特

Nightingale 夜莺监控 开源监控

DeepSeek的出现,让我们重新审视了仿真软件

思茂信息

AI 仿真 DeepSeek

数字化转型,五大系统要上哪些?

积木链小链

数字化转型 企业管理 制造业

百度百舸 DeepSeek 一体机发布,支持昆仑芯 P800 单机 8 卡满血版开箱即用

Baidu AICLOUD

专有云 昆仑芯 百度百舸 DeepSeek

《Operating System Concepts》阅读笔记:p17-p25

codists

操作系统

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