Leigg
V2EX  ›  数据库

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

  •  
  •   Leigg · Mar 20, 2018 · 3123 views
    This topic created in 3161 days ago, the information mentioned may be changed or developed.

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

    33 replies  •  2018-03-21 23:29:29 +08:00
    fudanglp
    fudanglp
    Mar 20, 2018 via Android
    1
    cassandra?
    dangluren
    dangluren
    Mar 20, 2018❤️2
    2
    才近百万条数据,就算是海量数据吗,这么点数据,mysql 检索慢和选型有关系吗? 你直接反问他
    wintercoder
    wintercoder
    Mar 20, 2018❤️1
    3
    百万条也慢么..都不做索引吧,试试 ES 吧
    3a3Mp112
    3a3Mp112
    Mar 20, 2018
    4
    这明显是个陷阱,才百万条不会慢的
    vegito2002
    vegito2002
    Mar 20, 2018 via iPad
    5
    不太懂这个 boss 的问题, 如果是单条数据的检索慢, 那么跟数据量也没什么关系; 如果是 server 整体感觉 hold 不住流量了, 才 1M 的数据级别, 分析一下并发 QPS 大概是多少? 同意#2 的看法,1M 的数据级别, 瓶颈应该还不是在存储方式上面。
    feverzsj
    feverzsj
    Mar 20, 2018❤️1
    6
    百万条就叫海量了?这公司水平太 low
    privil
    privil
    Mar 20, 2018
    7
    mongodb 肯定不是一个好选择,性价比低。这个公司你没去是运气好了……哈哈哈 了解下 PostgreSQL ES 啥的吧,不过百万条慢,MySQL 还不至于,调优的空间还很大
    male110
    male110
    Mar 20, 2018
    8
    @privil PostgreSQL 比 mysql 更快?
    privil
    privil
    Mar 20, 2018
    9
    @male110 #8 https://www.zhihu.com/question/20010554 你可以找找,有些地方是真的比 MySQL 优秀的,只是 MySQL 用的人多啊
    privil
    privil
    Mar 20, 2018
    10
    @male110 #8 在 v 站安利 PostgreSQL 的人也不少吧,然后这个贴里面 mongodb 我感觉大家还是用 json 多点吧,PostgreSQL 也很早就支持 json 了
    Leigg
    Leigg
    OP
    Mar 20, 2018 via iPhone
    11
    @dangluren 那如果千万级以上呢,他确实是说感觉到慢了,而且数据库已经换成 mongo 了😂
    Leigg
    Leigg
    OP
    Mar 20, 2018 via iPhone
    12
    @wintercoder 大佬简单介绍一下 ES 是啥玩意儿?没听过。。
    Leigg
    Leigg
    OP
    Mar 20, 2018 via iPhone
    13
    @privil 为什么 mongo 不是一个好的选择?我见现在做爬虫都是用它来存储的,而且它自有的那些优势也的确适合爬虫啊。你说的 ES 也是数据库吗?
    Leigg
    Leigg
    OP
    Mar 20, 2018 via iPhone
    14
    @3a3Mp112 那到什么量级会明显的慢呢?😆
    locktionc
    locktionc
    Mar 20, 2018 via iPhone
    15
    我可以非常明确的告诉你,MongoDB 在写数据的时候所向无敌,但是一旦数据量上千万以后,查询会慢到让你怀疑人生。加了索引都慢。
    privil
    privil
    Mar 20, 2018
    16
    @Leigg #13 到了 TB 级别的时候,mongodb 和其他数据库的区别就会开始明显,性价比低,mongodb 火的原因有人恶意推测过,实在是它的公司的运营水平高,说投资它的公司的人让其他拿了投资的公司用 mongodb 并且一起来推广。反正我的眼里 mongodb 不是好选择。ES 数据库,你百度一下都知道是 Elasticsearch 了……你还是玩爬虫的……
    privil
    privil
    Mar 20, 2018
    17
    @locktionc #15 说明你机器配置不够了……加配置吧,哈哈哈哈哈哈
    Leigg
    Leigg
    OP
    Mar 20, 2018 via iPhone
    18
    @privil 见笑了,入行级别。哈哈。。
    monsterxx03
    monsterxx03
    Mar 20, 2018❤️3
    19
    @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
    nullen
    Mar 20, 2018
    20
    百万条就慢,说明 MySQL 没用好。
    Leigg
    Leigg
    OP
    Mar 20, 2018 via iPhone
    21
    @monsterxx03 超有质量的回答,感谢!
    看老哥你提到了 elasticsearch,能简单给我说说它有什么优势吗?谢谢啦
    monsterxx03
    monsterxx03
    Mar 20, 2018❤️1
    22
    ES 就是一个搜索引擎, 适合用来对一些非结构化数据做搜索, 举个例子:比如你把论坛里的帖子都存进去,论坛里提供搜索功能的话,可以很快的按关键词得到相应的帖子,并给你一个 score,表示每个搜索结果和关键词的相关性. MySQL 虽然也有全文索引, 没法和 ES 比.

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

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

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

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

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

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

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

    es 我不是很懂.. 大概要看几天文档, 配置 mapping 那里挺讲究的.
    luosiding
    luosiding
    Mar 21, 2018
    32
    对于 es 我更喜欢 mongodb, 因为它的接口不想 es 用 http 协议传输,而且 3.2 版本换了存储引擎,换成了 writedtiger, 写入和压缩的性能更强大了
    Leigg
    Leigg
    OP
    Mar 21, 2018 via iPhone
    33
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2041 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 51ms · UTC 14:15 · PVG 22:15 · LAX 06:15 · JFK 09:15
    ♥ Do have faith in what you're doing.