使用MySQL和NoSQL的单个服务器上的Key-Value数据库是否存在高性能差异



在我的PHP应用程序中,我在一台服务器上的MySQL MyISAM分区表中有一个470M行的表,重200GB。使用包括70%的写入/30%的读取。我正在努力提高表现。当前的主要问题是由于表级别的锁定导致的读/写争用。我正试图在两种选择之间做出决定:

  1. 将MySQL更改为Innodb。优点:避免表级别的锁定。缺点:更多的磁盘空间,需要更大的硬盘,可能没有这些硬盘快(目前使用RAID10 6*300GB SAS 15k)
  2. 正在将数据移动到NoSQL数据库。主要缺点:学习曲线。以前从未使用过NoSQL

问题是,在尽量避免数据分片的同时,考虑到我使用RDMS MySQL作为一个简单的键值存储,这两种方法之间的性能是否存在很大差异,或者NoSQL的主要优势是在转移到分布式系统时出现的?

我只能部分回答你的问题,但希望不仅仅是评论。

MongoDB通常不是一个键值存储,并且众所周知,当它作为一个存储使用时,会有一定的性能命中率。

MongoDb在这里也有一个锁定问题,可能会再次困扰你。它有一个DB级别的锁定atm,这意味着它可能(需要测试)导致写锁定饱和。

它还专门为80%的阅读率应用程序设计(据说这是目前网站最常见的设置),所以你写的越多,你就会注意到性能会随着时间的推移而下降。话虽如此,您可以调整MongoDB,使其更易于编写,分布式特性确实有助于稍微停止写锁饱和。

然而,话虽如此,我个人认为MongoDB从SQL:的学习曲线

  • null旁边
  • 与SQL相比,在我的应用程序中实现更自然、更简单
  • 查询语言很简单,非常容易掌握
  • 查询语言与SQL有很多相似之处
  • 驱动程序是标准化的,因此您在控制台中JS驱动程序的文档中看到的语法是一致的

我个人对一般问题的看法是分布式概念。如果你有一个为键值存储设计的NoSQL解决方案,那么它可能真的很好。在谷歌上快速搜索维基百科上的NoSQL键值存储列表:http://en.wikipedia.org/wiki/NoSQL#Key-value_stores_on_solid_state_or_rotating_disk

最新更新