5 个版本
0.1.4 | 2022 年 2 月 6 日 |
---|---|
0.1.3 | 2022 年 2 月 5 日 |
0.1.2 | 2022 年 1 月 25 日 |
0.1.1 | 2022 年 1 月 25 日 |
0.1.0 | 2022 年 1 月 23 日 |
#1688 in 算法
40KB
842 行
基于位置的分片算法
基于 Tinder 的自研基于位置的分片算法,该算法将根据特定位置的用户“热度”创建分片。这种灵活的分片模式允许将较少密集的位置包含在较少的分片中,并将人口密集地区分割成不同的分片。
分片元数据
当启动分片时,它根据当前用户评分创建分片。这些分片需要保存在某种持久存储或数据库中。这可以用于像弹性搜索或任何数据库中的基于位置的分片。
一些需要考虑的权衡
- 密集城市中的用户可能需要多次击中多个分片
- 居住在边缘地区的用户可能会游荡,并且他们的信息需要移动
示例
// This can also be serialized and pulled from Redis
// let geoshards = GeoshardBuilder::from(&json_string_from_ddb)).unwrap();
let geoshards = GeoshardBuilder::user_count_scorer(8, Box::new(vec![].into_iter()), 40, 100).build();
let shard_searcher = GeoShardSearcher::from(geoshards);
let shard_user_is_in = shard_searcher.get_shard_user(some_user);
// Query you index based off the shard ^^^
依赖项
~2.6–3.5MB
~77K SLoC