功能分区:在许多环境中,单独的MySQL实例变成了各种数据库的倾销之所。你可能最终让你的主应用与Drupal共享一个数据库实例,用WordPress增强你的站点,用vBulletin增强你的博客,甚至论坛。把所有这些应用碎片分入不同的数据库实例是你首先应该考虑的,而不是直接考虑分片。客户定制系统经常有不同数据集的应用,所以这个分法很容易实现。
复制:许多应用都是“读操作”的压力大,而扩展读操作性能要比扩展写性能更容易一些。如果是这种情况,那么复制就是非常好的选择。MySQL有自带的复制功能非常健壮,虽然其异步特性增加了应用的复杂性。这种情况下,开发人员必须判断从哪台复制服务器上读取信息,不可以从哪里获取。因为你必须绝对保证你读取到的是最新的实际数据。这也正是针对MySQL出现的可替代的异步复制技术广受欢迎的原因(例如PerconaXtraDB)。这些工具把大部分集群环境下的功能提供给向单个数据库操作的能力。
缓存和队列:缓存是降低数据库读取量的出色技术。有许多应用使用这种技术可以降低数据库读负载高达80-95%。与之相对的是队列,它是用来优化写操作的。通过合并多次写操作,提高了对数据库操作的效率。大部分大型应用都应该重点考虑这两种技术。Memcached和Redis是MySQL领域非常流行的两种缓存技术。对于队列,最流行的技术是ActiveMQ和RabbitMQ。
外部支持技术:MySQL在很多方面都很出色,但也不是所有方面都强。如果你需要高性能全文检索,应该考虑ElasticSearch、Sphinx或者Lucene。如果你想做大规模数据分析,可以考虑基于Hadoop的基础架构或者Vertica也是不错的选择。你应该让MySQL处理它擅长的事,把其它事留给外部支持工具来做。
http://www.searchdatabase.com.cn/showcontent_88808.htm