云时代,我们需要PostgreSQL,需要服务端编程
背景
云为我们提供了便利,降低了开发和运维的成本。
但是也必须思考一个问题,我们的云组件之间的的网络延迟?
(相比较局域网的服务器和服务器之间)
你可以用各种方法测试验证一下。
以往我们把数据放在数据库,数据库只提供简单的增删改查,大部分的业务逻辑放在应用服务器来完成。
但是在云时代,如果我们还这样的话,应用服务器和数据库间如果多次交互,会浪费大量的时间。
我们应该充分利用数据库的编程能力,例如PostgreSQL,是一个功能非常强大的数据库,我们完全可以把业务逻辑放在数据库处理,
例如使用plv8, plpython, plpgsql, plperl, pltcl等函数语言,
数据类型支持也非常的丰富,例如jsonb, GIS, text, 异构类型,Key-Value类型…等,
索引支持btree, hash, gin , gist, spgist, brin等索引类型,
SQL语法层面支持 窗口查询,递归查询,grouping set, 等高级语法。
JOIN方面,支持hash join , merge join , nestloop join ,
优化器方面,支持自定义成本因子, CBO , 遗传算法等。
另外PostgreSQL更强大之处,可以利用GPU加速运算,包括隐式加速,也可以显示加速。
隐式指数据库自身提供的custom scan provider编程接口,已经有实现了的插件。
显式,指的是过程语言和CUDA的结合,例如PyCUDA。
还可以用Julia来方便的实现并行编程。
PostgreSQL完全可以满足大多数业务的需求。
功能如此强大的数据库,只用来做增删改查,是不是有点浪费呢,充分利用它的功能,当网络是瓶颈的时候,让业务逻辑和数据靠近,可以大大提升效率,降低RT。mapreduce也是这种思想。
当然,另一方面,我们还需要考虑业务和数据的耦合,太耦合了也不好。