在具有MySQL与NoSQL的单个服务器上,Key-Value数据库是否存在高性能差异

Noa*_*oam 6 mysql database mongodb cassandra nosql

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

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

问题是,在尝试仍然避免分片数据的同时,并考虑到我使用RDMS MySQL作为简单的键值存储这一事实,两种方法之间的性能之间存在很大差异,还是NoSQL的主要优势在于转移到分布式系统?

Sam*_*aye 3

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

MongoDB 通常不是一种键值存储,并且已知在用作键值存储时会产生一定的性能影响。

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

它还专为 80% 读取应用程序而设计(据说这是当今网站最常见的设置),因此您执行的写入次数越多,您就越会注意到随着时间的推移性能下降。话虽如此,您可以调整 MongoDB 以使其更加适合写入,并且分布式特性确实有助于稍微阻止写入锁定饱和。

不过话虽这么说,我个人认为 MongoDB 从 SQL 的学习曲线:

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

我个人对一般问题的看法是它的分布式概念。如果您获得专为键值存储设计的 NoSQL 解决方案,那么它可能会非常好。在 Google 上快速搜索,在 Wikipedia 上找到了一小部分 NoSQL 键值存储: http: //en.wikipedia.org/wiki/NoSQL#Key-value_stores_on_solid_state_or_rotating_disk