【发布时间】:2012-06-04 05:23:51
【问题描述】:
我正在尝试实现一个简化的内存缓存“表”,其中有两种类型的索引:主索引和辅助索引。
主索引将单个键(主键)映射到唯一值(映射接口)
二级索引将单个键映射到值集合(Multimap 符合要求)
与 RDBMS 世界中的表非常相似,其中一个表具有多个查找列。有时您想按 PK 搜索,有时返回基于公共属性的行列表。目前,除了等于 (=) 之外,不需要其他操作(即没有范围查询或模式匹配)。
将缓存语义添加到上述数据结构(驱逐、数据填充/缓存加载器、刷新等),这就是我们所需要的。
我想就如何最好地解决给定问题征求您的意见。应该是 Cache per index 还是 Cache (for PK) + (synchronized) Multimap for secondary index ?
非常感谢任何帮助。
问候。
【问题讨论】:
-
安德烈,给出的答案有多大帮助?
-
对不起,但我看不出你是如何假装缓存你的数据结构的。如我所见,如果您按 PK 搜索,它将访问您的地图并在 O(1) 中找到正确的元素(如果一切正常),对吗?你想缓存什么?
-
嗨普林尼奥。假设我尝试缓存用户。它们可能具有
userId和group属性。当我通过userId搜索时,只会返回 1 个元素,因为它是 PK。通过group查找将返回Collection<User>(例如,管理组中的所有用户)。添加 User{userId:123, group:'admin'} 将更新两个索引 -
@kevin-bourrillion 还没有明确的答案。
标签: java caching indexing guava