基于文档的DB如何如此之快?

时间:2012-01-11 09:22:17

标签: mysql mongodb couchdb nosql

我只是想更好地理解,多年来我学到的是基于文档的解决方案很慢并且需要大量的I / O.在PHP项目中的例子中,通常认为使用像Redis,Memecache或APC这样的内存缓存要好得多,因为它们是基于内存而不是将数据缓存到实际的FILE。

现在所有这些NoSQL DB已经到了,我读到了它们如何比MySQl和其他人快得多,而且它们是基于文档的。有人能帮我理解这个理论吗?如果每个记录都是文档(FILE),那么它在性能上有多好?我最近读到一个人正在一个项目中使用Redis,他说他切换到MongoDB,并且他用Redis做了更好的结果(我意识到我正在将Cache与DB进行比较,但这不是真正的问题,我想知道基于文档的解决方案如何比非基于文档的解决方案更快?)

6 个答案:

答案 0 :(得分:4)

基于文档并不一定意味着它们完全存储在文件系统中。某些部分仍然可以像索引一样保存在内存中。

基于文档仅表示数据库将数据存储在包中(例如纸张,其中每张纸都是数据集,您可以在其上自由编写),而不是像表格那样的特定结构。

http://en.wikipedia.org/wiki/Document-oriented_database

啊,为什么他们比redis更快:
假设您需要在集合中存储一些非线性信息(即并非每个数据集看起来都相同,并且您在一组中有不同的数据类型。在Redis上,您只能存储键值对,因此您需要将它们链接在一起在你自己的代码/实现中的一个集合。在NoSQL数据库上,这是由数据库以(可能)更优化的方式为你处理的:)

答案 1 :(得分:2)

NoSQL发言可能容易产生误解,因为有些概念会使用与传统概念有不同含义的名称:

  • 基于文件并不(必然)意味着数据存储区将每条记录写入文件 - 这意味着如果某种数据类型,数据存储区中的记录将不必符合预定义的字段模式。将“文件”视为XML,JSON或朋友。
  • (大多数)NoSQL数据存储的性能优势是有代价的:通常很容易理解的ACID承诺是针对更宽松的一致性模型进行交易的。
  • 关系SQL数据库的强大功能在很大程度上取决于每个查询都可以针对现有模式编写。 NoSQL数据存储区并非如此:在最极端的版本中,只能通过记录ID访问记录。
  • 大多数NoSQL数据存储区的扩展性比典型的关系数据库要好得多 - 它们是“我们必须从一个易于理解的关系数据库中牺牲什么”以克服扩展限制的问题的答案“

答案 2 :(得分:1)

神奇的成分不一定是“更快”的数据库,它是一个能够设计和实现“更快”系统的数据库。这就是为什么NoSQL数据库被认为是改变游戏规则的原因。

几十年来,关系数据库是城里唯一的游戏。许多基于SQL的系统支付双重性能税:一次用于完整的ACID功能集(他们可能不需要它们),然后再将其域数据窃取到关系表模型中。

此外,大多数NoSQL数据库的一个共同特点是它们更简单,因为它们比SQL数据库的“一般情况”方法更专业。这意味着需要在每个操作上运行的逻辑/代码更少,更简单的数据结构(可能需要更少的IO)以及通常 - 更少的开销,更好的性能。

答案 3 :(得分:0)

首先是 - 你无法将NoSQL数据库与内存数据库进行比较。 NoSQL DB适用于不适合内存的数据。

现在,关于NoSQL数据库,它们不仅仅是简单的文件,它们还有索引,可以快速访问文件中的偏移量,而这正是速度所在。

答案 4 :(得分:0)

要想一个主意,请考虑一下:

  • 使用MongoDB,您可以设计您的模式,使单个文档包含呈现页面所需的一切。
  • 使用MySQL(或任何其他RDBMS),您可以规范化数据并将其拆分为多个表。要呈现相同的页面,您必须进行许多SQL查询。

虽然一个mongo查询可能比一个mysql查询慢,但将1个mongo查询与100个mysql查询进行比较会更快。

答案 5 :(得分:0)

使基于文档的数据库比关系数据库更快的因素之一是Locality

  

文档是独立的单元 ::可以提高性能   (从磁盘连续读取相关数据),并使其更容易   跨多个服务器分布数据,同时保留其本地性。

Document DataBase