平均分配算法实现?
假设有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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
这种情况常用的两种算法:
1.
轮询
,可以精准的保持平均,但是实现逻辑会略微复杂一点。并发情况需要考虑锁,涉及负载均衡需求的场景会经常用这种方式。2.
随机
,也就是用hash算法分配到任意一个bucket里面。这个方式实现简单,也有很多办法可以实现类似的效果,但数据量小的时候有几率会不平均。除此之外,考虑到如果bucket数量会动态扩展还要保持平均,这种场景在分布式中非常常见,通常采用
一致性hash
。先把A,B和C中的记录都取出来,然后依次循环给每个域插一条?
在A,B,C记录条数平均之前,每次都插入到记录条数最少的哪个域不就好了,记录条数平均之后,就循环呗
hash table 也遇到了類似的問題。
所以你的可行解決方案之一也是 hash,然後映射到這三個域上。
参考抽奖算法? alias method ?