【发布时间】:2014-05-20 09:07:15
【问题描述】:
在我的环境中,我可以拥有 5-10 GB 的数据库或 10 TB 的数据库(视频录制)。
专注于 5-10 GB:如果我保留 prealloc 和 small-files 的默认设置,由于分配,我实际上可以释放 20-40% 的磁盘空间。
在我的生产环境中,磁盘大小可以为 512G,但用户可以将 DB 分配限制为仅 10G。
为了实现这一点,我有一个计划任务,当 DB dataSize 达到某个阈值时,它会从 DB 中删除旧文档。
我不能使用capped-collection(GridFS,分片限制,不能删除随机文档..),我不能使用--no-prealloc/small-files 标志,因为我需要文件插入效率。
那么会发生什么情况:如果 dataSize 达到 10G,则 fileSize 至少为 12G,所以我需要考虑到这一点并将阈值降低到 2GB(并丢失大量磁盘空间)。
我想要的是告诉 mongo 预分配用户请求的所有 10 GB,并进一步禁用预分配。
例如,使用 --no-prealloc 和 --small-files 运行 mongod,但提前预分配所有 10 GB。
我在这里获得的另一个保护是保护用户免受突然的磁盘已满错误。如果他定期将《权力的游戏》剧集下载到同一个驱动器,他就无法从 DB 10G 中占用空间,因为它已经预先分配了。
(使用 C# 驱动程序)
【问题讨论】:
-
非常感谢,如果“密切”的选民可以与我分享一些知识。否则,它不会改善我的下一个问题。