MySQL和Redis都可以处理大量的并发请求,但具体的性能取决于应用程序的需求。MySQL的并发能力可以由它的QPS来衡量,而Redis的并发能力可以由它的QPS和KV存储来衡量。一般来说,MySQL的并发能力通常在每秒600次以上,而Redis的并发能力可以达到每秒1000次。
并发能力是指程序或问题的不同部分或单元可以乱序或部分执行的能力。
为给那些只为获得答案的看众节省时间。提前下个结论,mysql目前暂不具备并行运行某一查询的能力
。相信很多人有一个误解,似乎MySQL 5.4对某一查询带来的性能改进是非常巨大的。事实上,这需要针对具体应用来讲,如果追求某个具体查询的响应时间,5.4 将比5.1或之前的版本差。简单的来说,5.4提高的是并发量,而不是减少单条语句的执行时间。
初次看到这个话题的人要注意几个概念,并行和多线程不是同一个概念。“同时进行”的技术分很多类,有
查询间的并行,
查询内的并行和 *** 作内的并行
。举个生活中的例子,
如果你与其他人合租房子的话,早上起来后,多个人可以同时刷牙,洗脸和做饭,大家各忙各的(虽然女房客可能会给厕所加上mutex而其他人只能在原地spin)。单单这套房子来说,它在较短的时间内解决了好几个人的早上洗漱问题。这就是查询间并发了。
早上诸多行动中,以刷牙、做饭、吃饭这三个动作为例,我们通常的做法是把微波炉转上,然后刷牙,刷牙结束后,早饭也弄好了(至少我是这么做的),这样我们达到了查询内的并行。
再细化下去,现在加一个动作:整理电脑包,按照上一种方式我们可以按这样的顺序做事情:做饭刷牙 02 02 02—》 02 02 02吃饭 02 02 02 02 — -》02 整理电脑包
如果你有两只手的话,我们可以用一只手刷牙,另外一只手整理电脑包,这样进一步缩短你的运行时间,这样你就做到了 *** 作内的并行。
总结起来:第一种情况整体吞吐量很大,但个人的准备时间可能更长了。第二种情况,个人的处理时间减少了。 第三种情况,个人的处理时间进一步减少。
有兴趣的人可以在
database system concepts
这本书中了解相关概念。查询间的并行对于数据库管理软件来说是再正常不过的功能,所以下面我们将直接跳过这类“同时进行”。从理论上讲,数据库的多个模块:IO、SQL解析和SQL执行等都可以达到并行执行的目的。
通过将关系划分到多个磁盘来减少从磁盘检索关系所需的时间,从而使得数据库IO可以并行执行。另外在一个查询中的多个联接 *** 作和排序 *** 作也可并行发生。对等值联接和自然联接, 可以将两个输入关系划分到多个处理器上, 各处理器在本地计算联接.
当然以上讨论的一切一切都基于CPU是多核的。
但是目前我个人不支持mysql并行化,这也符合很大一部分mysql开发人员的意见。理由:
就mysql目前的应用来看,使用者更在意mysql数据库的吞吐量,而不是效应速度(当然了,响应速度也是很重要的)。mysql目前的简单架构replication可大幅提高数据库端的吞吐量。
目前现存的其他开源技术亦能满足并行查询的需求如hadoop、map reduce。
最后,我们还可以利用mysql proxy来达到并行的目的。查询在mysql proxy中被划分成多个部分,各个部分可在不同的mysql服务器上查询获得数据,再由mysql proxy合并返回给读者。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)