0

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

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

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

三个问题:

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

2) 如果我们将价格数据作为对象存储在一个数组中,我们需要做什么才能非常快速地搜索价格数据。同样,常见的价格搜索类似于“在美国商店中查找所有在 2 天内再次将价格降至 0.00 美元的应用程序”。

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

4

1 回答 1

3

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

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

希望这是一个帮助!太好了,你提前问了这些问题。:)

于 2013-02-26T22:47:45.790 回答