我目前正在编写一份调查问卷,收集并存储来自不同用户的大量数据,我正在研究一种有效存储结果的方法。我有以下要求:
每个用户都可以POST
几个结果,我需要在稍后的时间点按用户ID进行查询。这些请求将由并行运行的不同node.js进程处理。最后,数据可能如下所示:
user1:
result1
result2
result3
user2:
result1
user3:
result1
result2
基本上我需要能够:
我首先想到我会为每个用户使用一个文件,但我担心这不会扩展,因为可能会有超过最大允许文件数的用户数。
有什么建议吗?
修改:如果这可能有所帮助,每个结果都会很小,通常小于50kb。
编辑2 :每个结果都适合单个ASCII行(数据中没有\n
),否则数据应该被视为没有特定结构的字符串。
答案 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的默认持久性,这是一个常用的工具,可用于您正在/想要做的事情。