MySQL性能瓶颈优化:学习一下圆珠笔是如何发明的


Hornbill Literary Essay:在十九世纪三十年代的欧洲大陆,一种方便,价廉的圆珠笔开始在书记员,银行职员甚至是富商中流行起来。制笔工厂开始大量的生产圆珠笔。不久却发现圆珠笔市场严重萎缩。原因是圆珠笔前端的钢珠在长时间的书写后,因摩擦而变小继而脱落导致笔筒内的油泄露出来。弄的满纸油啧,给书写工作带来了极大的不便。人们开始厌烦圆珠笔,从而不在用它了。

一些科学家和工厂的设计师们开始为了改变“笔筒漏油”这种状况进行了大量的工作。其中一个科学家做了大量的实验。他实验了上千种不同的材料来做笔 前端的哪个“圆珠”,以求找到寿命最长的“圆珠”。但结果却不很理想。 这时一个叫马塞尔 比希的人却很好的将圆珠笔做了改善,解决了“漏油”的问 题。他的成功是得益于他的一个想法。“既然不能将圆珠笔的寿命很好的延长,那为什么不主动的控制圆珠笔的寿命呢?他所做的工作只是在实验中找到一颗“钢珠”所能完成书写的“最大用油量”。然后每支笔所装的”“油”都不超过这个“最大用油量”。 这样,方便,价廉又“卫生”的圆珠笔有成了人们最喜爱的书写工具之一。

如何解决复杂的问题:
1 寻找金刚钻:比如能有更长寿命的圆珠笔头“圆珠”:但这往往是目前大部分初创企业缺乏的核心技术;
2 改变问题本身,将大问题分解成已有成熟解决方案的小问题;

我经常被问到一个问题就是如何优化MySQL数据/Lucene全文索引的速度:
其实,如果一个MySQL记录数量在10万以上,如果已经做了索引优化,那么应用速度也就没有什么潜力可挖了,唯一能作的就是将最经常被访问的数据缓存起来:将应用做成快/慢表机制。让用户很少访问大量的旧数据放在一个慢表里。将用户经常访问的新数据放在一个高速的快表(只有数百数千条记录)里:可以是一个限制数量的小数据库,可以是更简单的非数据结构(DBM/Hash/纯文本)来快速存取。

类似的Lucene全文索引也有类似问题:我发现索引的量超过500M以后,速度开始有用户能感受到的速度下降,唯一能做的就是控制数据量:将索引分布成多个,并尽可能利用内存FS做将索引文件缓存到内存里。

千万不要小看硬件对于产品的影响,开发人员脑子里也要常想着“摩尔定律”。内存数据在5年前可能还是一个奢侈的想法,但是随着内存成本的下降,很多原先复杂的问题都可以在内存中实现了使得速度大大提高。目前的大型搜索引擎就是分布式集群技术/内存数据库技术的集中体现。过2年闪存很有可能会接近于硬盘的成本,这又是一个变革的机遇。

另外开发人员考虑问题的一种惯性思维就是“关系化数据库”思维:
数据库思维面向的是“精确”返回结果,但处理一个面向最终用户的百万级记录应用的时候,如果用户对于返回结果数量是10234还是10200已经不关心了,重要的就是将最好的TOP 10条结果以最快的速度返回给用户。

序列化是一个成本很高的事情,尤其是使用数据库,其实对于应用来说:能不用Oracle的就不用,可以用MySQL;能不用MySQL的就不用,用SQLite;能不用数据库的就不用数据库,用DBM/Hash,能不用DBM的就尽量不用DBM,用纯文本;能不序列化的就尽量不序列化:用内存。

如果你有一把好锤子而且很使用得很熟练了,那就尽可能将问题都变成钉子吧。

作者:车东 发表于:2005-08-19 15:08 最后更新于:2008-12-07 21:12
版权声明:可以转载,转载时请务必以超链接形式标明文章 的原始出处和作者信息及本版权声明

引用通告

以下是前来引用的链接: MySQL性能瓶颈优化:学习一下圆珠笔是如何发明的:

» 贪玩者每周一问:圆珠笔是如何发明的 来自 Post Show
逍遥小小曾经提出过要做一个每周一问的互动性的问答专帖,后来因为种种原因搁浅。今天alx突然又再一次将这个提议提了出来。因为恰好在车东那里看到了这个题目,虽然觉得挺缺乏新意的 [阅读更多细节]

» [转]圆珠笔是如何发明的 来自 一起来 - netwjx
http://www.chedong.com/blog/archives/000945.html 还有这里(是转自上面的,有一些回复) http://www.postshow.net/node/915   感谢chedong提供的信息 [阅读更多细节]

Comments

车东,我觉得,此文标题不对!

此文应该是讲“圆珠笔芯是如何发明的”,而不是圆珠笔最主要的组成那个圆珠和圆珠笔头是如何被人们想到这样设计的

有收获。
2个方法:
1,当一个问题在一个大范围中会成为一个大问题,那么缩小范围可以将问题缩小到最小。甚至忽略不计。
2,当你觉得一个问题是整个事件的关键的时候,那么这个关键dian一定有其他的一些问题制约。解决了其他问题,这个问题就应刃而解]

发表一个评论

(如果你此前从未在此 Blog 上发表过评论,则你的评论必须在 Blog 主人验证后才能显示,请你耐心等候。)