use*_*402 8 database-design mongodb
我使用mongodb存储30天的数据,这些数据作为流来到我这里.我正在寻找一种清除机制,通过它我可以丢弃最旧的数据,为新数据创造空间.我以前使用mysql,我使用分区处理这种情况.我保留了30个以日期为基础的分区.我删除了最旧的日期分区并创建了一个新分区来保存新数据.
当我在mongodb中映射相同的东西时,我觉得使用基于日期的"分片".但问题是它使我的数据分发变坏.如果所有新数据都在同一个分片中,那么该分片将会很热,因为有很多人访问它们,并且包含旧数据的分片将减少用户的负载.
我可以有一个基于集合的清除.我可以有30个收藏品,我可以丢弃最旧的收藏品以容纳新数据.但是有几个问题是1)如果我将集合缩小,那么我不能从分片中获益,因为它们是按照每个集合完成的.2)我的查询必须更改为从所有30个集合中查询并进行联合.
请建议我一个很好的清除机制(如果有的话)来处理这种情况.
在MongoDB中只有三种方法可以进行清除.看起来你已经确定了几个权衡因素.
选项#1:单一集合
利弊
缺点
选项#2:每天收集
利弊
collection.drop()非常快速地删除数据.缺点
选项#3:每天数据库
利弊
缺点
现在有一个选项#4,但它不是一般解决方案.我知道有些人只是使用Capped Collections来"清除" .肯定有这样的情况,但它有一些警告,所以你真的需要知道你在做什么.
我们可以从mongodb 2.2版本或更高版本中设置TTL用于收集.这将帮助您从集合中过期旧数据.
请点击此链接:http://docs.mongodb.org/manual/tutorial/expire-data/
| 归档时间: |
|
| 查看次数: |
9425 次 |
| 最近记录: |