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

2018-03-20 12:35:27 +08:00
 Leigg

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

2087 次点击
所在节点    数据库
33 条回复
Leigg
2018-03-20 14:10:19 +08:00
@monsterxx03 超有质量的回答,感谢!
看老哥你提到了 elasticsearch,能简单给我说说它有什么优势吗?谢谢啦
monsterxx03
2018-03-20 14:24:51 +08:00
ES 就是一个搜索引擎, 适合用来对一些非结构化数据做搜索, 举个例子:比如你把论坛里的帖子都存进去,论坛里提供搜索功能的话,可以很快的按关键词得到相应的帖子,并给你一个 score,表示每个搜索结果和关键词的相关性. MySQL 虽然也有全文索引, 没法和 ES 比.

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

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

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

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

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

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

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

es 我不是很懂.. 大概要看几天文档, 配置 mapping 那里挺讲究的.
luosiding
2018-03-21 18:20:51 +08:00
对于 es 我更喜欢 mongodb, 因为它的接口不想 es 用 http 协议传输,而且 3.2 版本换了存储引擎,换成了 writedtiger, 写入和压缩的性能更强大了
Leigg
2018-03-21 23:29:29 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/439666

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX