【发布时间】:2018-09-24 20:30:51
【问题描述】:
我正在尝试了解监控应用程序的最佳建模方式。
我有一个监控应用程序,它将每 30 分钟运行一次,以从目标系统获取统计信息并将详细信息存储在 MongoDB 中。
用例:
产品、公司
将有大约 2000 种产品。产品将被添加/删除,但每个月的增长不会超过 10%。所以,我预计未来 1 年不会超过 3000 个。
公司是每种产品的消费者。每个产品将有 1 到 10 家公司在使用该产品。消费者数量也会上下浮动。
因此,在每次运行时,我们都会获得产品列表以及相应的公司。产品详情会像,
产品:
- 产品名称
- 总数(这将提供当前可用的数字,并且每次投票都会改变)
- 产品重量
- 耐用天数(可能会不时改变)
- 公司列表 - 谁在使用此产品
产品样本数据:
{
"productName" : "Small Box",
"total" : NumberLong(1000),
"weight" : "1.5",
"durability" : "20",
"companies" : [
{
"name" : "Nike",
"taken" : NumberLong(10)
},
{
"name" : "Reebok",
"taken" : NumberLong(20)
}
]
}
在这里,每次投票时的计数都会不断变化。
网络应用程序:
将有 3 个屏幕显示详细信息。
- 仪表板 - 将显示高级统计信息,例如(产品数量、公司数量、总规模......)
-
产品 - 列表视图(查看完整列表)- 将在选择任何产品时显示产品的详细信息
在这里,我必须显示产品详细信息,并且必须列出所有正在消费的公司。
-
公司 - 列表视图(查看完整列表)- 将显示每个选择任何公司的详细公司
在这里,我必须显示公司的详细信息以及它正在消费的所有产品。
顺便说一下,我目前正在存储。
-
仪表板集合 - 显示统计详细信息,例如产品总数、公司总数……
{ “时间” : "totalProducts" : NumberLong(1000), “totalCompanies”:“1.5”, }
产品集合 - 将包含以下详细信息。
{ "productName" : "Small Box", "total" : NumberLong(1000), "weight" : "1.5", "durability" : "20", "companies" : [ { "name" : "Nike", "taken" : NumberLong(10) }, { "name" : "Reebok", "taken" : NumberLong(20) } ] }
- 公司集合 - 将包含以下详细信息
{ "companyName" : "Nike", "products" : [ { "name" : "Small Box", "taken" : NumberLong(10) }, { "name" : "Medium Box", "taken" : NumberLong(20) } ] }
因此,在每次运行时,我都会生成唯一的 ID,并将此 ID 添加到所有正在存储的数据中。我在这些集合中只保留最后 2 周的数据。超过 2 周的数据将每天清理。
因此,当用户来到仪表板时,进行排序以获取最新记录并显示详细信息。 Dashboard 集合中的每次运行只有一条记录,并且会有最近 2 周的记录。
当用户进入 Products 屏幕时,仍然必须从 Dashboard 获取最新记录以获取 UniqueId,然后转到 Products 集合以获取该 UniqueId 的所有记录,因为每次运行将有大约 2000 条记录。公司收藏也是如此。
在这里,我必须始终显示最新数据。当用户进入产品或公司屏幕时,我将选择 2 个不同的集合。
有没有更好的方法?
【问题讨论】:
标签: mongodb