为什么说NoSQL在结构上比某些SQL更快?假设我在某个SQL表的一个列上添加了一些索引。有人能提供一些更快的查询吗?
我在读关于瑞迪斯的书。
class User < ActiveRecord::Base
def follow!(user)
$redis.multi do
$redis.sadd(self.redis_key(:following), user.id)
$redis.sadd(user.redis_key(:followers), self.id)
end
end
....尽管具有redis的RAM存储,这段代码在结构上如何比设置一些后续表更快呢?核心符号表实现是建立在数组之上的,这些数组可以被认为是SQL表ids。
至于RAM redis内存存储,它如何持久?
发布于 2014-03-03 22:08:28
在某些*操作中,一些* NoSQL数据库比一些* SQL数据库快,原因是其中一些数据库的工作要简单得多。多年来,一些关系型数据库管理系统积累了大量的特性。大多数*关系数据库不仅仅是数据表。它们具有自动优化索引、事务、外键关系、约束、触发器、存储过程、强制一致性、智能视图、外来数据类型、复杂的查询命令等等。
比较而言: Redis目前大约有20.000行代码。另一方面,MySQL现在已经超过150万LoC了!别误会,所有这些特性都有其存在的原因。但他们都不是自由的。它们都需要权衡,从而使其他*操作变得更慢。
另一方面,大多数* NoSQL数据库都是较新的发展,它们把所有的复杂性抛在脑后,只专注于最重要的方面:按索引快速检索信息。这种简单性使得一些* NoSQL数据库在开始时看起来要快得多,效率也高。但请记住,这些功能是有代价的:当您实际需要许多*关系数据库提供的这些特性时,通常需要通过非常复杂的查询或进行多个查询并在应用程序级别执行其余的查询来复制它们。这可能会使一些* NoSQL数据库对某些*用例的速度更慢。
底线: NoSQL数据库只是工具箱的更多工具。也许你有一些比你的旧工具更能解决的问题。但其他问题可能更适合你的旧工具。
关于RAM存储和持久性在一个数据库中共存的问题:这些*数据库通常在RAM中执行写操作,报告成功(或失败),并在以后坚持这些更改。读取操作最初是从RAM中提供的,并且只有在没有找到信息时,才会在硬盘上查找。这提高了对最近访问的数据的写入和查找速度的响应能力,但在突然崩溃的情况下有丢失最新数据的风险。
*)并非所有,都有例外。
https://stackoverflow.com/questions/22157909
复制相似问题