Realm為Node.js發布對象數據庫

gy526133 8年前發布 | 34K 次閱讀 Realm Node.js 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.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 獲取,它完全開源,可以自由使用。

 

 

來自:http://www.infoq.com/cn/news/2016/11/Realm-database-nodejs

 

 本文由用戶 gy526133 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!