解释域名......
我有一堆(1,000,000)个项目,每种类型有12种可能类型(TypeA,TypeB ... TypeK) 有3个不可变的类即。 ItemKey(唯一标识项),ItemTypeKey(唯一标识类型)和ItemType(包含类型数据,包括ItemTypeKey)
我面前有一个缓存,可以将这些数据存储在两个数据结构中......
ConcurrentHashMap<ItemKey, ItemTypeKey>
ConcurrentHashMap<ItemTypeKey, ItemType>
我会将其简单地实现为ConcurrentHashMap<ItemKey, ItemType>
在这种情况下,内存占用量也是最小的,因为缓存只是存储引用。
分割我没有看到的缓存有什么特别的优势吗? 欢迎任何替代数据结构设计
答案 0 :(得分:0)
那么,您是否需要使用ItemTypeKey作为查找元素进行查找?这是你这样做的唯一原因。
您展示的样本的另一个潜在问题是潜在的竞争条件。这两个映射是ConcurrentHashMaps,这意味着有人计划在多线程情况下使用它。如果没有围绕两个映射的使用的同步锁(在这种情况下普通的HashMap可以正常),那么在添加/删除项目时,如果一个映射被更新而另一个映射未被更新,则可能存在短暂的不一致。这可能无关紧要 - 取决于该计划。
这是一种长期漫无边际的说法:“如果ItemKey是不可变的,你不需要ItemTypeKey作为查找(至少经常),你的重构对我来说听起来不错”:)