试图了解 Consistent Hashing 如何在数据库服务器上更好地工作
Trying to understand how Consistent Hashing works better on database servers
关于 Twitter 或 Instagram 设计
基于 UserID 的分片:我们可以尝试将一个用户的所有数据存储在一台服务器上。在存储时,我们可以将 UserID 传递给我们的哈希函数,该函数将用户映射到数据库服务器,我们将在其中存储用户的所有推文、收藏夹、关注等。在查询用户的 tweets/follows/favorites 时,我们可以询问我们的哈希函数我们在哪里可以找到用户的数据,然后从那里读取它。这种方法有几个问题:
用户火了怎么办?持有用户的服务器上可能有很多查询。这种高负载会影响我们服务的性能。
随着时间的推移,一些用户最终可能会存储大量推文或与其他用户相比拥有大量关注者。保持不断增长的用户数据的均匀分布是相当困难的。
要从这些情况中恢复,我们必须 repartition/redistribute 我们的数据或使用
基于 TweetID 的分片:我们的哈希函数会将每个 TweetID 映射到我们将存储该推文的随机服务器。要搜索推文,我们必须查询所有服务器,每个服务器将 return 一组推文。中央服务器会将这些结果汇总到 return 给用户。让我们看一下时间轴生成示例;以下是我们的系统为生成用户时间线必须执行的步骤数:
我们的应用程序(app)服务器会找到用户关注的所有人。
应用程序服务器会将查询发送到所有数据库服务器以查找来自这些人的推文。
每个数据库服务器都会找到每个用户的推文,按新近度和 return 排名靠前的推文对它们进行排序。
应用服务器将合并所有结果并将它们重新排序以 return 最靠前的结果提供给用户。
这种方法解决了热门用户的问题,但是,与按 UserID 进行分片相比,我们必须查询所有数据库分区才能找到用户的推文,这会导致更高的延迟。
我的问题是一致性哈希在这里有何帮助?一致性哈希创建一个环,并试图将具有虚拟副本的均匀分布的服务器放置起来。一致性哈希对流行的 tweetID 或热点区域究竟有何帮助?
https://www.toptal.com/big-data/consistent-hashing
一致性哈希在添加和删除服务器时很有用,而无需重新哈希所有数据库,但仅需要平均重新哈希仅对 k/n 调整大小,其中 k 是数据键,n 是服务器数量。
关于 Twitter 或 Instagram 设计 基于 UserID 的分片:我们可以尝试将一个用户的所有数据存储在一台服务器上。在存储时,我们可以将 UserID 传递给我们的哈希函数,该函数将用户映射到数据库服务器,我们将在其中存储用户的所有推文、收藏夹、关注等。在查询用户的 tweets/follows/favorites 时,我们可以询问我们的哈希函数我们在哪里可以找到用户的数据,然后从那里读取它。这种方法有几个问题:
用户火了怎么办?持有用户的服务器上可能有很多查询。这种高负载会影响我们服务的性能。 随着时间的推移,一些用户最终可能会存储大量推文或与其他用户相比拥有大量关注者。保持不断增长的用户数据的均匀分布是相当困难的。 要从这些情况中恢复,我们必须 repartition/redistribute 我们的数据或使用 基于 TweetID 的分片:我们的哈希函数会将每个 TweetID 映射到我们将存储该推文的随机服务器。要搜索推文,我们必须查询所有服务器,每个服务器将 return 一组推文。中央服务器会将这些结果汇总到 return 给用户。让我们看一下时间轴生成示例;以下是我们的系统为生成用户时间线必须执行的步骤数:
我们的应用程序(app)服务器会找到用户关注的所有人。 应用程序服务器会将查询发送到所有数据库服务器以查找来自这些人的推文。 每个数据库服务器都会找到每个用户的推文,按新近度和 return 排名靠前的推文对它们进行排序。 应用服务器将合并所有结果并将它们重新排序以 return 最靠前的结果提供给用户。 这种方法解决了热门用户的问题,但是,与按 UserID 进行分片相比,我们必须查询所有数据库分区才能找到用户的推文,这会导致更高的延迟。
我的问题是一致性哈希在这里有何帮助?一致性哈希创建一个环,并试图将具有虚拟副本的均匀分布的服务器放置起来。一致性哈希对流行的 tweetID 或热点区域究竟有何帮助?
https://www.toptal.com/big-data/consistent-hashing
一致性哈希在添加和删除服务器时很有用,而无需重新哈希所有数据库,但仅需要平均重新哈希仅对 k/n 调整大小,其中 k 是数据键,n 是服务器数量。