【问题标题】:Fast datastore for logging用于记录的快速数据存储
【发布时间】:2011-06-12 23:26:06
【问题描述】:

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

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

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

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

基本上我需要能够:

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

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

有什么建议吗?

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

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

【问题讨论】:

  • 那么您决定使用哪个数据存储?您能否提供一些关于您选择该特定 DBMS 的原因的见解?

标签: logging nosql node.js


【解决方案1】:

像 redis 这样的键值对数据库会帮助你。它可以从 node.js 使用,如果您使用 userid 作为键,您可以使用用户 ID 查询用户。

但更重要的是......您需要性能还是需要扩展? :)

--赛

【讨论】:

  • 我真的很喜欢 redis,但它不适合这里,它是一种矫枉过正(我不需要任何数据结构)。我需要性能(书面)和扩展。
  • 我只是以 Redis 作为 KV 数据库的示例。但是您可以选择任何 KV 数据库。甚至伯克利 DB 或东京内阁。并且您需要为扩展做计划。像 redis 一样的节点和数据库可以为您提供最佳性能和可感知的扩展性......
  • "any kv db" 并不是我一直在寻找的答案……
  • 也许是架构图 :).. 您正在寻找的数据访问模式指向 KV DB 类型。我不能给你一个明确的数据库并强迫你使用它,因为你需要为你的使用模式对它们进行基准测试。数据库是复杂的实体。对不起,如果我不能给你一个数据库并要求你使用它。
  • 您要寻找的安全级别是多少?将数据写入内存的数据库应该像 Memcached 一样快。但是在单服务器模式下使用它会导致安全灾难。如果您目前不考虑安全性,那么通过在 JS 中使用内存中的哈希可以获得最高的写入速度:)
【解决方案2】:

我很惊讶没有人没有提到像 Couchdb 这样的仅附加 dbms。

由于只写入到数据库文件的末尾,它不仅非常快而且非常健壮。 .查询它也不是问题,因为您有视图(用 js 编写)。使用任何语言与 Couchdb 交谈也非常简单,就像使用 REST/http 一样。

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

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

那是我的 2 美分

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2014-04-09
        • 1970-01-01
        • 1970-01-01
        • 2017-01-14
        • 1970-01-01
        • 1970-01-01
        • 2012-10-01
        • 2015-02-27
        • 1970-01-01
        相关资源
        最近更新 更多