Azure CosmosDB - 地理参考数据的分片策略?

Azure CosmosDB - Sharding Strategy for georeferenced data?

我在 cosmos 上收集了大约 100 万份这样的文档:

{
   "title":"My Happy Bakery",
   "address":"155 Happy Avenue, Happy City",
   "location" : {
        "coordinates" : [
            -46.66357421875,
            -23.6149730682373
        ],
        "type" : "Point"
    }
}

一些加分:

  1. 搜索模式基于点和半径,例如位置字段中的“我附近的餐馆”
  2. 我们说的是餐馆和市场,所以它们都集中在大都市地区......它们在很多地方都没有
  3. 有些城市会有很多文档(例如 70k),而其他城市则很少(例如 10)
  4. 邮政编码在这里被认为是有用的,因为我无法通过它进行过滤...我无法确定哪些邮政编码在 Xkm 半径圆内...
  5. 城市也是一个问题,因为在 BR 中,很多城市都是“连续的”,也就是说,1 公里半径搜索会找到很多位于不同 cities/counties
  6. 的文件
  7. 州不是一个好的选择,因为文档大量集中在 4-5 个州。根据您的位置确定您所处的状态也是一个挑战……并非不可能,但很难……

对于这种情况,好的(或理想的)分片策略是什么?这是我第一次分片这种情况所以我有点迷路...

编辑 1:
加分3、4、5、6

我最终使用距赤道的距离(以米为单位)除以 250。我使用此函数计算距离:

public static double Calculate(double lat)
{
    double rad(double angle) => angle * 0.017453292519943295769236907684886127d; // = angle * Math.Pi / 180.0d
    double havf(double diff) => Math.Pow(Math.Sin(rad(diff) / 2d), 2); // = sin²(diff / 2)
    return 12745600 * Math.Asin(Math.Sqrt(havf(lat))); // earth radius 6.372,8km x 2 = 12745.6
}

在查询时,我们看到我们的请求时间从 2-3 秒下降到 140 毫秒。在这种分片策略之前,我们有一个地理索引很有帮助,但分片改变了一切。顺便说一句,这对我们的集合有效,其中文档大约为 1KB,分配了 400 RU