平均分配算法实现?

发布于 2022-08-31 20:26:45 字数 155 浏览 9 评论 0

假设有A,B,C三个域。每一个域中可存放ip记录,如:
A:
1.1.1.1
2.2.2.2
5.5.5.5
假设A中有50条记录,B中有30条记录,C中有32条记录。现在有一批ip记录,如500个ip,需要尽量平均分配到这3个域中,如何实现这个功能?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

£烟消云散 2022-09-07 20:26:45

这种情况常用的两种算法:
1. 轮询,可以精准的保持平均,但是实现逻辑会略微复杂一点。并发情况需要考虑锁,涉及负载均衡需求的场景会经常用这种方式。
2. 随机,也就是用hash算法分配到任意一个bucket里面。这个方式实现简单,也有很多办法可以实现类似的效果,但数据量小的时候有几率会不平均。


除此之外,考虑到如果bucket数量会动态扩展还要保持平均,这种场景在分布式中非常常见,通常采用一致性hash

流殇 2022-09-07 20:26:45

先把A,B和C中的记录都取出来,然后依次循环给每个域插一条?

薆情海 2022-09-07 20:26:45

在A,B,C记录条数平均之前,每次都插入到记录条数最少的哪个域不就好了,记录条数平均之后,就循环呗

不寐倦长更 2022-09-07 20:26:45

hash table 也遇到了類似的問題。

所以你的可行解決方案之一也是 hash,然後映射到這三個域上。

梦罢 2022-09-07 20:26:45

参考抽奖算法? alias method ?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文