6

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

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

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

4

1 回答 1

3

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

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

MongoDb 在这里也有一个锁定问题,可能会再次困扰您。它有一个 DB 级锁 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

于 2012-09-25T10:21:03.033 回答