【问题标题】:Why should NoSQL perform faster?为什么 NoSQL 应该执行得更快?
【发布时间】:2013-05-23 04:29:05
【问题描述】:

让我们想象一下要在服务器上完成的非常简单的任务。有很多用户在我们的网站上聊天,我们想知道他们每个人是否在线。

有两种明显的方法可以做到这一点——使用 MySQL 数据库或应用 memcached NoSQL 解决方案。

但是为什么 memcached 应该执行得更快呢?如果我理解正确,MySQL 也会从内存中读取数据,而不是从磁盘中读取数据(如果设置和调整正确)。用于持久性的资源很少,但也不会太多——只需在磁盘上刷新几个内存页面。

主要问题。是否有充分的理由为这样的任务使用 NoSQL,否则 MySQL 也能正常运行?

【问题讨论】:

    标签: mysql performance nosql


    【解决方案1】:

    对于这样一个微不足道的任务,你是对的,它不会显着改变性能,因为数据将保留在内存中,I/O 不会成为问题。

    您的问题似乎暗示 memcached 是一个典型的 NoSQL 引擎;让我强调一下,memcached 本身就是一个实体,通常不被概念化为 NoSQL 数据库,而更像是一种快速且易失的键值存储,通常由磁盘绑定数据库提供支持。

    SQL 和 NoSQL 各有优缺点,超出了您的问题的范围,更多信息请参阅 available in another thread

    【讨论】:

      【解决方案2】:

      NoSQL 通常用于分析大数据。 Memcached 是用来做一个快速缓存系统的。

      聊天不需要大数据分析,也不需要缓存系统,因为你只需要展示少量数据,而且数据经常更新。因此,关系型 DBMS 是最佳选择。

      假设您有一个很少更改的复杂网站。假设您的页面很复杂,并且必须执行几个复杂的查询来组成每个页面。在这种情况下,使用 memcached 是有意义的,因为您可以组合页面并将它们存储在内存中。

      假设您拥有庞大的商业智能数据。您需要进行一些聚合操作,例如平均值、标准差、总和……嗯,大数据解决方案可能比 MySQL 执行得更好。想想,有很多警告。

      结论:NoSQL 不适合聊天 :)

      【讨论】:

      • 将 NoSQL 归类为数据分析解决方案过于简单。这可能适用于面向列的存储,但不一定适用于图形、文档甚至面向 KV 的数据库。只是说;)
      • 我不认为它们应该用于其他目的。其中许多是无模式的、容易出错的,或者写入数据太少而无法获得良好的性能(例如 MongoDB),而我所知道的那些不授予数据完整性或任何形式的内置安全性。因此,我不会将它们用于数据仓库以外的任何其他用途(并且仅在 ENORMOUS 数据库的情况下)。但当然,这只是我的意见。有时我不得不使用它们,但这是因为 DBA 无法完成他的工作并优化关系数据库。但同样,这只是我的经验。
      • 很公平,但您应该更深入地研究它。例如,Redis 可以用作缓存系统,或者 Neo4J 可以在混乱的数据结构中表现出有趣的性能。当然,这些都是通常涉及大数据的特定用例,但仍然如此。
      • 好吧,我不了解 Neo4,但我同意 Redis。 NoSQL 是一个营销术语,用于表示彼此非常不同的软件项目。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-13
      • 2012-03-08
      • 1970-01-01
      • 2022-01-09
      • 2011-03-21
      相关资源
      最近更新 更多