性能设计中的平衡-提防物极必反

这是一个非常有意思且非常发人深省的案例。

公司在做一个组件的时候,一开始就以追求最高效率为目标。因此在制定方案的时候,采用了全部在内存中操作,从而获取最佳效率。但是随着应用中的数据量的提升,效率在空间面前,越来越成为问题。

这个案例有意思的地方就是,最初是为了追求最好的效率,最后反而没有得到好的效率。但又反过来让我们来思考为什么会出现这种情况呢?

xiammy想到的的第一个问题在于:空间和时间的权衡。我们都学习过《算法与数据结构》,知道空间和时间往往就是一对矛盾体。在这个问题上,我们一开始就想追求极限的时间上的优势,对空间上的消耗可能带来的影响反而忽略了。这个问题就是,极限地追求效率,非常有可能会增加对空间的占用。

在一定意义上,时间和空间是可以转化的。爱因斯坦的相对论是这么说的,我们的程序设计也是这样的道理。所以我们在考虑时间的时候,必须考虑好我们是在多大的空间内考虑时间。

所以xiammy认为考虑效率的时候,同时必须定义空间的相对量。我们不应该抛离空间而单独追求时间。简单的说,追求的是1000条数据的效率,还是1,000,000条数据的效率。xiammy认为,不同的目标,其解决方案会有极大的不同。

就如前面案例中的所提到的,只是1000条,我完全可以全部装载到内存中,然后再进行优化。但如果是极大的数据量,那么一开始就必须放弃装载到内存中的想法。这里面还有一些微妙的地方,因为在最后的实际应用的压力下,最终的系统必然要解决大数据量的问题,架构也必然要重构。可能你会想到一句话:殊途同归。但是事实一般并不是这样。种下的种子总是会对后来的事情有影响的。况且,在已有的系统上进行重构,还会被现存的代码束缚,让你重构也不得畅快。

在说回到一个理念问题,我们如果一开始的时候就陷入到极限地追求效率上,反而应了那句话:物极必反。最后的效果反而不是最好。中国人的中庸思想在设计的时候还是有借鉴意义的。 

posted on 2007-09-30 07:16  ohmyjava  阅读(125)  评论(0编辑  收藏  举报

导航