在尝试使用node.js对象(数组,映射...)进行一些数据索引时,在每次启动脚本时需要花费一些时间来填充(从DB数据),我希望我的node.js对象可以自动生成并透明地保存在我的数据库中。
从node.js以及其他数据库(包括基于SQL)使用MongoDB已经有一段时间了,我很清楚javascript对象之间的查询/更新机制非常不同(同步访问,没有查询)和数据库记录(异步访问,查询,...)。但是,我仍然希望制作一个javascript var 持久化的解决方案,至少对于索引而言,可以存在并且有所帮助。
基本上,我正在考虑像HTML5的LocalStorage,但是对于node.js服务器。
你认为这个想法是有趣的,可行的,还是已经存在?
答案 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 projects,uRSA(我有一个small pull request,bcrypt等。
我的假设是你可以将模块扩展绑定到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