我有一个内存缓存,它通过一定程度的聚合存储一组信息 - 在下面的学生示例中,假设我按年份,主题,教师存储它:
# Students Year Subject Teacher
1 30 7 Math Mrs Smith
2 28 7 Math Mr Cork
3 20 8 Math Mrs Smith
4 20 8 English Mr White
5 18 8 English Mr Book
6 10 12 Math Mrs Jones
现在不幸的是我的缓存没有GROUP BY或类似的功能 - 所以当我想在更高级别的聚合中查看事物时,我将不得不自己“卷起”数据。例如,如果我按年份汇总学生,则上述数据将如此:
# Students Year Subject
1 58 7 Math
2 20 8 Math
3 38 8 English
4 10 12 Math
我的问题是 - 我如何才能在Java中做到最好?从理论上讲,我可以从这个缓存中撤回数万个对象,因此能够快速“汇总”这些集合可能会变得非常重要。
我最初的(也许是天真的)想法是沿着以下几点做点什么;
直到我耗尽记录清单:
现在我知道这是一个相当普遍的问题,并且有更好的方法来做到这一点。所以我欢迎任何关于我是否指出自己正确方向的反馈。
“获取新缓存”不是我害怕的选择:)
-Dave。
答案 0 :(得分:0)
你的“初步想法”并不是一个糟糕的方法。改进它的唯一方法是为您聚合的字段(年份和主题)建立索引。 (这基本上是dbms在定义索引时的作用。)然后,您的算法可以重新编译为迭代所有索引值;你不必检查每条记录的结果哈希值。
当然,您必须在填充缓存时构建索引,并在修改数据时对其进行维护。