数据库中node.js对象的自动持久性

时间:2013-06-25 12:41:14

标签: javascript database node.js persistence object-persistence

在尝试使用node.js对象(数组,映射...)进行一些数据索引时,在每次启动脚本时需要花费一些时间来填充(从DB数据),我希望我的node.js对象可以自动生成并透明地保存在我的数据库中。

从node.js以及其他数据库(包括基于SQL)使用MongoDB已经有一段时间了,我很清楚javascript对象之间的查询/更新机制非常不同(同步访问,没有查询)和数据库记录(异步访问,查询,...)。但是,我仍然希望制作一个javascript var 持久化的解决方案,至少对于索引而言,可以存在并且有所帮助。

基本上,我正在考虑像HTML5的LocalStorage,但是对于node.js服务器。

你认为这个想法是有趣的,可行的,还是已经存在?

编辑:正在进行的工作:https://github.com/adrienjoly/persistent-harmony

3 个答案:

答案 0 :(得分:2)

首先要明确的是,数据库有两个目的:持久性和方便/高效的查询。

如果您只需要第一个,因为您事先已经知道没有其他程序可以访问您的持久性数据,您可以查看有关正交持久性的文献,这正是你在这里提出的概念。一个例子是在WaterKen Java服务器中成功实现的KEN协议。 有some work将协议集成到Google的V8 JavaScript运行时,这可能会导致Nodeken,一个具有正交持久性的Node.js。

正确持久化的一个难点是将事务语义映射到f.e.面向对象的编程系统。 V8-ken采用的方法是将JavaScript运行时的单个事件循环执行视为事务。换句话说,响应于某些事件(传入的Web请求,服务器回复,用户界面事件,所有异步操作(IO)等),虚拟机的状态在每个“转向”结束时被持久化。然而,这需要修改后的运行时,例如V8-ken,但ECMAScript中的演变(例如代理)看起来很有希望能够更方便地实现这些功能。

在许多情况下(想想Web应用程序),持久数据需要不同程序可访问,需要一个“真实”数据库,以便轻松导出,迁移,查询等数据。 混合方法当然是可能的......

答案 1 :(得分:1)

%> npm search persistent storage
closet                JSON persistent storage with methods chainability and callbacks for asynchronous use. =ganglio 2013-01-29 18:41  0.0.7  json persistent storag
ewdDOM                Persistent lightweight DOM using Mumps Global Storage         =robtweed        2013-02-02 14:39  0.0.4
fs-persistent-object  Tiny Node library for persisting small runtime objects on filesystem =oleksiyk 2013-04-09 09:13  0.0.1  persistent tiny storage
headstorage           A persistent storage for Node.js                              =headhsu2568     2012-11-20 13:41  0.0.0  storage
level-store           A streaming storage engine based on LevelDB.                  =juliangruber    2013-06-21 19:55  3.3.2  leveldb levelup stream persistent
node-persist          Super-easy (and fast) persistent data structures in Node.js, modeled after HTML5 localStorage =benmonro 2013-04-09 17:33  0.0.1  node persist
persistent-hash-trie  Pure string:val storage, using structural sharing             =hughfdjackson   2013-05-24 19:24  0.4.1  persistent hash trie pure functional d
perstore              Perstore is a cross-platform JavaScript object store interface for mapping persistent objects to various different storage mediums using an in
shelf.js              A modular, powerful wrapper library for persistent objects in the browser and Node.js =shakty 2013-05-24 08:10  0.4.7  persistance localStorag
stay                  Persistent scuttlebutt instances for browser and node         =juliangruber    2012-12-11 21:54  0.1.0  persistent scuttlebutt persistence loc

最接近的匹配似乎是 node-persist

=)

编辑:这可能是一个更好的替代解决方案...

@adrienjoly你知道原型设计仍然是相当高的水平,并且可能不会(从长远来看)像你想的那样高效。

您可能最好在C / C ++中开发模块,为node.js公开高级API以利用它。

我想我有一个post关于这种类型的node.js开发(它来自我遵循的原始教程here

我确实认为该方法已过时,而较新的方法是使用node-gyp工具。一些其他资源和示例:node-gyp projectsuRSA(我有一个small pull requestbcrypt等。

我的假设是你可以将模块扩展绑定到db api(例如oracle或postgres等),并通过编写链接到低级API的低级模块,同时公开高级API以供开发人员实现使用API​​调用切片,索引等的持久配置选项,性能将是最佳的,而不是尝试让node.js解释您的原型设备垫片

答案 2 :(得分:1)

也许这就是你要找的东西?

https://github.com/yangli1990/flydb

npm install flydb

现在在javascript中

var flydb = require('flydb');

flydb.test = "hello world";  //flydb.test will now persist

运行此

node --harmony-proxies <your commands>

e.g

node --harmony-proxies app