天天看點

Realm為Node.js釋出對象資料庫

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擷取,它完全開源,可以自由使用。

本文轉自d1net(轉載)