当前,绝大多数核心系统采用oracle,DB2的存储过程来实现的,而且不可否认的是存储过程确实好用,一个几十次数据库读写操作需要应用与数据库间几十次的数据调用往返,编写成存储过程后,变成单次往返,可以提升性能和安全性,并降低时延。
但分布式数据库场景下实施存储过程存在很多难点,毕竟数据被分散到不同的分片上,存储过程在哪里执行?跨分片数据处理的存储过程如何实现?存储过程的业务调用路由如何实现?
又或者形成分布式存储过程?
几个问题:
1、为什么核心系统一般用存储过程
核心系统一般要求稳定性高、吞吐量大、延迟低、数据一致性高,而且同时有数据处理特别简单的特点。这就导致了最好不要跟数据库多次交互(减少获取数据量与网络开销),在数据节点上直接执行简单的业务计算,然后只返回计算结果,就是一个最好办法。这个办法常见的实现就是存储过程。
2、分布式数据库怎么做存储过程
先说结论:目前的分布式数据库or分布式数据中间件,一般来说不支持所谓的存储过程。
分布式数据库,一般都是通过可以直接数据复制和分片做水平扩容和高可用,这样带来了管理的复杂性和数据一致性的复杂性。可以采用复杂的分布式事务在应用层面来解决部分问题。
但是存储过程需要执行在底层的具体数据节点上,这就意味着依然需要在上层的业务逻辑层对多个不同数据节点的存储过程执行结果进行合并处理等进一步加工,大大提升了复杂性。同时对于大型的核心系统来说,数据库厂商提供的高配置的“单机“数据库通过不断提升配置来扩展是更简单可控的办法(成本不是问题)。毕竟做大型核心系统的公司,钱都不是问题,问题是周期、稳定性、强一致性和性能。
3、有没有其他方案
如果在互联网领域,抛开强一致性之类的约束,我们考虑像“存储过程”一样把数据和计算放到一起,提升性能,降低延迟,常见的还不少,比如:
● redis里,我们用lua片段在redis里处理数据
● mongodb里,我们用js函数传到server执行
● hazelcast/ignite/voltdb,直接用java写计算代码,放到数据节点去
更多产品了解
欢迎扫码加入云巴巴企业数字化交流服务群
产品交流、问题咨询、专业测评
都在这里!
2022-11-21 10:33:37
2021-12-16 14:22:32
2022-02-25 10:31:50
2020-03-18 16:49:26
2022-03-31 19:58:26
2022-11-22 11:06:21
甄选10000+数字化产品 为您免费使用
申请试用
评论列表