我正在为使用 MongoDB 存储的监控/日志记录应用程序定义数据模型。由于我是 MongoDB 新手,我希望您能给我一些建议。
应用程序写道:
我有 10'000 个记录器,对于我拥有的每个记录器:
- 不随时间变化的静态数据(每个记录器几千字节)
- 我必须记录的数据每隔几秒钟从每个记录器连续传入
数据量为:
- 每个记录器每天 1 MB 或 9000 条消息
淘汰模式:
- 数据必须在创建后 30 天由系统自动删除
- 60% 的数据在 30 天前被其他系统获取,并将在获取时删除
该应用程序的内容如下:
- 如果数据被读取,则所有消息都会立即从系统中删除
- 数据在创建后最快 1 小时和最晚 30 天被读取。平均为 14 天。
平均值:
- 我计算出数据存储的平均时间为 14 天,即每个记录器提供 40'000 条消息或 13MB
- 数据库中存储的数据总量平均为130GB
我的问题:
- 你会使用什么数据模型?
- 你会使用多少个分片?
我考虑了以下数据模型:
- 嵌入:每个记录器的一个文档,其中包含一组消息;由于文档增长时磁盘重定位而导致错误
- 每个记录器的上限集合;不好,因为磁盘使用量大并且数据被覆盖之前的时间不精确
- 静态数据的记录器集合以及使用 TTL 功能的消息的每个记录器集合;10'000个收藏可以吗?
- 静态数据的记录器集合以及使用 TTL 和复合索引(包括车辆和消息 ID)的所有消息的单个集合;那个收藏不是很大吗?
- 静态数据的记录器集合,包括带有 id 引用的预分配数组以及带有索引 id 的所有消息的集合;太复杂?
您可以自由提出其他数据模型