Bra*_*adC 5 sql algorithm np-complete bin-packing
我知道我的问题可能没有“完美”的解决方案(这听起来像是背包或垃圾箱包装问题的变体),但这是我的情况:
我想将 SQL 数据库表列表分成 n 个(假设为 7 个)大小大致相同的堆(这样我可以在整个星期内大致平均地分配一些维护任务)。
假设我有 100 个表(这可能更高或更低,但不太可能高于 5000),范围从 1 到 10,000,000(当然,更大的表不太常见)。
我最初的想法是按字母顺序(伪随机)对表格进行排序,然后从头开始遍历,当总数超过 Sum(Size)/7 时移动到下一组。对于某些数据库,这可能会正常工作,但如果两个巨大的表彼此相邻,则这会导致非常不平等的组。(这并不像听起来那么不可能,考虑两个巨大的表,Account_History 和 Account_History_Archive)。
是否有任何普遍接受的技术可以为各种源数据提供“良好”的结果?我倾向于更简单的技术,而不是更精确的分组(如果某些日子的维护时间比其他日子稍长,那没什么大不了的)。
如何按大小对表进行排序,然后对于每个表,将其放入当前总行数最少的那一天?这意味着最大的 7 张桌子将首先分布在几天内。然后,第 8 个最大的将与前 7 个中最小的一个,依此类推。您将继续以最少的工作量安排一天。
小参考表最终在哪里结束可能没有太大区别。
你可以发明一些不好的场景,但我希望它可以在实践中工作而不会太复杂。
| 归档时间: |
|
| 查看次数: |
1329 次 |
| 最近记录: |