数据量较大,数据库选型问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
afeiche

数据量较大,数据库选型问题

  •  
  •   afeiche Jan 11, 2024 19202 views
    This topic created in 839 days ago, the information mentioned may be changed or developed.

    接了个新项目,数据量大概上亿,业务类型主要是订单数据,插入为主,简单的查询和统计,按公司传统的方案要不就是上 mycat,或者用 Sharding-JDBC,这些在公司内部都有一定的使用量的,不过个人想看看其他方案,简单做了一下调研,有几个备选: 1.GreenPlum ,开源,支持 OLTP 和 OLAP ,分布式数据库, 2.TiDB,公司其他项目有使用,据说对磁盘有一定的要求。 3.Oceanbase ,开源 不知道各位有没有相关的建议和使用经验。

    146 replies    2024-04-03 16:35:40 +08:00
    1  2  
    JIAOSHOUv587
        1
    JIAOSHOUv587  
       Jan 11, 2024
    Sharding-JDBC 投一票
    RangerWolf
        2
    RangerWolf  
       Jan 11, 2024
    你们调研过 clickhouse 嘛?
    opengps
        3
    opengps  
       Jan 11, 2024
    数据量达到一定的级别,自然就是硬盘越快越好
    afeiche
        4
    afeiche  
    OP
       Jan 11, 2024
    @RangerWolf clickhouse 不是分析的吗,我们就简单查询和统计,写入的时候有事务要求的
    KAKARTTO
        5
    KAKARTTO  
       Jan 11, 2024
    只是简单的插入和查询, mysql 妥妥够用的.
    afeiche
        6
    afeiche  
    OP
       Jan 11, 2024
    @KAKARTTO 单表上亿,mysql 能支撑?
    RangerWolf
        7
    RangerWolf  
       Jan 11, 2024   4
    我们这是 mysql + clickhouse
    用 mysql 做事务性的写入,然后同步到 clickhouse
    蛮多数据的,好几张上亿条数据的表
    因为统计分析比较多,mysql 完全扛不住
    @afeiche
    RangerWolf
        8
    RangerWolf  
       Jan 11, 2024   1
    我之前用过托管的 TiDB ,反正统计分析性能被 Clickhouse 甩出几条街,其他的不好说,但是都不看好。
    还是看你们的需求
    FightPig
        9
    FightPig  
       Jan 11, 2024   1
    我们用的 pg ,不过有的查询已经挺慢了
    haimianbihdata
        10
    haimianbihdata  
       Jan 11, 2024 via Android
    用 doris 吧。
    F281M6Dh8DXpD1g2
        11
    F281M6Dh8DXpD1g2  
       Jan 11, 2024   4
    你不知道用啥就 postgresql 完事
    div id="r_14193386" class="cell">
    KAKARTTO
        12
    KAKARTTO  
       Jan 11, 2024
    @afeiche 单表的话确实费点劲了
    adoal
        13
    adoal  
       Jan 11, 2024
    几亿的数据量,不复杂,很可能传统的单机数据库用好了就够。
    adoal
        14
    adoal  
       Jan 11, 2024
    不复杂是说库结构不复杂
    nm1st
        15
    nm1st  
       Jan 11, 2024
    doris 投一票
    Jack66
        16
    Jack66  
       Jan 11, 2024
    porlardb
    dululu
        17
    dululu  
       Jan 11, 2024
    这种不属于业务问题的头疼问题,自然就找个啥都能干性价比有高的数据库云服务公司甩出去,比如这个: https://apecloud.cn/
    hemingway
        18
    hemingway  
       Jan 11, 2024
    mysql 或者 postgresql 加上分库分表
    postgresql 有成熟的方案 citus
    kuituosi
        19
    kuituosi  
       Jan 11, 2024   3
    mycat: 太古老了,而且没人修 bug ,觉得不会出现新 bug 的话偷懒可以用
    Sharding-JDBC: 万金油解决方案,开源的首选,没有比这个更好的了。有更好的都是闭源
    GreenPlum:貌似偏向分析的,不太推荐
    TiDB:太耗机器了,有钱人首选
    Oceanbase:没有完全开源,也非常耗机器,有钱人考虑
    xieren58
        20
    xieren58  
       Jan 11, 2024
    postgresql
    chengquan17
        21
    chengquan17  
       Jan 11, 2024
    Greenplum 没有啥并发能力,不支持 OLTP ,就是个数仓
    seanxx
        22
    seanxx  
       Jan 11, 2024
    mycat 没问题,用过好几年,没什么大坑
    dobelee
        23
    dobelee  
       Jan 11, 2024   1
    如果没有频繁复杂查询的话 mysql 毫无压力。
    G64q9J89mN5KSgmE
        24
    G64q9J89mN5KSgmE  
       Jan 11, 2024
    写入和分析分开,放一起不是自找麻烦吗
    上面 mysql+clickhouse 的方案,我现在也在用
    mysql 冷热分离,clickhouse 单机 32gb 足够了
    sadfQED2
        25
    sadfQED2  
       Jan 11, 2024 via Android   3
    你得说下你具体的查询逻辑啊。你也别小看 MySQL ,上亿数据算啥,我之前在头部前三的商城负责订单业务,就是 MySQL 单表存上亿数据啊

    1.如果需要事物,无脑 MySQL Oracle pg 三选一
    2.不需要事物,是否需要实时性?需要,ck sr doris 三选一,看你需求。不需要,走离线数仓那一套
    3.c 端高 qps 查询,es
    rekulas
        26
    rekulas  
       Jan 11, 2024
    歪一个 其实 mysql 单表不建议上亿是上古时代的说法,现代硬件和数据库版本完全能支撑,我们几千万的表用起来跟普通表基本没什么区别,做好索引就行
    afeiche
        27
    afeiche  
    OP
       Jan 11, 2024
    @Jack66
    @dululu 我们是国企,肯定不能上公有云,得在自己的 IDC 中部署

    @haimianbihdata
    @nm1st doris 看了一眼,OLAP 的,应该不太符合要求


    @kuituosi 总结的好
    @RangerWolf
    @ddkk1112
    @sadfQED2 感觉可以用 mysql 或者 pg ,按年或者按季度分表,然后汇总到 clickhouse 里面统计查询
    nothingistrue
        28
    nothingistrue  
       Jan 11, 2024   2
    mycat 、Sharding-JDBC 这都是数据库代理/高层封装,不是原生数据库,他们的背后还是 mysql 、postgresql 。
    Greenplum 初步看介绍,是大数据平台,它的背后可能是 HDFS 。
    TiDB 初步看介绍,它就是 MySQL 的二开。(这货用二阶段提交来做分布式强一致性,实际使用效果真得存疑)。
    Oceanbase 就是个黑盒,除了早期版本能明确是 MySQL 魔改外,现在没人知道它是什么。(实际使用起来,它就是个渣滓,你用 Mysql 模式它有 Mysql 旧版本的遗留 BUG ,你用 Oracle 模式它有 Oracle 旧版本的遗留 BUG 。)

    你这备选方案,压根就不像再做技术选型。我觉得你应该先做好概要设计,或者技术方案分析之后,再来考虑数据库基础设施选型。如果遵循经验原则,如果你新项目跟旧项目没有明显出入,那么继续使用 mycat 、Sharding-JDBC 才是最优解。如果有出入,或者 mycat 、Sharding-JDBC 已经有明确记录的问题点,那么就应该先把出入点和问题点做出来,然后针对这些点再做后面的选型。
    sadfQED2
        29
    sadfQED2  
       Jan 11, 2024 via Android
    @afeiche 自己部署的话,你们有 flink olap 运维吗,这一套可不轻,没专业的运维别轻易选。

    olap 不能单纯的当成数据库用,没大数据那一套生态,做任何东西都十分难受。而且没专业的运维调优的话,性能天差地别。
    Worldispow
        30
    Worldispow  
       Jan 11, 2024   1
    不考虑成本的话,最好上商业数据库,不为别的,只为早点下班。
    afeiche
        31
    afeiche  
    OP
       Jan 11, 2024
    @nothingistrue 按旧方案是可以,不过就是想看看其他方案,一方面是扩展一下自己的知识面,另一方面给简历加点内容,哈哈哈

    @sadfQED2 这个确实得考虑运维的问题


    @Worldispow 公司不太愿意买商业的,除非系统能赚大钱。
    daiv
        32
    daiv  
       Jan 11, 2024
    如果 kv 的话, 可以看看 https://github.com/OpenAtomFoundation/pika
        33
    q11391  
       Jan 11, 2024
    mysql + doris
    mightybruce
        34
    mightybruce  
       Jan 11, 2024   1
    你们的业务是 OLTP 为主, 仅仅是数据量的话,这些方案都不需要,直接建 mysql 分区表,数据量和并发、吞吐量不是一回事。
    如果是面向用户的较高并发简单点就是 Sharding-JDBC ,不过依然会存在各种不兼容要修改代码的问题,分库分表的限制也是不少的。
    分布式数据库也有很多种选择, 一般分为两类,一类是 NewSQL, 另一类是 PG-XC ,NewSQL 包含 oceanbase, tidb.

    可以考虑一些 PG-XC 的数据库,是在传统关系型数据库,增加了切片集群,增加了协调节点,增加了全局时钟,性能比较稳定,也比较接近分库分表。
    一般有如下几个
    腾讯的 TBase
    华为的 GuassDB 300
    zhangxudong
        35
    zhangxudong  
       Jan 11, 2024
    mysql 加分区表应该就够了
    brader
        36
    brader  
       Jan 11, 2024
    查询统计 clickhouse 可以
    kingmo888
        37
    kingmo888  
       Jan 11, 2024
    @afeiche postgresql 单表 10 亿,没啥毛病
    Gimorocun
        38
    Gimorocun  
       Jan 11, 2024
    clickhouse
    Gimorocun
        39
    Gimorocun  
       Jan 11, 2024
    百亿级别数据没问题
    meeop
        40
    meeop  
       Jan 11, 2024
    上亿的话,所有数据库都可以,这并不算大数据
    PythonYXY
        41
    PythonYXY  
       Jan 11, 2024
    订单数据这种核心数据就别考虑 TiDB 了。

    你们现在的流量不是特别大的话 MySQL 分表足以,相关的成熟方案也很多。

    统计分析就通过 binlog 导出到 hive 或者 es 就行。

    还是尽量选公司内部相关基建更完善的方案。
    june4
        42
    june4  
       Jan 11, 2024
    我的垃圾 vps 上的 mysql 数据就有上亿,完全没发现任何性能问题
    只要索引设计好不搞全表/大范围无效扫描,几亿数据完全没问题
    且现在的 nvme ,比以前的硬盘快不知道到哪里去了,别纠结以前的老套路
    coinbase
        43
    coinbase  
       Jan 11, 2024
    postgresql + citus 千亿都没问题
    guo4224
        44
    guo4224  
       Jan 11, 2024
    Timescale 看看?
    netnr
        45
    netnr  
       Jan 11, 2024 via Android
    duckdb 也可以调研一下,支持事物
    xmh51
        46
    xmh51  
       Jan 11, 2024
    mysql 就好了 sdk 可以使用 shardingsphere 分库分表。
    markyangd
        47
    markyangd  
       Jan 11, 2024
    数据插入进 MySQL ,然后利用 MaterializeMySQL 同步到 ClickHouse ,查询到 ClickHouse 。
    lujiaxing
        48
    lujiaxing  
       Jan 11, 2024
    几个亿而已...

    PostgreSQL 了解一下?
    ychost
        49
    ychost  
       Jan 11, 2024
    才上亿,GP 肯定没问题
    konakona
        50
    konakona  
       Jan 11, 2024   1
    简单的数据查询用关系型数据库在这种体量的数据面前显得那么的柔弱……推荐一波 mongodb 。
    MonkeyJon
        51
    MonkeyJon  
       Jan 11, 2024
    postgresql
    cutchop
        52
    cutchop  
       Jan 11, 2024
    NoSQL
    happy32199
        53
    happy32199  
       Jan 11, 2024 via iPhone
    10 亿内 用 mysql 走索引很快的 分库分表都不要
    要是多台数据库服务器 就随意了
    fy1993
        54
    fy1993  
       Jan 11, 2024
    Doris ?
    lycongtou
        55
    lycongtou  
       Jan 11, 2024
    postgresql
    liuhan907
        57
    liuhan907  
       Jan 11, 2024
    @nothingistrue TiDB 倒不是 mysql 二开,rust+go 写的东西,怎么可能是 mysql 这个东西的二开呢 -_-
    ZZ74
        58
    ZZ74  
       Jan 11, 2024
    @sadfQED2
    不要拿大厂和中小公司比,码农的水平有差距 会导致数据库表现有很大差距。
    我经历过一家小公司,MySQL 2KW 的数据查询都慢了 就开始分库分表了。 一看那表结构设计和查询语句 就呵呵呵了
    LeegoYih
        59
    LeegoYih  
       Jan 11, 2024
    我们现在项目 MySQL 192g 内存,单表 2 亿数据,索引查询很快, 把数据都读到内存就完事了
    Itesting
        60
    Itesting  
       Jan 11, 2024
    如果只是数据量的话单机 mysql 够用了,可以看下单机 mysql 能不能扛得住这个写入量,个人觉得不到 1 亿数据没必要因为数据大小来进行复杂的分库分表,配合历史数据归档走就行了。
    RangerWolf
        61
    RangerWolf  
       Jan 11, 2024
    @afeiche 如果你已经汇总统计好了,感觉更没必要放 clickhouse 了,一般汇总之后数据量小了很多,性能要求不是很变态的话 mysql 应该也可以了

    感觉 op 可以先试试看纯 mysql ,mock 生成足量数据,看看是否能满足你们的要求。如果没法满足再多一个 clickhouse
    dululu
        62
    dululu  
       Jan 11, 2024
    @afeiche https://apecloud.cn 这个是支持 IDC 私有化部署的。
    ManjusakaL
        63
    ManjusakaL  
       Jan 11, 2024
    @nothingistrue 你这算不算验证你的 ID 了 nothingistrue (,TiDB 什么时候变成 MySQL 的二开了,我们这几百 T 的 TiDB 付费集群(本人也业余时间写点 TiDB 的东西),咋没发现 MySQL 的 Codebase 呢,求点内幕消息.jpg
    kanepan19
        64
    kanepan19  
       Jan 11, 2024   1
    一亿订单, 单库单表都顶得住
    unregister
        65
    unregister  
       Jan 11, 2024
    感觉 sharding - jdbc 就是会出问题。
    cutiechi
        66
    cutiechi  
       Jan 11, 2024
    StarRocks 这么点数据量 MySQL 都行
    lance6716
        67
    lance6716  
       Jan 11, 2024 via Android
    tidb 可以在 asktug 社区寻求帮助
    iyaozhen
        68
    iyaozhen  
       Jan 11, 2024
    提个我之前用过的方案,表分区。
    MySQL 有个缺点就是不能自动加分区,需要停机加
    trio
        69
    trio  
       Jan 11, 2024
    tidb
    dddys
        70
    dddys  
       Jan 11, 2024
    psql
    me1onsoda
        71
    me1onsoa  
       Jan 11, 2024
    做冷热处理,MySQL pg 都行。分库分表妥妥的垃圾
    iseki
        72
    iseki  
       Jan 12, 2024 via Android
    单机搞定的话,PostgreSQL 。如果是大宽表低频率的分析,再考虑 ClickHouse 单机版这种事
    dayeye2006199
        73
    dayeye2006199  
       Jan 12, 2024 via Android
    先 scale up 再 scale out ,上来就 scale out 就是自找麻烦。
    securityCoding
        74
    securityCoding  
       Jan 12, 2024 via Android
    读少的场景一个亿数据分啥表,干就完了
    marveling
        75
    marveling  
       Jan 12, 2024 via iPhone
    @afeiche 加好索引,简单查询是没什么问题
    java123
        76
    java123  
       Jan 12, 2024
    oracle ,简单稳定
    shinession
        77
    shinession  
       Jan 12, 2024
    亿级上 postgresql 或者 Oracle, 单机都行
    coinbase
        78
    coinbase  
       Jan 12, 2024
    postgresql + citus 吊打 TiDB, 吊打 clickhouse,吊打 Sharding-JDBC
    ShuWei
        79
    ShuWei  
       Jan 12, 2024
    mysql/pg 其实都可以承载的,根据具体场景做一些索引优化、分区分表之类的,再多关注一下 sql 语句的写法,问题不太大一般
    xshell
        80
    xshell  
       Jan 12, 2024
    PG
    chunworkhard
        81
    chunworkhard  
       Jan 12, 2024
    可以存 mysql 里,来控制事务, 并将业务实时同步到 Clickhouse 中进行查询分析,Clickhouse 开发学习成本很低, 只要会 mysql 轻松应用
    ShinichiYao
        82
    ShinichiYao  
       Jan 12, 2024   1
    MySQL 跑了十几年了,最大的表 15 亿多数据,稳定性就一句话:操作系统崩了它都没崩
    avalon8
        83
    avalon8  
       Jan 12, 2024
    doris
    miniliuke
        84
    miniliuke  
       Jan 12, 2024
    简单查询加插入用 PG 库,统计分析数据导到 Doris 里面分析
    ydpro
        85
    ydpro  
       Jan 12, 2024
    现在阿里云的 RDS MySql 无法支撑单表上亿吗?
    huguang3320
        86
    huguang3320  
       Jan 12, 2024
    @ydpro 我们原单位用的就是阿里云的 RDS ,DRDS 还有 ADS ,还挺好用的
    15342
        87
    15342  
       Jan 12, 2024
    @RangerWolf 你们怎么保证 2 边数据一致的?
    nothingistrue
        88
    nothingistrue  
       Jan 12, 2024
    @liuhan907 #57
    @ManjusakaL #63

    https://zh.wikipedia.org/wiki/TiDB

    本来二开也没啥丢脸的,你们非要让他往 阿里云 OS 、鸿蒙这一类上面靠。
    QlanQ
        89
    QlanQ  
       Jan 12, 2024
    上亿数据用 MySQL 一点问题都不会有
    bruce0
        90
    bruce0  
       Jan 12, 2024
    看是否有 ACID 的事务要求, 如果没有, 并且数据可以支持 KV 类型的话, 感觉 基于 rocksdb 开发的很多数据库挺合适的, rocksdb 天生 对于写入友好. 推荐一下 pika, 今年社区发展挺快的, 而且有大公司在用,(360, 微博, 喜马拉雅等) 稳定性相对有保证. 支持集群部署, 几个亿的数据完全不在话下, 现在支持内置内存级别的缓存了, 读性能有了很大的提高, 可以看一下

    https://github.com/OpenAtomFoundation/pika

    @daiv 老哥 pika 群友吗
    luobingit
        91
    luobingit  
       Jan 12, 2024
    经历过 20 多亿数据用 MySQL 复杂查询用的 ES 没啥压力 就是要注意一下内存
    luobingit
        92
    luobingit  
       Jan 12, 2024
    TiDB 当时技术选型也讨论过 确实很吃资源 而已有些地方跟 MySQL 有冲突 具体看官网文档 后面我们在测试环境试过后 没上生产 生产还是 MySQL 你们场景跟我们当时情况很像 应该没有我们数据多 MySQL 能撑住 再整个读写分离
    Desdemor
        93
    Desdemor  
       Jan 12, 2024
    我们是七楼的方案,同步的时候是批量插入的,ck 好好搞一下,巨快无比的
    digitv
        94
    digitv  
       Jan 12, 2024
    @afeiche #27 polardb 支持 idc 部署的,可以找阿里云的谈
    jowan
        95
    jowan  
       Jan 12, 2024
    我们 MySQL 单表 15 亿 轻轻松松
    因为还有复杂的查询 现在改成垂直分表了
    lbunderway
        96
    lbunderway  
       Jan 12, 2024
    mysql 就个主从都没问题,表要分好 我们之前几亿数据量都没什么问题
    huangzhe8263
        97
    huangzhe8263  
       Jan 12, 2024   1
    @nothingistrue #88

    作为看过 MySQL 和 TiDB 代码的来说,TiDB 只是兼容 MySQL 协议,分布式是基于 Google 的 Planner 思想 + Raft 协议去做的,基本可以认为是从头写起的

    你要说 PolarDB / TDSQL 那些是二开还差不多
    aeoic
        98
    aeoic  
       Jan 12, 2024
    @afeiche #6 额,我们一般单表 1 亿挺正常的. 就算归档保留半年都有 5 亿左右数据
    weijancc
        99
    weijancc  
       Jan 12, 2024
    @luobingit #91 这么多数据, 运行 MySQL 的机器资源要多少
    bthulu
        100
    bthulu  
       Jan 12, 2024
    才上亿数据, mysql 分区表+主从轻松搞定.
    单表一万亿以上, 你再考虑其他方案.
    1  2  
    About     Help     Advertise     Blog     API     FAQ     Solana     5134 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 332ms UTC 05:59 PVG 13:59 LAX 22:59 JFK 01:59
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86