【问题标题】:DocumentDB vs Key-Value DB with hierarchy PerformanceDocumentDB 与具有层次结构的 Key-Value DB 性能
【发布时间】:2013-06-01 17:14:12
【问题描述】:

第一件事:我知道键值数据库是迄今为止性能最好的数据库。我的假设是这是由于它们的简单性(坚持很少的原语)。 (EDIT2:显然也是因为蜜蜂大部分时间都在记忆中)

无论如何,更复杂的数据结构,如层次树等。使用像 redis 这样的数据库,您必须基于带有链接的“平面”哈希构建一个结构,而对于像 couchdb 这样的文档数据库,您只需像这样自己构建结构:

"menu": {
    "id": "file",
     "value": "File",
     "popup": {
        "menuitem": [
             {
              "value": "New",
              "onclick": "CreateNewDoc()"
              },
              {
              "value": "Open",
              "onclick": "OpenDoc()"
              },
              {
              "value": "Close",
              "onclick": "CloseDoc()"
              }
       ]
}

如果我有这样的结构,那么在性能和可用性方面使用 redis 是否有意义?

有趣的是,键值和文档数据库经常进行 1:1 比较,同时服务于不同的目的或/和用例恕我直言。

编辑:

我在寻找什么:通常我希望有一个类似 JSON 的数据库存储,这让我可以轻松地动态定义和构建复杂的结构,并从使用数据库系统中获得好东西(故障转移,速度,...)。

谢谢!

【问题讨论】:

  • “第一件事:我知道键值数据库是迄今为止性能最好的数据库。”也许有些是,但我不认为这是一个普遍的真理。我不明白你在找什么。您需要了解您的需求和知识,以及 IT 人员如何与各种平台匹配。您对富查询等有什么要求?
  • 你是对的,那里从来没有一个普遍的真理。但是做出大胆的假设通常有助于并改善讨论。无意冒犯 :-) 现在我不需要丰富的查询,我知道像 Mongo 和 Couch 这样的 DocumentDB 在这方面做得更好。所以我主要想知道性能方面。类似地使用它们时(相同/相似的数据结构)。
  • StackOverflow 在不讨论问题时效果更好。 stackoverflow.com/faq#dontask
  • @WiredPrairie 你是对的。我的意思不是这样的讨论。更像是从不同的人那里获得新的观点、良好的意见和指导。
  • (换句话说,一个讨论)。

标签: performance mongodb redis couchdb key-value


【解决方案1】:

如果我有这样的结构,使用 redis 是否有意义 性能和可用性方面?

您描述的结构由 json 文档中的嵌入数据组成,但是即使使用文档数据库,embeddedreferenced/linked 数据之间仍然存在差异。如果您将大量数据嵌入到单个文档中,最终可能会出现性能问题和数据碎片。另一方面,引用更灵活,但需要一些连接逻辑。总而言之-这取决于您的域模型和您要解决的问题。关于 redis,有像 ohm 这样的库,它们提供了更多基于 OOP 的更高级别的数据抽象。

我在寻找什么:通常我想要一个类似 JSON 的数据库 store,这让我可以轻松定义和构建复杂的 飞行中的结构并从使用中获得好东西 数据库系统(故障转移、速度等)。

虽然 mongodb 可能是最流行的文档数据库,其次是 couchdb,但您也可以尝试查看其他解决方案,如 arangodb 或 orientdb。它们中的每一个都建立在一些哲学之上,与其他解决方案相比,这些哲学可能会在特定领域提供好处,例如couchdb 的 map-reduce 查询方式可能并不适合所有人,但它很耐用。

【讨论】:

  • 谢谢,这就是我要找的。我想我会选择 Redis Set + JSON 方法。对于我的解决方案来说,这似乎是最好的组合。
【解决方案2】:

像 Redis 这样的键值对存储性能如此出色,因为它们将数据存储在内存中,您可以比存储在磁盘上的数据快许多倍地读取/写入内存。

内存存储的问题在于容错性:如果 Redis 意外关闭,内存会被清除,您的所有数据都会丢失。所以,当你经常读写数据时,Redis 是合适的,但你不介意这些数据是否丢失。例如:登录会话,丢失数据意味着用户重新登录。

CouchDB 和其他文档存储交换速度以实现容错,确保您的数据在更多情况下更安全。像 CouchDB 这样的文档存储也提供查询,让您可以搜索和解析数据,这是 Redis 无法做到的。当您读写不能随意丢失的数据时,像 CouchDB 这样的文档存储是合适的。

【讨论】:

  • AFAIK Redis 也具有容错能力,我只取决于您同步到文件系统的频率。但你是对的,这是它们实现方式的另一个主要区别。所以让我们假设我们积极地将我们的内存数据库备份到磁盘,他们将如何与我的示例进行比较。我想在 Redis 中将多个哈希连接在一起以实现某种层次结构也会减慢速度。我通常想知道在 redis 中存储嵌套数据结构是否完全是错误的,并且不是适合该任务的工具。
  • 根据经验,您的数据越复杂,Redis 作为解决方案就越不合适。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-20
相关资源
最近更新 更多