需求:存储 xml 报文,初期只做简单的插入,查询,数据量比较大,内网部署。 目前了解的模式有两种:1 、Replication set;2 、sharding 。想问下有实际生产经验的大佬是怎么权衡选择的。感谢!!!
1 dilu 2020-10-29 09:49:26 +08:00 via Android ![]() 2 踩过坑,写入性能大幅度下降,从每秒 5w+降到 k 级别,也可能是我们玩不转吧 也不是 dalao,只能说不管用啥,先压测一下看看能否达到你的性能要求 |
3 dilu 2020-10-29 09:53:49 +08:00 via Android @haosamax 分片之后,MongoDB 对网络的依赖较高,我们压测机器不在同一个机房只能走公网,估计这是个主要原因。 |
4 limboMu 2020-10-29 09:56:28 +08:00 ![]() 首先要对你的需求有个认识,插入频率是多少,查询频率是多少。如果是插入速率比较慢,查询比较多,可以用 1.用 2 的场景是数据量特别巨大,单机的查询效率跟不上或者你的插入频率比较快或者单机的插入效率跟不上 |
![]() | 5 haosamax OP |
&bsp; 6 Inside 2020-10-29 10:21:21 +08:00 replica set 可以单独用,但每个节点仍然要处理完整的数据集,应对不了数据集超过单节点能力的情况,不算突破了单节点瓶颈。 sharding 解决了数据集过大的问题。 |
![]() | 7 libook 2020-10-29 10:25:09 +08:00 ![]() ReplicaSet 的目标主要是容灾。 分片的目标主要是分布式存储和计算。 两者不是二选一的关系。 按照你的需求来看,主要是要分片,但如果有可靠性要求,ReplicaSet 也是免不了的。 分片的坑很多,需要较高的熟练程度才能保证合理应用,虽好多做实验。 另外不管怎么说,MongoDB 都是实时业务用的数据库,看你的需求是否适合;如果需求更像日志储存和分析,可以考虑如 ELK 之类的框架;如果量极大,且有清洗、仓库和更复杂的统分需求,可能要考虑一些主流的大数据技术栈。 |
9 Mithril 2020-10-29 10:29:30 +08:00 搭车问下,你们用 MongoDB 的有没有考虑过 License 问题。。。 |
11 laminux29 2020-10-29 10:41:48 +08:00 @Mithril MongoDB 自己就是个流氓,早期 10gen 为了拉投资,故意把服务端写策略默认值设置为先响应落地成功再进行落地 + 落地失败就丢弃数据,来提高跑分吸引投资。 所以在国内用,不用管它 License,除非做国际化,那就要考虑一下了。我猜测后期 10gen 可能会走 Oracle 这种 1 个码农+10 个法务的配置来捞钱。 |
![]() | 13 libook 2020-10-29 11:14:29 +08:00 |
![]() | 14 libook 2020-10-29 11:27:31 +08:00 @haosamax 看你的描述,更像是消息队列。 如果你是希望把任务异步化;即受到请求不马上处理,下游集群异步处理请求;可以考虑使用一些消息队列方案。消息队列可以作为一个缓冲区,对业务集群的负载进行削峰填谷,不会时而 200%负载、时而 50%负载,而是匀速 100%负载运行。 |
![]() | 15 up101 2020-10-30 09:00:54 +08:00 RS 和 sharding 结合来做的话,怎么设计集群架构比较合适? |