包含复杂对象的Mongo集合的数据模型建议

时间:2013-02-26 21:46:10

标签: mongodb data-modeling mlab mongohq database

我们将苹果应用数据存储在数据库中(http://www.apple.com/itunes/affiliates/resources/documentation/itunes-enterprise-partner-feed.html)。

我们希望针对一种类型的查询进行优化:查找符合某些条件的所有应用。标准:(1)app的平均评分; (2)应用程序评级数量; (3)app支持的设备; (4)销售应用程序的国家; (5)app的当前价格; (6)应用程序免费的日期。查询应该尽可能快。示例查询:“查找所有带有> 600评级的应用,平均5星,支持iPad和iPhone,在美国销售,并在两天前降价至0.00美元。”

基于苹果架构,每个国家都有价格信息。假设苹果支持100个国家,每个应用程序将有100个价格 - 每个国家一个。我们还需要存储每个应用程序的历史价格,这意味着具有10个价格变化的应用程序将具有1000个价格(假设100个国家/地区)。

三个问题:

1)您如何建议我们将价格数据存储在mongo中以快速查询?现在,我们正在考虑将价格存储为一系列对象。每个对象由三个元素组成:(1)日期; (2)国家; (3)价格。

2)如果我们将价格数据存储为数组中的对象,我们需要做些什么才能非常快速地对价格数据进行搜索。再一次,普通价格搜索就像是,“找到所有在美国商店再次将价格降至0.00美元的应用程序。”

3)在存储数据时我们应该注意哪些问题?

1 个答案:

答案 0 :(得分:3)

就个人而言,我会为每日价格数据单独收集 - 每个应用程序每天1条记录(复合自然键),当天为该应用程序设置10​​0个数字。这样,记录永远不需要增长或重新定位 - 这是一个巨大的胜利。使用适当的索引,大多数针对此集合的查询都可以很好地执行。保持字段名称较小,以便更有效地存储。

我会为应用程序“主数据”保留一个单独的集合 - 每个应用程序1条记录。在这些记录中,您可以记住应用程序免费的最新日期,最新的按国家/地区价格向量的快照,以及可能构成应用搜索选择条件的任何其他“摘要”数据的类似快照值。计算和记录这些值的汇总(如果它们可能变得昂贵)可以在方便的时候在后台执行。

希望这是一个帮助!很高兴你提前问这些问题。 :)