首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >蒙古数据库存储10亿份文件所需的最少碎片数是多少?

蒙古数据库存储10亿份文件所需的最少碎片数是多少?
EN

Stack Overflow用户
提问于 2021-12-22 01:47:34
回答 1查看 412关注 0票数 0

我们需要存储10亿个文档,每个文档为1KB。每个碎片计划有8GB的RAM。该平台是Open红帽Linux。

最初,有10个碎片,用于3亿。我们开始使用2000 inserts/秒插入文档。一切都很顺利直到2.5亿。之后,插入速度急剧减慢到每秒300/400插入

查询也需要很长的时间(超过1分钟),甚至所有的查询都是覆盖的查询。(需要扫描所有索引的查询)。

因此,我们假设,每个碎片有2000万个是最优值,因此我们需要50个碎片来实现当前硬件的10亿。

这是合理的估计,还是我们可以通过调整mongo参数来改进它(更少的碎片),以提高当前硬件的性能?

有两个复合索引,一个唯一的索引(Long)是使用批量写入(带有无序选项)完成的,每(线程)使用mongos.Shardkey脚本直接进行200条记录大容量写入,mongos.Shardkey是nodeId(复合索引前缀),其基数高达10k。对于3亿,总索引大小为45 GB,40 GB的2复合indexes.Almost 9500块是分布在10 nodes.One有趣的事实是,如果我把内存增加到12 GB,速度增加到1500插入/秒。RAM限制因素?

更新:

使用mongostat工具,我们发现complete.MongoDB集群运行在基于RedHat OpenShift平台的kubernetes上需要超过55秒的时间。它以NFS (EXT4磁盘格式).Is在戴尔EMC服务器上运行,这是I/O中的一个问题,它只支持2MB/秒。每秒写入2000条记录需要60秒,完全刷新到磁盘需要55秒钟。(在此期间,DB的所有操作都被阻止),磁盘利用率甚至不到4 %。

EN

回答 1

Stack Overflow用户

发布于 2021-12-28 01:58:36

你试过一点都不切分吗?

有一种普遍的倾向,就是过早地切碎。我见过一位MongoDB顾问,他提出了一条经验法则,除非您的总数据大小至少为2TB,否则不要将其分解。每个1KB的1B文件应该在1 TB左右。虽然这只是一条经验法则,但也许值得一试。

如果没有其他的,那么在没有切分的情况下设计db就会简单得多,而且性能将更加可预测。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70443405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档