V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Chad0000
V2EX  ›  数据库

有一个大胆的想法

  •  
  •   Chad0000 · 2023-11-01 16:47:43 +08:00 · 2099 次点击
    这是一个创建于 387 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在设计系统,在数据库方面,结合 CQRS ,我有一个大胆的想法:

    • 所有模块有自己私有的数据表
    • 模块主要负责:CUD
    • 模块提供有限 R:根据 Id 返回详情+Id 遍历
    • 所有查询全部通过查询 DB 提供
    • 查询 DB 通过订阅模块的事件去同步更新,或根据 Id 重建
    • 查询 DB 仅包括在列表中的数据(详情则去模块)
    • 查询如果多一列后,则需要去原模块根据 Id 重新抓取更新
    • 新的查询也一样需要有构建数据的过程:这个时间可能会更长

    好处

    • 模块可完全独立
    • 查询性能会更好
    • 模块修改基本上不会影响其他

    弊端

    • 数据延迟
    • 数据同步的可靠性
    第 1 条附言  ·  70 天前
    我没攻击人也没违反什么就给我降权?要么删除此帖要么转水深火热。
    /t/1072723

    14 条回复    2023-11-02 09:16:26 +08:00
    mars2023
        1
    mars2023  
       2023-11-01 16:54:21 +08:00
    没看明白;不过感觉有点类似微服务的设计?
    bugsnail
        2
    bugsnail  
       2023-11-01 16:54:36 +08:00
    你这个就是 SAAS
    vacuitym
        3
    vacuitym  
       2023-11-01 17:00:03 +08:00
    这就是微服务吧,跨模块业务要是没整理好会成为灾难
    sumarker
        4
    sumarker  
       2023-11-01 17:00:04 +08:00
    你可能在找 “数据库的读写分离”
    tanxnative
        5
    tanxnative  
       2023-11-01 17:02:43 +08:00
    你是不是在找 flink stateful function, dgraph ?
    shenjinpeng
        6
    shenjinpeng  
       2023-11-01 17:05:08 +08:00
    数据库中间件 ?
    Chad0000
        7
    Chad0000  
    OP
       2023-11-01 17:10:05 +08:00
    @mars2023 #1
    嗯,就是类似微服务的设计。但我想把这个设计变成基础设施/约束,即平台本身就是这样设计的。
    Chad0000
        8
    Chad0000  
    OP
       2023-11-01 17:11:30 +08:00
    @vacuitym #3
    对,我的设计是想让每个模块都是完全独立不依赖其他模块,所以跨模块可能影响没那么大。
    Chad0000
        9
    Chad0000  
    OP
       2023-11-01 17:12:54 +08:00
    @sumarker #4
    数据库读写分离我知道,它能提升性能,但无法做到隔离影响,即模块自己的表修改后,相应的跨表查询之类全部都会受影响。

    甚至有些特殊场景,比如查询性能要求高,那么原数据库和查询数据库可能就不是一种数据库。
    Chad0000
        10
    Chad0000  
    OP
       2023-11-01 17:16:14 +08:00
    @shenjinpeng #6
    不做中间件,是想设计一套框架直接就约束每个模块这样做。
    Chad0000
        11
    Chad0000  
    OP
       2023-11-01 17:18:56 +08:00
    @tanxnative #5
    flink stateful function 。这个东西有用,后者暂时应该没用。
    sumarker
        12
    sumarker  
       2023-11-01 17:22:34 +08:00
    @Chad0000 #9
    如果中间有处理的过程(比如非全部字段同步),延迟是必然的,所以需要业务有一定的“容忍度”
    但这其实并不影响,首先你有一个业务的写库,然后有一个读库,读库作为中间库做一层 DWD ( data warehouse details 细节数据层,是业务层与数据仓库的隔离层。主要对 ODS 数据层做一些数据清洗和规范化的操作)
    xuanbg
        13
    xuanbg  
       2023-11-02 08:36:41 +08:00
    这不就是微服务+读写分离?哪里大胆了???
    Chad0000
        14
    Chad0000  
    OP
       2023-11-02 09:16:26 +08:00
    @xuanbg #13
    好吧,确实不够大胆。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2918 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 08:02 · PVG 16:02 · LAX 00:02 · JFK 03:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.