[面试] 关于海量数据存储的数据库选型问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Leigg
V2EX    数据库

[面试] 关于海量数据存储的数据库选型问题

  •  
  •   Leigg 2018-03-20 12:35:27 +08:00 2568 次点击
    这是一个创建于 2832 天前的主题,其中的信息可能已经有所发展或是发生改变。

    上周去面试(爬虫),直接对 boss. 问到的一个问题就是公司现在已经爬了近百万条数据了,用的 mysql,发现检索速度越来越慢,内部决定用 mongo,然后问我对分布式 mongo 集群熟么.我没有实践经验,懂一些理论,我知道它可以作读写分离,但我不知道分布式 mongo 集群能有效解决海量数据的检索效率问题吗,或者说各位大佬是有什么好的方案思想,指导一下小弟在面试时遇到这类问题如何做出好的回答.先谢过了~~~ 面试的是一家创业司,没有 DBA,boss 也不太懂技术,就非常认真的看着我*_*

    33 条回复    2018-03-21 23:29:29 +08:00
    fudanglp
        1
    fudanglp  
       2018-03-20 13:10:44 +08:00 via Android
    cassandra?
    dangluren
        2
    dangluren  
       2018-03-20 13:13:00 +08:00   2
    才近百万条数据,就算是海量数据吗,这么点数据,mysql 检索慢和选型有关系吗? 你直接反问他
    wintercoder
        3
    wintercoder  
       2018-03-20 13:13:53 +08:00   1
    百万条也慢么..都不做索引吧,试试 ES 吧
    3a3Mp112
        4
    3a3Mp112  
       2018-03-20 13:14:55 +08:00
    这明显是个陷阱,才百万条不会慢的
    vegito2002
        5
    vegito2002  
       2018-03-20 13:15:34 +08:00 via iPad
    不太懂这个 boss 的问题, 如果是单条数据的检索慢, 那么跟数据量也没什么关系; 如果是 server 整体感觉 hold 不住流量了, 才 1M 的数据级别, 分析一下并发 QPS 大概是多少? 同意#2 的看法,1M 的数据级别, 瓶颈应该还不是在存储方式上面。
    feverzsj
        6
    feverzsj  
       2018-03-20 13:15:43 +08:00   1
    百万条就叫海量了?这公司水平太 low
    privil
        7
    privil  
       2018-03-20 13:18:22 +08:00
    mongodb 肯定不是一个好选择,性价比低。这个公司你没去是运气好了……哈哈哈 了解下 PostgreSQL ES 啥的吧,不过百万条慢,MySQL 还不至于,调优的空间还很大
    male110
        8
    male110  
       2018-03-20 13:37:10 +08:00
    @privil PostgreSQL 比 mysql 更快?
    privil
        9
    privil  
       2018-03-20 13:43:22 +08:00
    @male110 #8 https://www.zhihu.com/question/20010554 你可以找找,有些地方是真的比 MySQL 优秀的,只是 MySQL 用的人多啊
    privil
        10
    privil  
       2018-03-20 13:46:55 +08:00
    @male110 #8 在 v 站安利 PostgreSQL 的人也不少吧,然后这个贴里面 mongodb 我感觉大家还是用 json 多点吧,PostgreSQL 也很早就支持 json 了
    Leigg
        11
    Leigg  
    OP
       2018-03-20 13:47:06 +08:00 via iPhone
    @dangluren 那如果千万级以上呢,他确实是说感觉到慢了,而且数据库已经换成 mongo 了
    Leigg
        12
    Leigg  
    OP
       2018-03-20 13:47:58 +08:00 via iPhone
    @wintercoder 大佬简单介绍一下 ES 是啥玩意儿?没听过。。
    Leigg
        13
    Leigg  
    OP
       2018-03-20 13:51:14 +08:00 via iPhone
    @privil 为什么 mongo 不是一个好的选择?我见现在做爬虫都是用它来存储的,而且它自有的那些优势也的确适合爬虫啊。你说的 ES 也是数据库吗?
    Leigg
        14
    Leigg  
    OP
       2018-03-20 13:53:23 +08:00 via iPhone
    @3a3Mp112 那到什么量级会明显的慢呢?
    locktionc
        15
    locktionc  
       2018-03-20 13:56:04 +08:00 via iPhone
    我可以非常明确的告诉你,MongoDB 在写数据的时候所向无敌,但是一旦数据量上千万以后,查询会慢到让你怀疑人生。加了索引都慢。
    privil
        16
    privil  
       2018-03-20 13:56:14 +08:00
    @Leigg #13 到了 TB 级别的时候,mongodb 和其他数据库的区别就会开始明显,性价比低,mongodb 火的原因有人恶意推测过,实在是它的公司的运营水平高,说投资它的公司的人让其他拿了投资的公司用 mongodb 并且一起来推广。反正我的眼里 mongodb 不是好选择。ES 数据库,你百度一下都知道是 Elasticsearch 了……你还是玩爬虫的……
    privil
        17
    privil  
       2018-03-20 13:56:49 +08:00
    @locktionc #15 说明你机器配置不够了……加配置吧,哈哈哈哈哈哈
    Leigg
        18
    Leigg  
    OP
       2018-03-20 13:59:57 +08:00 via iPhone
    @privil 见笑了,入行级别。哈哈。。
    monsterxx03
        19
    monsterxx03  
       2018-03-20 14:03:06 +08:00   3
    @Leigg MySQL 千万也不会慢,我线上最大的一张表都 4 亿行了,游刃有余, 单纯 MySQL 的话, 好好优化 index, 优化慢查询,再看看能不能用 MySQL 的 partition table, 大部分中小公司真的很难到单机瓶颈.

    所谓慢不慢看它硬件条件喽, 看 cpu, ram, disk 使用率啥情况, 数据库不够用优先考虑 scale up.

    真要讨论数据量无限扩展的话, 还要考虑查询模式是 OLTP, 还是 OLAP, 你说的爬虫这种 case, 我觉得基本没可能需要实时查询裸数据的, 我来做的话,会选一个支持 columnar storage 的数据仓库(redshift/hbase), 存储裸数据, 通过 ETL 把清洗后的数据倒入 MySQL 或 ElasticSearch 里.

    不过看上去他们也没懂数据库的人, 老老实实先 MySQL 吃透吧.
    nullen
        20
    nullen  
       2018-03-20 14:04:35 +08:00
    百万条就慢,说明 MySQL 没用好。
    Leigg
        21
    Leigg  
    OP
       2018-03-20 14:10:19 +08:00 via iPhone
    @monsterxx03 超有质量的回答,感谢!
    看老哥你提到了 elasticsearch,能简单给我说说它有什么优势吗?谢谢啦
    monsterxx03
        22
    monsterxx03  
       2018-03-20 14:24:51 +08:00   1
    ES 就是一个搜索引擎, 适合用来对一些非结构化数据做搜索, 举个例子:比如你把论坛里的帖子都存进去,论坛里提供搜索功能的话,可以很快的按关键词得到相应的帖子,并给你一个 score,表示每个搜索结果和关键词的相关性. MySQL 虽然也有全文索引, 没法和 ES 比.

    ES 支持 cluster, 可以把数据 sharding 到 N 个节点上, 解决单机容量的问题, 不过它这种 gossip 协议的集群模式,总体效率不高的.集群大了估计会有很多问题.

    不支持事务, 不适合直接当业务数据库用, 而且很耗内存, 调优很费劲(这我经验不多.
    Mazexal
        23
    Mazexal  
       2018-03-20 15:33:48 +08:00
    看他们做爬虫, 怕不是直接用的 like 来检索, 话说如果想检索文本内容的话应该用 solr 吧
    xlrtx
        24
    xlrtx  
       2018-03-20 15:47:05 +08:00   1
    同爬虫, 现在用的是 mongo+es, mongo 用于数据存储, es 用来搜索文本

    入库 mongo 的数据的搜索用字段会同步到 es 上, 检索出的数据到 mongo 上提取

    最大的数据有几十亿了, 现在还没上 sharding, 只是 replica, 每天的数据入库已经有点压力了

    不过业务搜索的不频繁也没有要求实时返回结果, 所以在切到 sharding 前还可以再维持一段时间.
    wmhack
        25
    wmhack  
       2018-03-20 15:51:29 +08:00 via Android
    试试 TiDB,分布式数据库
    xlrtx
        26
    xlrtx  
       2018-03-20 15:56:09 +08:00
    @Mazexal 不推荐用 solr, 个人认为还是 es 好点, 两个用的都是一个底层, 但是 es 的官方文档质量更好一些, 用户量也多 (遇到不会问题可以马上找到解决方案)
    Mazexal
        27
    Mazexal  
       2018-03-20 16:34:46 +08:00   1
    @xlrtx 反正看你熟悉哪个技术栈就用哪个, 我反正对 solr 相对熟悉点, 其实用什么技术问题都是看领导的, 和小兵无关
    Leigg
        28
    Leigg  
    OP
       2018-03-20 17:18:37 +08:00 ia iPhone
    @xlrtx replicaset 的话,只有一台服务器能写对吧,你们应该做了读写分离?那每天的写入量在什么级别发现有压力了啊?感谢回答,找到前辈了!
    Leigg
        29
    Leigg  
    OP
       2018-03-20 17:21:54 +08:00 via iPhone
    @xlrtx 目前会 mongo 的 replicaset,你说的 es 我现在一点都不了解,不过面试的 boss 说他们现在就用的 mongo+ex 架构,es 学习入门大概要花多久呢?
    Nick2VIPUser
        30
    Nick2VIPUser  
       2018-03-21 10:08:42 +08:00
    百万条数据对大多数爬虫来讲不算多,如果 mysql 检索速度越来越慢,考虑索引建设和性能调优这块;
    使用 mongoDB 集群来做储存和检索,个人感觉主要是一种尝鲜的想法,这个量级数据使用 mysql 和 mongo 都能够 hold 住;
    讨论海量的储存我也不懂,过来围观大神,很赞成#19 的发言;
    ElasticSearch 入门先安装个环境,照着 shell commands 和 python api 调一下你就明白了,深入的东西在用的过程中多看文档吧。
    xlrtx
        31
    xlrtx  
       2018-03-21 11:36:34 +08:00
    @Leigg

    超过 4-5 个进程同时执行批量 upsert 的时候就滚雪球了, 一天入数据多少和数据类型关系比较大, update 多操作的压力会更大一些, 因为 mongo 要重新分配存储空间, insert 操作的压力很小.

    如果没有一致性的要求的话, 可以直接从从节点读, 如果有 sharding 的话, 读取压力可以分配到不同机器上

    es 我不是很懂.. 大概要看几天文档, 配置 mapping 那里挺讲究的.
    luosiding
        32
    luosiding  
       2018-03-21 18:20:51 +08:00
    对于 es 我更喜欢 mongodb, 因为它的接口不想 es 用 http 协议传输,而且 3.2 版本换了存储引擎,换成了 writedtiger, 写入和压缩的性能更强大了
    Leigg
        33
    Leigg  
    OP
       2018-03-21 23:29:29 +08:00 via iPhone
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2772 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 93ms UTC 07:26 PVG 15:26 LAX 23:26 JFK 02:26
    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