我只是想更好地理解,多年来我学到的是基于文档的解决方案很慢并且需要大量的I / O.在PHP项目中的例子中,通常认为使用像Redis,Memecache或APC这样的内存缓存要好得多,因为它们是基于内存而不是将数据缓存到实际的FILE。
现在所有这些NoSQL DB已经到了,我读到了它们如何比MySQl和其他人快得多,而且它们是基于文档的。有人能帮我理解这个理论吗?如果每个记录都是文档(FILE),那么它在性能上有多好?我最近读到一个人正在一个项目中使用Redis,他说他切换到MongoDB,并且他用Redis做了更好的结果(我意识到我正在将Cache与DB进行比较,但这不是真正的问题,我想知道基于文档的解决方案如何比非基于文档的解决方案更快?)
答案 0 :(得分:4)
基于文档并不一定意味着它们完全存储在文件系统中。某些部分仍然可以像索引一样保存在内存中。
基于文档仅表示数据库将数据存储在包中(例如纸张,其中每张纸都是数据集,您可以在其上自由编写),而不是像表格那样的特定结构。
http://en.wikipedia.org/wiki/Document-oriented_database
啊,为什么他们比redis更快:
假设您需要在集合中存储一些非线性信息(即并非每个数据集看起来都相同,并且您在一组中有不同的数据类型。在Redis上,您只能存储键值对,因此您需要将它们链接在一起在你自己的代码/实现中的一个集合。在NoSQL数据库上,这是由数据库以(可能)更优化的方式为你处理的:)
答案 1 :(得分:2)
NoSQL发言可能容易产生误解,因为有些概念会使用与传统概念有不同含义的名称:
答案 2 :(得分:1)
神奇的成分不一定是“更快”的数据库,它是一个能够设计和实现“更快”系统的数据库。这就是为什么NoSQL数据库被认为是改变游戏规则的原因。
几十年来,关系数据库是城里唯一的游戏。许多基于SQL的系统支付双重性能税:一次用于完整的ACID功能集(他们可能不需要它们),然后再将其域数据窃取到关系表模型中。
此外,大多数NoSQL数据库的一个共同特点是它们更简单,因为它们比SQL数据库的“一般情况”方法更专业。这意味着需要在每个操作上运行的逻辑/代码更少,更简单的数据结构(可能需要更少的IO)以及通常 - 更少的开销,更好的性能。
答案 3 :(得分:0)
首先是 - 你无法将NoSQL数据库与内存数据库进行比较。 NoSQL DB适用于不适合内存的数据。
现在,关于NoSQL数据库,它们不仅仅是简单的文件,它们还有索引,可以快速访问文件中的偏移量,而这正是速度所在。
答案 4 :(得分:0)
要想一个主意,请考虑一下:
虽然一个mongo查询可能比一个mysql查询慢,但将1个mongo查询与100个mysql查询进行比较会更快。
答案 5 :(得分:0)
使基于文档的数据库比关系数据库更快的因素之一是Locality。
文档是独立的单元 ::可以提高性能 (从磁盘连续读取相关数据),并使其更容易 跨多个服务器分布数据,同时保留其本地性。