我正在开发一种监控计算机的服务.可以通过Web GUI添加或删除计算机.我将报告的数据基本保存在各种地图中Map<Computer, Temperature>.现在收集的数据增长并且数据结构变得更加复杂(包括相互引用的计算机),我需要一个概念,说明从监控中删除计算机时会发生什么.基本上我需要删除被删除的计算机报告的所有数据.最像KISS的方法是从内存中手动删除数据,比如
public void onRemove(Computer computer) {
temperatures.remove(computer);
// ...
}
Run Code Online (Sandbox Code Playgroud)
每当我添加功能时都必须更改此方法:-(我知道Java有WeakHashMap,所以我可以存储报告的数据,如下所示:
Map<Computer, Temperature> temperatures = new WeakHashMap<>();
Run Code Online (Sandbox Code Playgroud)
System.gc()每当计算机从监控中移除时我都可以打电话,以便从这些地图中急切地删除所有相关数据.
虽然第一种方法看起来有点像原始的MyISAM表,但第二种方法类似于InnoDB表中的DELETE级联.但它仍然感觉有点不舒服,可能是错误的方法.你能否指出WeakHashMaps这个问题的优缺点或提出其他解决方案?
不确定你的情况是否可能,但你的计算机类不能拥有所有的属性,然后有一个列表monitoredComputers(或者有一个包装类MonitoredComputers,在那里你可以包装所需的任何逻辑getTemperatures()).通过它,可以从该列表中删除它们,而不必查看所有属性列表.如果计算机是从另一台计算机引用的,那么您必须遍历该列表并从拥有它的人那里删除引用.
| 归档时间: |
|
| 查看次数: |
201 次 |
| 最近记录: |