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

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

我在6GB RAM的AWS微型实例上运行这个。

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

我想到的选项:

  1. 以周期性间隔将全局数组写入文件并清除。 这里的缺点是,如果在交易中间有客户,那交易状态就会丢失。
  2. 每天重新启动服务器,并将全局数组写入文件。 和上面一样的缺点。
  3. 遵循1或2,并且对于每个传入的请求 – 如果全局数组为空,则在文件中查找相应的JSON对象。 这似乎是绝对荒谬和愚蠢的。

不知何故,我不能想到任何其他的解决scheme,而不必完全重写nodejs应用程序。 你们能想到任何..吗? 将非常感谢关于此的任何讨论。

我看到你正在使用内存作为存储。 如果是这样,你的代码是同步的(你似乎没有使用数据库,所以它可能),那么实际上解决scheme1是正确的。 这是因为JavaScript是单线程的,这意味着当一个代码运行时,另一个代码不能运行。 JavaScript没有并发性。 这只是一个错觉,因为Node.js太快了。

所以你的清洁代码在交易结束之前不会被触发。 这当然假设你的代码是同步的(从我看到的可能是)。

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

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

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

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

然后检索您的数据:

 data = couchbaseClient.set("someKey") 

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