为基于日期的全球DocumentDB应用程序选择正确的PartitionKey

San*_*ous 0 database geospatial azure nosql azure-cosmosdb

我正在开发一个全球应用程序,其中大多数搜索基于地理数据(最近的记录给定坐标)和日期范围.

因此,基本上可能是AirBnb,Booking等应用程序的主要搜索.

考虑到这些上下文,我应该在DocumentDB分区集合中选择哪个分区键

谢谢!

更新:就像我告诉马蒂亚斯(见答案),我和我的朋友,我们正在考虑像国家这样的事情.该应用程序是关于搜索.另一件重要的事情是我们有约会.大量的约会.由于我们是DDB的新手,我们的问题是:" 如果我们选择国家作为分区密钥,我们的查询必须在不同国家/地区内搜索,会发生什么? ".即在国家边界附近搜索georadius.

Ara*_* R. 5

与Matias提到的一样,更多信息将有助于我们提供更好的建议.我在下面添加了一些分区键选择的想法/选项:

  • 使用通用分区键,如用户ID或产品ID.在此模型中,您的地理空间查询将跨分区执行,但由于DocumentDB在分区内本地构建空间索引,因此可能会满足您的性能需求
  • 使用基于位置的GeoHash的分区方案.这将确保类似位置的数据点将放置在相同的分区上.这将需要您的应用程序中的一些额外工作添加"GeoHash> abcdef和GeoHash <abcfff"子句以将查询执行范围缩小到几个分区
  • 如果您的大多数查询属于单个国家/ 地区,则基于国家/地区等属性进行分区.需要跨越国家的罕见查询也将表现良好(尽管不像单个分区/国家的查询那样低延迟),因为它们可以使用每个分区内的本地索引.您可能需要单独处理特殊情况.例如,如果美国有> 30-40%的数据,您可能希望选择混合方法,其中美国数据使用州作为分区键,而数据较少的国家/地区使用国家/地区作为分区键.国家/日/月/年的复合键也可能有效,具体取决于数据分布.
  • 如果您的查询在时间范围内均匀分布,则可以考虑使用日期作为分区键.但对于大多数应用程序,由于最近访问的数据更频繁,因此这不是一个好的选择.