python - 如何使其成为查询搜索的最佳选择,Mongodb?
问题描述
我有一个格式为:
{
"location_id": "11670",
"readings": [
{
"S1": "10.77",
"S2": "7.20",
"humidity": "99.90",
"temperature": "12.80",
"timestamp": "1565597160"
},
{
"S1": "3.70",
"S2": "6.17",
"humidity": "99.90",
"temperature": "12.90",
"timestamp": "1565597520"
},
....
600 000 lines
]
}
我有一个包含 15 个传感器的集合,每个传感器都有 600 000 行(读数列表中的 99%)的 json 格式,我怎样才能使它最适合使用 mongodb 进行搜索?我应该每小时将数据解析到存储桶中吗?我可以在 python 中为这个示例 json 提供一些示例代码吗?您能告诉我在数据查询的读数列表中构建数据的最佳方式是什么吗?我应该为每个传感器收集 15 个集合还是只收集存储桶?文档的总量也是 16 mb,这是否意味着我的读数小于那个?
解决方案
我会将数据构建到readings
MongoDB 中的一个集合中,其文档架构如下:
{
"location_id": "11670",
"S1": 3.70,
"S2": 6.17,
"humidity": 99.90,
"temperature": 12.90,
"timestamp": 1565597520
}
避免将数据存储为字符串,而是使用双精度数和Date
时间戳记。这使得限制范围时的查询更容易。此外,您应该在要过滤查询的字段上创建索引。
如果您计划将来添加更多传感器,我认为当您将location_id
as 字段存储在文档中并仅使用一个集合时,您的架构会更加灵活。否则,在添加新位置时,您总是必须添加新集合。
我的方法将每个读数存储为一个小文档。如果您的数据对于一台服务器来说太大,这使得对您的数据进行分片变得很简单,例如在时间戳上。如果您将所有读数存储在一个文档中(每个传感器),那么当您达到每个文档 16 MB 的限制时只是时间问题,您将无法向现有文档添加新读数。这可以通过上述每次阅读一个文档的模式来避免。
推荐阅读
- c# - 如何在 .NET 的 GraphQL 中为自定义对象设置 ListGraphType?
- flutter - Google Map Place Picker 包不显示选择的结果
- c# - .NET 5.0 应用程序的 Azure AppService 日志记录
- python - 如何在 PyQt5 中使用另一个隐藏类的属性
- oracle - 我需要在我的程序中添加约束“不超过两个制造商具有相同的产品”
- ansible - 运行 ansible playbook 时出现以下错误
- python - 是否有一个 8 位代码页 (CP-####) 来定义每个字节?
- python - 使用 Reactjs 在 xlsx 或 csv 中导出时无法在 AGGRID 表中获取相同的数据
- dropdown - bootstrap3 typeahead下拉滚动使用keyup和keydown
- android - 将文件上传到服务器 amazon S3 而不会损坏多部分文件