#sharding #distributed-systems #location #user #algorithm #sized #right

location_based_sharding

适当规模的分片算法

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 算法

MIT 许可证

40KB
842

基于位置的分片算法

Docs.rs

基于 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