Nodejs - 如何维护全局数据结构

时间:2012-07-19 14:47:50

标签: node.js

所以我在node.js中有一个后端实现,它主要包含一个JSON对象的全局数组。 JSON对象由用户请求(POSTS)填充。因此,全局数组的大小与用户数量成比例增加。数组中的JSON对象不相同。这是一个非常糟糕的架构。但我只是按照我所知道的去做,并决定在飞行中学习。

我在具有6GB RAM的AWS微型实例上运行它。

如何在爆炸之前清除此全局数组?

我想到的选项:

  1. 以定期间隔将全局数组写入文件并清除。这里的缺点是,如果在事务中间有任何客户端,那么该事务状态就会丢失。
  2. 每天重新启动服务器,并在那时将全局数组写入文件。与上述相同的缺点。
  3. 跟随1或2,并且对于每个传入请求 - 如果全局数组为空,则在文件中查找相应的JSON对象。这看起来非常荒谬和愚蠢。
  4. 如果不必完全重写nodejs应用程序,我无法想到任何其他解决方案。你们能想到任何......?非常感谢对此的任何讨论。

2 个答案:

答案 0 :(得分:2)

我看到你正在使用内存作为存储。如果是这种情况并且您的代码是同步的(您似乎不使用数据库,那么可能),那么实际解决方案 1。是正确的。这是因为JavaScript是单线程的,这意味着当一个代码运行时另一个代码无法运行。 JavaScript中没有并发性。这只是一种幻觉,因为Node.js太快了。

因此,在交易结束之前,您的清洁代码不会被激活。这当然是假设您的代码是同步的(并且从我看来可能是这样)。

但仍然有150个理由不这样做。最重要的是你正在重新发明轮子!让数据库为您努力工作。使用适当的数据库将为您节省将来的所有麻烦。有许多可能性:MySQL,PostgreSQL,MongoDB(我最喜欢的),CouchDB和许多其他。在这一点上它应该不重要。只需选一个。

答案 1 :(得分:1)

我建议你开始将你的JSON保存到像http://www.couchbase.com/这样的非关系型数据库。

即使在群集中,Couchbase也非常易于设置和使用。它使用简单的键值设计,因此保存数据非常简单:

couchbaseClient.set("someKey", "yourJSON")

然后检索您的数据:

data = couchbaseClient.set("someKey")

系统也非常快,OMGPOP用于Draw Something。 http://blog.couchbase.com/preparing-massive-growth-revisited