虚心求教,数据量上亿的爬虫数据用什么该用什么数据库呢 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
morost
V2EX    程序员

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

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

本来数据量小的时候用的就是 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 那玩意搭一个最小集群,都不是一个小公司能承受得了的
rb6221
    49
rb6221  
   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:0 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 自带的分表,逻辑上可以当成一张表用
L5tEU4WX072p5P42
    76
L5tEU4WX072p5P42  
   2024-05-18 11:35:22 +08:00 via Android
最后选择了什么,分享一下,让我也学习一下
L5tEU4WX072p5P42
    77
L5tEU4WX072p5P42  
   2024-05-18 11:37:06 +08:00 via Android
关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3141 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 30ms UTC 10:54 PVG 18:54 LAX 03:54 JFK 06:54
Do have faith in what you're doing.
ubao 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