在我的PHP应用程序中,我在一台服务器上的MysqL MyISAM分区表中有一个重达200GB的470M行表.用法包括70%写入/ 30%读取.
我正在努力提高性能.目前的主要问题是由于表级锁定导致的读/写争用.我试图在两个选项之间做出决定:
>将MysqL更改为Innodb.优点:避免表级锁定.缺点:更多的磁盘空间,需要更大的HD,可能没有这些快(目前使用RAID10 6 * 300GB SAS 15k).
>将数据移动到Nosql数据库.主要内容:学习曲线.之前从未使用过Nosql.
问题是,在尝试仍然避免分片数据的同时,并考虑到我使用RDMS MysqL作为简单的键值存储这一事实,两种方法之间的性能之间存在很大差异,还是Nosql的主要优势在于转移到分布式系统?
MongoDB通常不是键值存储,并且在用作一个时已知具有某些性能命中.
MongoDb在这里也有一个锁定问题,可能会再次困扰你.它有一个DB级锁定atm,这意味着它可能(需要测试)导致写锁定饱和.
它也专为80%的阅读应用程序而设计(据说这是现在最常见的网站设置),因此您执行的写入越多,您会发现性能随着时间的推移而下降的越多.话虽如此,你可以调整MongoDB以使其更加友好,分布式特性确实有助于阻止写入锁定饱和度.
然而,我个人认为从sql的MongoDB的学习曲线:
>接下来是null
>比sql更自然,更简单地实现到我的应用程序中
>查询语言很简单,很容易掌握
>查询语言与sql有很多相似之处
>驱动程序是标准化的,因此您在控制台中的JS驱动程序文档中看到的语法是一致的.
我对一般事项的个人意见是它的分布式概念.如果您获得了为键值存储设计的Nosql解决方案,那么它可能非常好.谷歌的快速搜索在维基百科上搜索了一小部分Nosql键值存储:http://en.wikipedia.org/wiki/NoSQL#Key-value_stores_on_solid_state_or_rotating_disk