首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
V2EX  ›  问与答

既然现在都搞 serverless,为什么不直接业务嵌入存储过程

  •  1
     
  •   YUyu101 · 70 天前 · 1971 次点击
    这是一个创建于 70 天前的主题,其中的信息可能已经有所发展或是发生改变。

    直接拿分布式数据库当载体,数据库里的函数暴露出来调用,数据库按业务分别建模,没有耦合,需要关系查询的时候,就是远程调用,这俩在业务里相当于同一件事,没有这个业务就相当于没有关系查询,连 sql,nosql 都不分了。

    20 回复  |  直到 2019-09-27 14:22:32 +08:00
        1
    yidinghe   70 天前 via Android
    首先存储过程不能应对分布式存储,其次 SQL 语言缺乏封装。你可以试下:

    建一张表,包含一个请求字段、一个回应字段再加上主键;写一个简单的程序往表里插入 HTTP 格式的请求,然后调用一个存储过程产生回应内容,然后取出来返回给浏览器,这就是一个简单的基于存储过程的 HTTP 服务器。你看你能利用存储过程将这个服务器实现到什么程度。
        2
    whileFalse   70 天前 via iPhone
    serverless 的优势是无限横向扩展。

    能无限横向扩展的数据库如何保证强一致?
        3
    YUyu101   70 天前 via Android
    @yidinghe 可以学 postgres 一样上别的语言写函数嘛,c,js,python 都可以。
        4
    YUyu101   70 天前 via Android
    @whileFalse 这是分布式本来要面对的问题,服务都拆分了,数据库不随着业务一起拆,那和水桶最短版一样了,数据库和业务接口合并作为最小单元,一致性由在代码中保证应该挺灵活吧,毕竟对外接口是你写的控制权在你手里,需要一致的地方一致,不需要一致的地方就缓存。我不是指业务要用 sql 实现,我想要数据库支持各种语言,自身变成一个自带存储,事务和服务的框架。
        5
    cassyfar   70 天前
    不太明白这样做的好处。

    意思是数据库扛下所有商务计算?感觉很不现实。但是某些简单的项目,也有这个趋势。比如静态网站可以直接部署在 S3 上,然后前面只需要一个简单的 Gateway。没有任何 web service。但是这个设计没法应付复杂计算,毕竟这个计算量,总得有个地方扛下来,而数据库,其实大家都避免放太多运算量进去,no sql 整个就是一个 hashtable 了。
        6
    whileFalse   70 天前 via iPhone
    @YUyu101 所以你还记得存储过程是为了什么目的设计出来的吗。
    如果只是说能随着 serverless 扩展的数据库,最接近的应该算是 cloudflare workers KV。这是一个非结构化数据库,对于每个 key 支持无限的读频率和每秒一次的写频率。

    你觉得有多少业务能完全由这样的数据库支撑?
        7
    murmur   70 天前
    答案是有的,真的有把业务全写进 sql 和存储过程的,美其名曰不重启热更新
        8
    liuxey   70 天前
    你好,有的,而且我们做过,然后没有然后了
        9
    passerbytiny   70 天前
    请先去了解一下分布式计算和分布式存储具体是什么,以及它们的区别,然后再去了解一下为什么人们不喜欢存储过程了。
        10
    guoyang   70 天前
    FaaS 层不只是 CRUD,并且微服务、SOA 模式的 RPC 如何解决,怎样做到水平扩展,这都是问题。虽然我个人很看好 Serverless,但是它的普及是需要强大的基础设施作为保障的,还有很长的路需要走。
        11
    LongMaoz   70 天前
    你好,我上家公司有的,业务全在存储过程里,后来进行修复 BUG 和业务变动的时候我当场辞职了
        12
    monsterxx03   70 天前
    几十年前的商业系统都是这么做的...后来嘛...
        13
    wysnylc   70 天前
    你好,只有你这么想
        14
    YUyu101   70 天前 via Android
    @cassyfar 是想减少通讯成本,函数做运算总要有数据源吧,数据不是从别的函数来就是从数据库来,大量计算 io 都在本地做掉是不是很好,如果不需要用到数据库更好了,连数据库都省了。
        15
    YUyu101   70 天前 via Android
    @LongMaoz 如果某天有一个数据库的存储过程可以用任何语言写,并且可以下断点调试,是不是就爽了。
        16
    huijiewei   70 天前 via iPhone
    @YUyu101 sql server 十几年前就可以了,然而没有然而了
        17
    YUyu101   70 天前 via Android
    @monsterxx03 但是他们都是往一个数据库里塞的吧,我是想存储过程塞到各自的本地存储里,互相之间远程调用。
        18
    acthtml   70 天前
    存储过程耦合业务,不利于需求变更。
    你说的分布式数据库是有项目这么做的。
        19
    passerbytiny   70 天前
    散了吧,看楼主后面的回复,他说得是在本地( BS 模式的 B,CS 模式的 C,前后端的前端)运行的存储过程,这只存在于小孩子的想象,或者未来。
        20
    YUyu101   70 天前
    @passerbytiny 本地是指数据库所在服务器,不是客户端,客户端是消费服务的嘛。不然所有的函数要保存状态,要状态同步,不还得去调用存储服务嘛,与其假装无状态不如大家都有状态,要强一致就同步,不强一致就互相缓存
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2347 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 25ms · UTC 13:42 · PVG 21:42 · LAX 05:42 · JFK 08:42
    ♥ Do have faith in what you're doing.