2014-03-03 46 views
0

为什么NoSQL认为结构上比某些SQL db更快?假设我在某个SQL表的列上添加了一些索引。有人可以提供某种更快的查询吗?NoSQL的优势

我在读关于redis的内容。

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存储,这个代码如何在结构上比设置一些followship表更快?核心符号表的实现建立在数组上,这可以被认为是SQL表id。

至于RAM的redis内存存储,它怎么会持续下去?

+0

没有NoSQL这样的东西。只有很多新的数据库技术彼此之间没有多大关系。虽然他们中的一些人可以比SQL数据库更快地完成一些任务,但还有一些其他的东西,其中一些更慢或者根本无法完成。 – Philipp

回答

4

某些* NoSQL数据库在某些*操作中比某些* SQL数据库更快的原因是,因为它们中的某些*的工作更简单。多年来,一些*关系数据库管理系统积累了许多功能蠕变。大多数*关系数据库不仅仅是数据表。它们具有自动优化索引,事务,外键关系,约束,触发器,存储过程,强制一致性,智能视图,奇异数据类型,深奥查询命令等等。

作为比较:Redis目前约有20,000行代码。另一方面,MySQL现在已经超过150万个LoC!不要误解我的意思,所有*这些功能都有其存在的理由。但他们都不是免费的。它们都需要权衡,使其他操作变得更慢。

大多数*另一方面,NoSQL数据库是较新的开发方式,它将所有复杂性全部抛在脑后,只专注于最重要的事情:通过索引快速检索信息。这种简单性使得一些* NoSQL数据库一开始就显得更快更高效。但请记住,这些价格是有代价的:当您真正需要由许多*关系数据库提供的这些功能时,通常必须通过非常复杂的查询或通过进行多个查询并在应用程序级别执行其他操作来复制它们。这可能会使一些* NoSQL数据库对于某些*用例甚至更慢。底线:NoSQL数据库只是您工具箱的更多工具。也许你有一些问题比他们的旧工具更好解决。但其他问题可能更适合您的旧工具。

关于RAM存储和持久性在一个数据库中的共存:这些*数据库通常在RAM中执行写入操作,报告成功(或失败)并稍后保留这些更改。读操作首先从RAM提供,并且只有当信息没有在那里找到时,它们才在硬盘上查找。这可以提高最近访问数据的写入响应速度和查找速度,但是如果发生突然崩溃,可能会丢失最近的数据。

*)不是全部,也有例外

+0

最着名的Nosql数据库例如mongodb,nosdb(我已经使用过它们)都有Journal。用户操作会立即插入到日志中,以便在数据库崩溃时重新应用操作。使用日记几乎可以使数据丢失无效。关于查询,NoSql的分布式特性使得查询处理更快,因为首先查询结果是在每个节点上可用的少量数据上计算出来的,然后结果在查询路由器中合并。显然,每个节点的数据量较小,因此可以更快地计算结果。根据时间复杂性来思考。 –