2

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

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

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

我想到的选项:

  1. 定期将全局数组写入文件并清除。这里的缺点是,如果在事务中间有任何客户端,则该事务状态将丢失。
  2. 每天重启服务器,到时候把全局数组写入文件。缺点同上。
  3. 遵循 1 或 2,对于每个传入请求 - 如果全局数组为空,则在文件中查找相应的 JSON 对象。这看起来绝对荒谬和愚蠢。

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

4

2 回答 2

2

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

因此,在事务结束之前,您的清洁代码不会触发。这当然是假设您的代码是同步的(并且据我所知可能是同步的)。

但是仍然有大约 150 个理由不这样做。最重要的是,您正在重新发明轮子!让数据库为您完成繁重的工作。使用适当的数据库将为您节省未来的所有麻烦。有很多可能性:MySQL、PostgreSQL、MongoDB(我最喜欢的)、CouchDB 等等。在这一点上,哪一个都不重要。随便挑一个。

于 2012-07-19T16:34:00.710 回答
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

于 2012-07-19T15:22:12.913 回答