V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
morost
V2EX  ›  程序员

虚心求教,数据量上亿的爬虫数据用什么该用什么数据库呢

  •  
  •   morost · 2024-05-15 10:51:43 +08:00 · 10763 次点击
    这是一个创建于 370 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本来数据量小的时候用的就是 MySQL ,后来爬虫做过升级后,无论是广度和深度都有了改进,数据量慢慢已经来到了亿级,查询越来越慢,只能一直加索引来加快查询速度,但是这不是长久之计,准备从数据库上改善这个问题。

    希望更换一个对于大数据量支持友好的数据库,奈何本人这方面了解的确实不多,希望各位 v 友给点建议。

    第 1 条附言  ·  2024-05-16 14:27:15 +08:00
    谢谢大伙的建议,爬虫这边与数据库这边确实不太熟,半路做的东西,认真听取了各位朋友的建议,现在第一是优化 MySQL 现有的查询吧,其次我会好好去了解大家提出来的其余的方案,斟酌一个最适合的。感慨自己需要学的东西还有很多。
    77 条回复    2024-05-18 11:37:06 +08:00
    pota
        1
    pota  
       2024-05-15 10:54:15 +08:00   ❤️ 1
    放 es 里面?
    tikazyq
        2
    tikazyq  
       2024-05-15 10:55:51 +08:00   ❤️ 1
    mongodb
    me1onsoda
        3
    me1onsoda  
       2024-05-15 10:57:45 +08:00   ❤️ 1
    tidb?
    sagaxu
        4
    sagaxu  
       2024-05-15 10:59:37 +08:00   ❤️ 1
    索引质量低导致查询慢,索引太多导致插入慢,换 DB 可能解决不了
    gazi
        5
    gazi  
       2024-05-15 10:59:55 +08:00   ❤️ 1
    不知道数据特性和数据结构,是否经常删改,经常聚合分析,使用场景也不清楚 不好推荐。
    我们在用 Clickhouse, 朋友在用 StarRocks 。可以了解对比一下
    morost
        6
    morost  
    OP
       2024-05-15 11:09:40 +08:00
    @sagaxu 是数据量大—①—>查询慢—②—>加索引,这个逻辑链,现在想解决第一个传导逻辑。
    sagaxu
        7
    sagaxu  
       2024-05-15 11:11:13 +08:00   ❤️ 1
    数据量大查询慢,是因为索引质量低
    morost
        8
    morost  
    OP
       2024-05-15 11:11:59 +08:00
    @gazi 图片和视频(均为链接)数据,使用场景目前最主要是就是下载和更新状态
    morost
        9
    morost  
    OP
       2024-05-15 11:13:45 +08:00
    @sagaxu #7 那只需要建立高质量索引就不需要更换 db 了这个意思嘛,我一开始是认为 MySQL 对于大数据量的支持不是很友好才想要更换 db 的
    KongLiu
        10
    KongLiu  
       2024-05-15 11:15:17 +08:00   ❤️ 1
    考虑一下分库分表?
    morost
        11
    morost  
    OP
       2024-05-15 11:16:46 +08:00
    @KongLiu 产品设计导致只能放在一张表里,哎
    morost
        12
    morost  
    OP
       2024-05-15 11:17:05 +08:00
    @pota 谢谢回答,我去调研一下
    morost
        13
    morost  
    OP
       2024-05-15 11:17:25 +08:00
    @me1onsoda 谢谢回答, 我去调研一下这个 db
    morost
        14
    morost  
    OP
       2024-05-15 11:18:17 +08:00
    @tikazyq 我自己这边找的方案现在是在 mongodb 和 PostgreSQL 之间比较,那我先去看看 mongo
    keyfunc
        15
    keyfunc  
       2024-05-15 11:18:53 +08:00   ❤️ 1
    分布式数据库
    morost
        16
    morost  
    OP
       2024-05-15 11:20:10 +08:00
    @keyfunc 老哥细说一下呢
    gazi
        17
    gazi  
       2024-05-15 11:20:41 +08:00
    @morost 这个场景不太适合,Clickhouse 和 StarRocks 。另外上亿数据量对于 mysql 还不算大数据。 我感觉也是先优化索引比较好。ES 也比较合适,可以等数据量再大的时候换 ES 。
    morost
        18
    morost  
    OP
       2024-05-15 11:22:53 +08:00
    @gazi #17 谢谢解答,我这就去优化一下索引相关
    BeijingBaby
        19
    BeijingBaby  
       2024-05-15 11:26:59 +08:00   ❤️ 1
    才亿级别,直接 clickhouse 吧,百亿都没问题。
    Jinnrry
        20
    Jinnrry  
       2024-05-15 11:32:47 +08:00 via Android   ❤️ 1
    换 starrocks
    1.兼容 mysql 协议,代码完全不用改
    2.才亿级数据,对 sr 来说就是毛毛雨,都不够热身

    缺点
    成本高很多
    lasuar
        21
    lasuar  
       2024-05-15 11:35:21 +08:00   ❤️ 1
    海量数据(上亿)的查询问题,用 clickhouse 、tidb 、aliyun 的 adb ,来自 [实际经验] 。
    vivisidea
        22
    vivisidea  
       2024-05-15 11:35:33 +08:00   ❤️ 1
    tidb ?
    esee
        23
    esee  
       2024-05-15 11:35:56 +08:00   ❤️ 1
    亿级就慢了吗?我用的阿里云的 rds mysql 的 1H1G 的入门款,有个表三四亿的数据量感觉也没啥影响。。不过我没啥联表的操作
    iroha239
        24
    iroha239  
       2024-05-15 11:50:31 +08:00   ❤️ 1
    clickhouse 吧
    roundgis
        25
    roundgis  
       2024-05-15 11:53:51 +08:00 via Android
    @esee 爬蟲數據庫理論上也不會有 join
    LeegoYih
        26
    LeegoYih  
       2024-05-15 12:03:02 +08:00   ❤️ 1
    ClickHouse
    xieren58
        27
    xieren58  
       2024-05-15 12:21:00 +08:00   ❤️ 1
    postgresql , 上亿够用...
    june4
        28
    june4  
       2024-05-15 12:43:02 +08:00   ❤️ 1
    才亿级,我的 mysql 单表几亿,一点都不慢。做好索引是关键。
    mayli
        29
    mayli  
       2024-05-15 12:58:29 +08:00 via Android   ❤️ 1
    无脑 es 吧,数据量大了 水平扩展起来也方便。
    或者 Cassandra 这种。
    opsaid
        30
    opsaid  
       2024-05-15 13:16:18 +08:00   ❤️ 1
    clickhouse 好用高效
    defunct9
        31
    defunct9  
       2024-05-15 13:22:44 +08:00   ❤️ 1
    mongo
    1018ji
        32
    1018ji  
       2024-05-15 13:37:23 +08:00   ❤️ 1
    hbase ?
    cathub86
        33
    cathub86  
       2024-05-15 13:38:46 +08:00   ❤️ 1
    ck
    nicholasxuu
        34
    nicholasxuu  
       2024-05-15 13:41:15 +08:00   ❤️ 1
    hbase(支持大数据的 mysql 替代)
    clickhouse(便宜高性能的 es 替代)
    kemistep
        35
    kemistep  
       2024-05-15 13:43:11 +08:00   ❤️ 1
    clickhouse, 爬虫为什么要更新数据,全部存起来,用 sql 过滤数据,上百亿都么有问题
    justplaymore
        36
    justplaymore  
       2024-05-15 14:28:01 +08:00   ❤️ 1
    表结构、索引、查询语句先提供出来,要看你的需求场景是否是 mysql 擅长的,任何数据库都有自己擅长的领域,如果实在是需求和数据不匹配的话,才需要去考虑换数据库,换数据库还会有数据迁移的问题,上亿数据的迁移方案你有考虑过吗?
    cbythe434
        37
    cbythe434  
       2024-05-15 14:33:43 +08:00   ❤️ 1
    什么查询场景? mysql 做文本召回? kv 查询直接 kv 存储不就行了
    yh7gdiaYW
        38
    yh7gdiaYW  
       2024-05-15 14:51:38 +08:00   ❤️ 1
    强推 starrocks ,组里落地效果非常好
    R4rvZ6agNVWr56V0
        39
    R4rvZ6agNVWr56V0  
       2024-05-15 14:51:41 +08:00   ❤️ 1
    只要不较劲,mongodb 就够了
    yh7gdiaYW
        40
    yh7gdiaYW  
       2024-05-15 14:52:46 +08:00
    @justplaymore "上亿"这个数据量太小了,哪需要专门考虑什么方案
    smallparking
        41
    smallparking  
       2024-05-15 15:01:58 +08:00   ❤️ 1
    greenplum 分布式数据库了解一下
    user919lx
        42
    user919lx  
       2024-05-15 15:10:39 +08:00   ❤️ 2
    我在数据公司待过,有专门的爬虫团队和数据开发团队,我们用的方案,最早是 Cassandra ,然后是 TiDB ,最后换成了 HBASE 。
    Cassandra 不说了,只是早期过渡方案。
    TiDB 的好处是我们和 PingCAP 有交情,技术支持比较到位,而且 MySQL 协议处理方便。缺点就是需要每天增量同步到 Hadoop 集群。
    HBASE 则是因为我们后来数据量上来了,用 HBASE 方便在 Hadoop 集群框架下进行处理。

    如果你有很多基于 SQL 的分析任务已经在运行了,选择 TiDB 是最好的,迁移成本极低。
    如果你有 Hadoop 集群了,MySQL 只用于临时存储爬虫,那可以换成 HBase
    user919lx
        43
    user919lx  
       2024-05-15 15:15:52 +08:00   ❤️ 4
    对了,如果十分追求分析性能,Clickhouse 是正确的选择。但是我们一般把 Clickhouse 用于最后使用的终端,与爬虫数据存储是隔离开的,我们的链路大致上是:爬虫原始数据存储( HBase 或 TiDB) -> 数仓处理和存储(Hadoop 集群) -> 供各应用使用的数据集市(Clickhouse),就算你不使用 Hadoop 来处理数据,读写分离也是很重要的。混在一起的话读写都会被拖慢
    wupher
        44
    wupher  
       2024-05-15 15:26:43 +08:00   ❤️ 1
    MySQL 单表上亿也不差的。

    如果换 No SQL ,比如 MongoDB 上亿走个 sharding / replica 也没啥问题。

    关键还是要看需要怎么新增,怎么查。
    feiniu
        45
    feiniu  
       2024-05-15 15:32:16 +08:00   ❤️ 2
    之前公司(爬虫公司),数据也是放在 Hbase 里面的

    流程和 @user919x 类似的
    chenfang
        46
    chenfang  
       2024-05-15 15:35:47 +08:00   ❤️ 1
    我提一个 Doris 分布式数据库,之前公司用过 tidb 但是跟 mysql 还是有比较大的差距,迁移不过去....

    后来用了 Doris,总的来说还行,1T 数据量的表也能嗖嗖的出结果

    不过分布式数据库,重在分布式 成本也会上涨,这个事情也要考虑
    rockxsj
        47
    rockxsj  
       2024-05-15 15:42:11 +08:00   ❤️ 2
    redis
    iyaozhen
        48
    iyaozhen  
       2024-05-15 15:54:53 +08:00   ❤️ 1
    得先看看公司预算

    tidb 那玩意搭一个最小集群,都不是一个小公司能承受得了的
    janus77
        49
    janus77  
       2024-05-15 15:59:40 +08:00   ❤️ 1
    先做常规优化吧,索引、分库分表什么的,然后不知道你的业务细节,是否可以加 cache 层,冷热数据分离等方案,亿级别的话努努力是没必要换数据库的
    fengfisher3
        50
    fengfisher3  
       2024-05-15 16:01:24 +08:00
    @yh7gdiaYW
    @Jinnrry
    请问你们的 starrocks 的版本是什么,是 2.x 还是 3.x ,我们的 3.1.x 我想升级一下,但不知道哪个版本更稳定,更好。
    rust
        51
    rust  
       2024-05-15 16:13:36 +08:00   ❤️ 1
    我们以前爬过某音的视频 meta 数据,大概 6 亿多,放在 MongoDB 里边,跑数据库的机器的 RAM 大概 1T, 然后索引就有 700 多 G, 硬盘占用大概 7.2T 左右,固态阵列. 秒查~
    securityCoding
        52
    securityCoding  
       2024-05-15 16:22:17 +08:00   ❤️ 1
    clichhouse 吧 ,不过使用场景不同直接一份 kafka 分发出去分别落库吧
    wenxueywx
        53
    wenxueywx  
       2024-05-15 17:16:30 +08:00   ❤️ 1
    现在 mysql 使用的磁盘都说 ssd ,亿级数据,只要使用姿势正确完全没有问题
    建议先优化原 db
    前面也有老哥说了,不清楚你的数据结构,使用场景是这些确实不好推荐
    likeman
        54
    likeman  
       2024-05-15 17:27:45 +08:00 via Android
    @morost 如果一定要是一张表,可以看看 postgres 的 table partition ,本质是一个大表,但是可以根据 partition 规则切分为若干个小表(显示还是一个大表),这样索引数据也小了,插入查询也快得多
    phrack
        55
    phrack  
       2024-05-15 17:33:32 +08:00 via iPhone   ❤️ 1
    这点数据量如果不是数据结构很复杂的,mysql 不是瓶颈
    perpetually
        56
    perpetually  
       2024-05-15 18:05:20 +08:00   ❤️ 1
    starrocks

    之前公司 10 几亿的咨询数据都是放在这里面,查询速度还可以
    zhaopy4721
        57
    zhaopy4721  
       2024-05-15 18:11:01 +08:00   ❤️ 1
    你从 mysql 迁移考虑一下 doris 吧
    hangszhang
        58
    hangszhang  
       2024-05-15 19:17:30 +08:00
    我就好奇,你们这种说几亿条数据,mysql 也不慢的,是只用主键索引检索数据么?
    Jinnrry
        59
    Jinnrry  
       2024-05-15 20:05:00 +08:00   ❤️ 1
    @fengfisher3 我们是 2.5.12 ,但是我们有自己的 SR 研发团队和运维团队,我只管存数据,查数据就行。其他的直接提工单摇人就行
    changdy
        60
    changdy  
       2024-05-15 21:01:02 +08:00   ❤️ 1
    嘲讽一波 ...
    楼上大部分上来就让楼主换数据库的 对数据库 对大数据 完全是一点都不了解..

    建议 op 好好了解下瓶颈在哪里 .表设计表结构是不是有问题.. 查询方式是不是有问题.

    这些才是问题的解决思路, 而不是上来就换个数据库 ..
    raptor
        61
    raptor  
       2024-05-15 21:25:46 +08:00   ❤️ 1
    上亿对 mysql 来说压力不算大,优化一下库结构,优化一下查询应该就能解决,或者直接加点硬件(加内存和 CPU 或者换更快的 SSD ),钱能解决的都不是问题。
    thedog
        62
    thedog  
       2024-05-15 23:06:30 +08:00 via iPhone   ❤️ 1
    加个 redis 做去重缓存,具体字段随便放哪个数据库
    DeWjjj
        63
    DeWjjj  
       2024-05-16 00:25:29 +08:00
    @morost mongo 切到 syscylla 就行了。
    caola
        64
    caola  
       2024-05-16 00:36:58 +08:00   ❤️ 1
    kvrocks ,可以说是 redis 硬盘版,速度大概是 redis 的一半左右,如果 nvme 硬盘还有提升空间
    justplaymore
        65
    justplaymore  
       2024-05-16 09:24:01 +08:00   ❤️ 1
    @yh7gdiaYW 异构数据迁移方案呢?是否支持平滑迁移?服务替换数据源的过度方案?这些都是要考虑的事情。看楼主的描述,基本可以确定对数据库是不怎么熟悉的,更不要说数据迁移要注意哪些事情了。如果你是非常熟悉各种数据库的,那对你来说当然算不上“方案”,因为你已经有过丰富的经验了,对于楼主来说就是完全陌生的领域,那我在回复楼主的时候指出要注意数据迁移方案,有什么问题呢?我又不是对那种有丰富数据库使用经验的人说的。
    fengfisher3
        66
    fengfisher3  
       2024-05-16 09:36:26 +08:00
    @Jinnrry 好强,看来是大企业,我们只是几十人的小公司,自己搭建和使用的而已。
    yiyufxst
        67
    yiyufxst  
       2024-05-16 09:52:00 +08:00   ❤️ 1
    亿级理论上 MySQL 也还好啊,是否是 SSD 硬盘?索引优化
    爬虫感觉更适合 MongoDB 这种文档型数据库,随时加个字段页无所谓,MongoDB 建好索引十来亿问题也不大,不过没索引就很慢
    EndlessMemory
        68
    EndlessMemory  
       2024-05-16 10:24:24 +08:00   ❤️ 1
    我之前公司用的 elasticsearch
    luofuchuan668
        69
    luofuchuan668  
       2024-05-16 11:08:04 +08:00
    @justplaymore 点赞👍
    hewiefsociety
        70
    hewiefsociety  
       2024-05-16 13:09:12 +08:00   ❤️ 1
    其实 Mysql 也行
    morost
        71
    morost  
    OP
       2024-05-16 14:26:03 +08:00
    谢谢大伙的建议,爬虫这边与数据库这边确实不太熟,半路做的东西,认真听取了各位朋友的建议,现在第一是优化 MySQL 现有的查询吧,其次我会好好去了解大家提出来的其余的方案,斟酌一个最适合的。感慨自己需要学的东西还有很多。
    morost
        72
    morost  
    OP
       2024-05-16 14:29:05 +08:00
    @justplaymore #36 感谢老哥的解答,我们已经在复盘了
    morost
        73
    morost  
    OP
       2024-05-16 14:30:07 +08:00
    @user919lx #43 谢谢!这个建议很实用!我们会把这个链路考虑进去的
    layxy
        74
    layxy  
       2024-05-16 14:51:39 +08:00
    mongo 或 es 比较省事
    v2yllhwa
        75
    v2yllhwa  
       2024-05-16 23:17:52 +08:00 via Android
    postgresql 自带的分表,逻辑上可以当成一张表用
    Mogamigawa
        76
    Mogamigawa  
       2024-05-18 11:35:22 +08:00 via Android
    最后选择了什么,分享一下,让我也学习一下
    Mogamigawa
        77
    Mogamigawa  
       2024-05-18 11:37:06 +08:00 via Android
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5735 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 02:13 · PVG 10:13 · LAX 19:13 · JFK 22:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.