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.realmwinston.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 levelwinstonRealm.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