上周去面试(爬虫),直接对 boss. 问到的一个问题就是公司现在已经爬了近百万条数据了,用的 mysql,发现检索速度越来越慢,内部决定用 mongo,然后问我对分布式 mongo 集群熟么.我没有实践经验,懂一些理论,我知道它可以作读写分离,但我不知道分布式 mongo 集群能有效解决海量数据的检索效率问题吗,或者说各位大佬是有什么好的方案思想,指导一下小弟在面试时遇到这类问题如何做出好的回答.先谢过了~~~ 面试的是一家创业公司,没有 DBA,boss 也不太懂技术,就非常认真的看着我*_*
1
fudanglp 2018-03-20 13:10:44 +08:00 via Android
cassandra?
|
2
dangluren 2018-03-20 13:13:00 +08:00 2
才近百万条数据,就算是海量数据吗,这么点数据,mysql 检索慢和选型有关系吗? 你直接反问他
|
3
wintercoder 2018-03-20 13:13:53 +08:00 1
百万条也慢么..都不做索引吧,试试 ES 吧
|
4
3a3Mp112 2018-03-20 13:14:55 +08:00
这明显是个陷阱,才百万条不会慢的
|
5
vegito2002 2018-03-20 13:15:34 +08:00 via iPad
不太懂这个 boss 的问题, 如果是单条数据的检索慢, 那么跟数据量也没什么关系; 如果是 server 整体感觉 hold 不住流量了, 才 1M 的数据级别, 分析一下并发 QPS 大概是多少? 同意#2 的看法,1M 的数据级别, 瓶颈应该还不是在存储方式上面。
|
6
feverzsj 2018-03-20 13:15:43 +08:00 1
百万条就叫海量了?这公司水平太 low
|
7
privil 2018-03-20 13:18:22 +08:00
mongodb 肯定不是一个好选择,性价比低。这个公司你没去是运气好了……哈哈哈 了解下 PostgreSQL ES 啥的吧,不过百万条慢,MySQL 还不至于,调优的空间还很大
|
9
privil 2018-03-20 13:43:22 +08:00
@male110 #8 https://www.zhihu.com/question/20010554 你可以找找,有些地方是真的比 MySQL 优秀的,只是 MySQL 用的人多啊
|
10
privil 2018-03-20 13:46:55 +08:00
@male110 #8 在 v 站安利 PostgreSQL 的人也不少吧,然后这个贴里面 mongodb 我感觉大家还是用 json 多点吧,PostgreSQL 也很早就支持 json 了
|
11
Leigg OP @dangluren 那如果千万级以上呢,他确实是说感觉到慢了,而且数据库已经换成 mongo 了😂
|
12
Leigg OP @wintercoder 大佬简单介绍一下 ES 是啥玩意儿?没听过。。
|
13
Leigg OP @privil 为什么 mongo 不是一个好的选择?我见现在做爬虫都是用它来存储的,而且它自有的那些优势也的确适合爬虫啊。你说的 ES 也是数据库吗?
|
15
locktionc 2018-03-20 13:56:04 +08:00 via iPhone
我可以非常明确的告诉你,MongoDB 在写数据的时候所向无敌,但是一旦数据量上千万以后,查询会慢到让你怀疑人生。加了索引都慢。
|
16
privil 2018-03-20 13:56:14 +08:00
@Leigg #13 到了 TB 级别的时候,mongodb 和其他数据库的区别就会开始明显,性价比低,mongodb 火的原因有人恶意推测过,实在是它的公司的运营水平高,说投资它的公司的人让其他拿了投资的公司用 mongodb 并且一起来推广。反正我的眼里 mongodb 不是好选择。ES 数据库,你百度一下都知道是 Elasticsearch 了……你还是玩爬虫的……
|
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 吃透吧. |
20
nullen 2018-03-20 14:04:35 +08:00
百万条就慢,说明 MySQL 没用好。
|
21
Leigg OP @monsterxx03 超有质量的回答,感谢!
看老哥你提到了 elasticsearch,能简单给我说说它有什么优势吗?谢谢啦 |
22
monsterxx03 2018-03-20 14:24:51 +08:00 1
ES 就是一个搜索引擎, 适合用来对一些非结构化数据做搜索, 举个例子:比如你把论坛里的帖子都存进去,论坛里提供搜索功能的话,可以很快的按关键词得到相应的帖子,并给你一个 score,表示每个搜索结果和关键词的相关性. MySQL 虽然也有全文索引, 没法和 ES 比.
ES 支持 cluster, 可以把数据 sharding 到 N 个节点上, 解决单机容量的问题, 不过它这种 gossip 协议的集群模式,总体效率不高的.集群大了估计会有很多问题. 不支持事务, 不适合直接当业务数据库用, 而且很耗内存, 调优很费劲(这我经验不多. |
23
Mazexal 2018-03-20 15:33:48 +08:00
看他们做爬虫, 怕不是直接用的 like 来检索, 话说如果想检索文本内容的话应该用 solr 吧
|
24
xlrtx 2018-03-20 15:47:05 +08:00 1
同爬虫, 现在用的是 mongo+es, mongo 用于数据存储, es 用来搜索文本
入库 mongo 的数据的搜索用字段会同步到 es 上, 检索出的数据到 mongo 上提取 最大的数据有几十亿了, 现在还没上 sharding, 只是 replica, 每天的数据入库已经有点压力了 不过业务搜索的不频繁也没有要求实时返回结果, 所以在切到 sharding 前还可以再维持一段时间. |
25
wmhack 2018-03-20 15:51:29 +08:00 via Android
试试 TiDB,分布式数据库
|
26
xlrtx 2018-03-20 15:56:09 +08:00
@Mazexal 不推荐用 solr, 个人认为还是 es 好点, 两个用的都是一个底层, 但是 es 的官方文档质量更好一些, 用户量也多 (遇到不会问题可以马上找到解决方案)
|
27
Mazexal 2018-03-20 16:34:46 +08:00 1
@xlrtx 反正看你熟悉哪个技术栈就用哪个, 我反正对 solr 相对熟悉点, 其实用什么技术问题都是看领导的, 和小兵无关
|
28
Leigg OP @xlrtx replicaset 的话,只有一台服务器能写对吧,你们应该做了读写分离?那每天的写入量在什么级别发现有压力了啊?感谢回答,找到前辈了!
|
29
Leigg OP @xlrtx 目前会 mongo 的 replicaset,你说的 es 我现在一点都不了解😂,不过面试的 boss 说他们现在就用的 mongo+ex 架构,es 学习入门大概要花多久呢?
|
30
Nick2VIPUser 2018-03-21 10:08:42 +08:00
百万条数据对大多数爬虫来讲不算多,如果 mysql 检索速度越来越慢,考虑索引建设和性能调优这块;
使用 mongoDB 集群来做储存和检索,个人感觉主要是一种尝鲜的想法,这个量级数据使用 mysql 和 mongo 都能够 hold 住; 讨论海量的储存我也不懂,过来围观大神,很赞成#19 的发言; ElasticSearch 入门先安装个环境,照着 shell commands 和 python api 调一下你就明白了,深入的东西在用的过程中多看文档吧。 |
31
xlrtx 2018-03-21 11:36:34 +08:00
@Leigg
超过 4-5 个进程同时执行批量 upsert 的时候就滚雪球了, 一天入数据多少和数据类型关系比较大, update 多操作的压力会更大一些, 因为 mongo 要重新分配存储空间, insert 操作的压力很小. 如果没有一致性的要求的话, 可以直接从从节点读, 如果有 sharding 的话, 读取压力可以分配到不同机器上 es 我不是很懂.. 大概要看几天文档, 配置 mapping 那里挺讲究的. |
32
luosiding 2018-03-21 18:20:51 +08:00
对于 es 我更喜欢 mongodb, 因为它的接口不想 es 用 http 协议传输,而且 3.2 版本换了存储引擎,换成了 writedtiger, 写入和压缩的性能更强大了
|
33
Leigg OP @Nick2VIPUser ok
|