直接拿分布式数据库当载体,数据库里的函数暴露出来调用,数据库按业务分别建模,没有耦合,需要关系查询的时候,就是远程调用,这俩在业务里相当于同一件事,没有这个业务就相当于没有关系查询,连 sql,nosql 都不分了。
1
yidinghe 2019-09-27 00:32:49 +08:00 via Android
首先存储过程不能应对分布式存储,其次 SQL 语言缺乏封装。你可以试下:
建一张表,包含一个请求字段、一个回应字段再加上主键;写一个简单的程序往表里插入 HTTP 格式的请求,然后调用一个存储过程产生回应内容,然后取出来返回给浏览器,这就是一个简单的基于存储过程的 HTTP 服务器。你看你能利用存储过程将这个服务器实现到什么程度。 |
2
whileFalse 2019-09-27 00:34:05 +08:00 via iPhone
serverless 的优势是无限横向扩展。
能无限横向扩展的数据库如何保证强一致? |
3
YUyu101 OP @yidinghe 可以学 postgres 一样上别的语言写函数嘛,c,js,python 都可以。
|
4
YUyu101 OP @whileFalse 这是分布式本来要面对的问题,服务都拆分了,数据库不随着业务一起拆,那和水桶最短版一样了,数据库和业务接口合并作为最小单元,一致性由在代码中保证应该挺灵活吧,毕竟对外接口是你写的控制权在你手里,需要一致的地方一致,不需要一致的地方就缓存。我不是指业务要用 sql 实现,我想要数据库支持各种语言,自身变成一个自带存储,事务和服务的框架。
|
5
cassyfar 2019-09-27 06:02:30 +08:00
不太明白这样做的好处。
意思是数据库扛下所有商务计算?感觉很不现实。但是某些简单的项目,也有这个趋势。比如静态网站可以直接部署在 S3 上,然后前面只需要一个简单的 Gateway。没有任何 web service。但是这个设计没法应付复杂计算,毕竟这个计算量,总得有个地方扛下来,而数据库,其实大家都避免放太多运算量进去,no sql 整个就是一个 hashtable 了。 |
6
whileFalse 2019-09-27 07:51:21 +08:00 via iPhone
@YUyu101 所以你还记得存储过程是为了什么目的设计出来的吗。
如果只是说能随着 serverless 扩展的数据库,最接近的应该算是 cloudflare workers KV。这是一个非结构化数据库,对于每个 key 支持无限的读频率和每秒一次的写频率。 你觉得有多少业务能完全由这样的数据库支撑? |
7
murmur 2019-09-27 07:59:54 +08:00
答案是有的,真的有把业务全写进 sql 和存储过程的,美其名曰不重启热更新
|
8
liuxey 2019-09-27 08:07:08 +08:00
你好,有的,而且我们做过,然后没有然后了
|
9
passerbytiny 2019-09-27 08:36:40 +08:00
请先去了解一下分布式计算和分布式存储具体是什么,以及它们的区别,然后再去了解一下为什么人们不喜欢存储过程了。
|
10
guoyang 2019-09-27 08:39:04 +08:00
FaaS 层不只是 CRUD,并且微服务、SOA 模式的 RPC 如何解决,怎样做到水平扩展,这都是问题。虽然我个人很看好 Serverless,但是它的普及是需要强大的基础设施作为保障的,还有很长的路需要走。
|
11
LongMaoz 2019-09-27 09:27:46 +08:00
你好,我上家公司有的,业务全在存储过程里,后来进行修复 BUG 和业务变动的时候我当场辞职了
|
12
monsterxx03 2019-09-27 09:54:18 +08:00
几十年前的商业系统都是这么做的...后来嘛...
|
13
wysnylc 2019-09-27 10:34:25 +08:00
你好,只有你这么想
|
14
YUyu101 OP @cassyfar 是想减少通讯成本,函数做运算总要有数据源吧,数据不是从别的函数来就是从数据库来,大量计算 io 都在本地做掉是不是很好,如果不需要用到数据库更好了,连数据库都省了。
|
15
YUyu101 OP @LongMaoz 如果某天有一个数据库的存储过程可以用任何语言写,并且可以下断点调试,是不是就爽了。
|
17
YUyu101 OP @monsterxx03 但是他们都是往一个数据库里塞的吧,我是想存储过程塞到各自的本地存储里,互相之间远程调用。
|
18
acthtml 2019-09-27 13:59:28 +08:00
存储过程耦合业务,不利于需求变更。
你说的分布式数据库是有项目这么做的。 |
19
passerbytiny 2019-09-27 14:06:54 +08:00
散了吧,看楼主后面的回复,他说得是在本地( BS 模式的 B,CS 模式的 C,前后端的前端)运行的存储过程,这只存在于小孩子的想象,或者未来。
|
20
YUyu101 OP @passerbytiny 本地是指数据库所在服务器,不是客户端,客户端是消费服务的嘛。不然所有的函数要保存状态,要状态同步,不还得去调用存储服务嘛,与其假装无状态不如大家都有状态,要强一致就同步,不强一致就互相缓存
|