性能从哪里入手进行提升?

banq 16-05-31
              

性能提升有两个地方:数据库和应用程序。使用各种数据库优化的语句或者在我们应用代码中使用编程语言特性进行优化。

本周正好有三篇文章涉及这两个方面:
关系数据库层提升:SQL的group聚合与嵌套循环子查询的性能分析,该文讨论了基于Oracle数据库在对两个集合使用group by语句和嵌套循环的子查询语句这两种方式的对比,有时复杂性越高不代表性能越差,使用Join等联合多表查询虽然带来了性能提升,但是难以对这些多表进行分区sharding/partition分表都难以实现,横向扩展性比较差。

如果我们将视线转到应用程序代码层,无疑会碰到如何高效率利用CPU问题,高效率不代表霸占住CPU,不让CPU做其他事情,只专注自己的复杂计算,这种方式尤其在Node.js这样单线程架构中尤为敏感,Node.js CPU密集型的Join操作讨论了如何在Node.js应用层对两个集合进行匹配比较,这种做法有赖于语言提供的高性能API。

既然语言提供的高性能API非常重要,而目前并发性能比较好的不外乎Actor模型、协程/通道模型和Future/Promise模型,Skynet对几个Actor 协程和Future进行1M线程并发性能测试一文对Scala的Akka、Erlang、Go语言、Haskell、GHC以及Node.js等流行并发模型进行了简单测试。

这项测试缺少了Java并发库包,Quasar是提供类似Go绿色线程的Java纤程Fiber,comsat是用于Web开发的Java纤程Fiber和Actor模型,这篇英文文章提供了前面Skynet测试中类似Go语言的java Quasar实现代码:Go and Quasar: A Comparison of Style and Performance

[该贴被banq于2016-05-31 12:39修改过]

              

3