数据库OR数组

如果我有简单的关系(95%查询依赖于ID),使用数据库的确切点是什么?

我正在存储用户和他们的统计资料。

为什么我会使用外部数据库,如果我可以有如下整洁的结构:

db.users[32] = something

500K用户arrays对于RAM来说并不是那么大的努力

优点是:

  • 没有问题的asynchronous性(即时结果)
  • 方便出口/import
  • 像LITERALLY本地对象一样处理数据库

PS。 和考虑事项:

  • 会做更快或更慢的collection[3]db.query("select ...
  • 我将把它作为一个文件存储
  • 只有一个应用程序/进程访问这个数据,并且代码逐行执行 – 请不要详细说明locking。
  • 请不要回答数据库命题,但为什么要使用外部数据库本地数组/对象 – 我有一些数据库的经验 – 事实并非如此。
  • 我正在构build的是客户端/网关/服务器(S)游戏。 网关处理所有用户的数据,处理,authentication,写入统计数据等。软件的其他部分不需要直接访问这个数据/数据库。

这取决于对数据的持久性,延迟和使用寿命的要求。 在内存中对数据结构的访问几乎总是比跳到外部数据库的networking快得多,但有一些事情需要考虑。

您可以将其保存在内存中,但如果您的stream程由于某种原因而被回收,则该stream程不复存在。 这可能是适合你的场景…

如果您有多个前端/进程进行负载平衡(而不是分区)或者没有关联性,那么您也可能遇到问题。 在这样的情况下,内存状态可能会有问题。 还有像memcached这样的选项来解决这个问题。

memcached是Facebook如何解决像这样的问题: http : //www.facebook.com/note.php? note_id=39391378919

与facebook类似,您也可以将数据保存在数据库中(如MongoDB的SQL或NoSQL)并caching在内存中以提高效率。 如果你在内存中caching并且有一个数据库的支持,那么你不得不担心数据的延迟以及如何刷新它。 memcached也是这样的场景的解决scheme。 无论是或者你写自己的机制捎带回数据,有轮询(尽量避免)等…这基本上是什么fb在做 – 使用数据库,但卸载数据库负载分布在内存caching。 从那个职位:

memcached是一个高性能的分布式内存对象caching系统。 在Facebook上,我们可能是世界上最大的memcached用户。 我们使用memcached来缓解数据库负载。

这将是一个比任何事情都更为考虑的答案。 你需要考虑的一件事是你的语言。 我是一个PHP程序员,我很高兴数据库。

试图将500K的用户数组存储在PHP的内存中(并对其进行操作)将是一场恶梦,事实上它可能是大多数语言的。 数据库实现search策略,以克服预定义索引使用对数时间函数的情况。

你也有成本因素。 将其存储在同一台服务器上的MySQL或MongoDB数据库中实际上更便宜,因为您很可能需要更less的内存来存储信息。

我会认真testing你的内存消耗在这样一个数组的负载下,我也猜测这只是一个很多的数组,对吧?

会做更快或更慢的收集[3]比db.query(“select…

现在看,我不确定node.js如何处理数组和迭代到它们中的特定索引,但是某些语言不会在索引上执行O(log n)search,这意味着您只需执行O(n )search,这实际上比直接调用SQL表的索引要慢。 考虑到SQL创build结果集需要花费的时间,将其写入磁盘,然后响应node.js来检索结果集,可能会更慢。

所以Node.js肯定会在一个小的索引或对象上更快,但是更大的一个…我不确定。

只有一个应用程序/进程访问这个数据,并且代码逐行执行 – 请不要详细说明locking。

这是令人惊讶的。 在此之前,我已经轻松地启动了多个node.js服务器。 事实上,要保持理想的虚拟主机环境,你应该总是有另一台服务器准备好进入战斗,如果你的主服务器失败(这相信我它…)。 考虑到这一点,我认为这是一种奇怪,你没有考虑locking和分布式数据的中央存储点。