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

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

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

    上周去面试(爬虫),直接对 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 via 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   ·   实用小工具   ·   1863 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 16:36 · PVG 00:36 · LAX 08:36 · JFK 11:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.