为什么NoSQL表现更快?

3
让我们来想象一个非常简单的服务器任务。我们的网站上有很多用户在聊天,我们想知道每个用户是否在线。有两种明显的方法可以做到这一点——使用MySQL数据库或应用memcached NoSQL解决方案。
但为什么memcached表现更快?如果我理解正确,MySQL也会从内存中读取数据,而不是从硬盘中读取(如果设置和调整正确)。少量持久性资源,但也不要太多——只需将几个内存页刷新到磁盘上即可。
主要问题是,对于这样的任务,是否有充分的理由采用NoSQL,或者MySQL也能正常运行?
2个回答

4
对于这样一个微不足道的任务,你是对的,它不会显著地改变性能,因为数据将保留在内存中,I/O 不会成为问题。
你的问题似乎暗示了 memcached 是一个典型的 NoSQL 引擎;让我强调一下,memcached 是一个独立的实体,通常不被概念化为 NoSQL 数据库,而更多地被视为快速且易失的键值存储,往往由面向磁盘的数据库支持。
SQL 和 NoSQL 各有优势和劣势,超出了你的问题范围,关于这方面的更多信息可以在另一个主题中找到

0

通常情况下,NoSQL 用于大数据分析。Memcached 用于构建快速缓存系统。

聊天应用程序不需要进行大数据分析,也不需要缓存系统,因为你只需要显示少量数据,并且数据经常更新。因此,关系型数据库管理系统是最好的选择。

假设你有一个很复杂的网站,但很少更改。假设你的页面很复杂,每个页面都需要执行几个复杂的查询才能组成。在这种情况下,使用 memcached 是有意义的,因为你可以组合页面并将其存储在内存中。

假设你有海量的商业智能数据。你需要进行一些聚合操作,如平均值、标准差、总和等等... 那么,一个大数据解决方案可能比 MySQL 更好。不过,有很多注意事项。

结论:NoSQL 不适用于聊天应用程序 :)


将NoSQL归类为数据分析解决方案是过于简单化的。这对于列定向存储可能是正确的,但对于图形、文档甚至KV定向数据库并非如此。只是这么说 ;) - LMeyer
我认为它们不应该用于其他目的。其中许多是无模式、容易出错或写入数据太少以获得良好性能(例如MongoDB),而我所知道的这些数据库都没有提供数据完整性或任何形式的内置安全性。因此,除了数据仓库(仅在巨大的数据库情况下)之外,我不会将它们用于其他任何用途。当然,这只是我的观点。有时我不得不使用它们,但那是因为数据库管理员无法完成他的工作并优化关系型数据库。但再次强调,这只是我的经验。 - Federico Razzoli
好的,但你应该更深入地研究一下。例如,Redis可以用作缓存系统,或者Neo4J在混乱的数据结构方面可能具有有趣的性能。当然,这些都是特定的用例,通常涉及大数据,但仍然如此。 - LMeyer
嗯,是的,我不了解Neo4,但我同意关于Redis的观点。NoSQL是一个营销术语,它用于非常不同的软件项目。 - Federico Razzoli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接