5

在尝试使用 node.js 对象(数组、地图...)进行一些数据索引时,每次脚本启动时都需要一些时间来填充(从 DB 数据),我希望我的 node.js 对象可以自动且透明地持久化在我的数据库中。

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

基本上,我正在考虑类似 HTML5 的 LocalStorage,但适用于 node.js 服务器。

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

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

4

3 回答 3

3

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

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

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

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

于 2013-07-10T09:35:29.443 回答
2

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

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>

例如

节点 --harmony-proxies 应用程序

于 2015-04-20T03:21:00.140 回答
2
%> 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 以利用它。

我想我有一篇关于用这种类型的 node.js 开发让你的脚湿透的帖子(它源于我在这里遵循的原始教程)

但是我确实相信该方法已经过时,而更新的方法是使用node-gyp工具。一些额外的资源和示例:node-gyp 项目uRSA(我对此有一个小的拉取请求)、bcrypt等。

我对此的假设是,您可以将模块扩展绑定到数据库 api,例如 oracle 或 postgres 等,并通过编写链接到低级 API 的低级模块,同时为开发人员公开高级 API 以实现持久配置带有用于切片、索引等的 API 调用的选项与尝试让 node.js 解释您的原型 shim 相比,性能将是最佳的

于 2013-06-25T13:43:19.840 回答