用于记录的快速数据存储

时间:2011-01-21 06:59:28

标签: logging nosql node.js

我目前正在编写一份调查问卷,收集并存储来自不同用户的大量数据,我正在研究一种有效存储结果的方法。我有以下要求:

  • 写得很快
  • 持久
  • 可从node.js
  • 使用
  • 小开销
  • 在存储数据之前没有读取授权(为了性能,我需要只写)

每个用户都可以POST几个结果,我需要在稍后的时间点按用户ID进行查询。这些请求将由并行运行的不同node.js进程处理。最后,数据可能如下所示:

user1:
  result1
  result2
  result3
user2:
  result1
user3:
  result1
  result2

基本上我需要能够:

  • 获取用户列表
  • 查询给定用户的结果

我首先想到我会为每个用户使用一个文件,但我担心这不会扩展,因为可能会有超过最大允许文件数的用户数。

有什么建议吗?

修改:如果这可能有所帮助,每个结果都会很小,通常小于50kb。

编辑2 :每个结果都适合单个ASCII行(数据中没有\n),否则数据应该被视为没有特定结构的字符串。

4 个答案:

答案 0 :(得分:3)

像redis这样的键值对db可以帮到你。它可以使用来自node.js的用户,如果您使用userid作为键,则可以使用用户ID查询用户。

但更重要的是......你需要表现还是需要扩展? :)

- 西

答案 1 :(得分:1)

令我感到惊讶的是,没有人没有像Couchdb那样只添加dbms。

由于写入仅发送到数据库文件的末尾,因此它不仅非常快速而且非常健壮。 。查询它不是一个问题,因为你有视图(你用js写)。使用REST / http,使用任何语言与Couchdb交谈都非常简单。

在一些简单的写作台下,我通过从几台服务器插入,设法利用10个核心的100%,我认为这是非常强大的

我不会使用东京内阁,因为它的发展已经正式停止,有利于京都内阁

这是我的2cents

答案 2 :(得分:0)

不确定为什么这必须是NoSQL ...考虑使用SQLite而不是文件。它非常快速,非常耐用,易于查询(SQL)。它非常适合节点,因为节点是单线程的,而SQLite是一个进程内数据库。

以下是从节点访问SQLite的API:http://code.google.com/p/node-sqlite/

答案 3 :(得分:0)

看看Elasticsearch。 HTTP / JSON API,Lucene支持,完全分发。我已经在其中存储了数百个TiB数据。它甚至是logstash的默认持久性,这是一个常用的工具,可用于您正在/想要做的事情。