对于任何感兴趣的人:我已经为我正在寻找的行为实现了代码,并在 google-code 上开源了它。在这里得到它!pojo-mvcc
--
嗨,大家好,
我正在尝试编写一个框架,其中包含许多从长期缓存创建的短期缓存。这些短期缓存需要能够返回它们的完整内容,这是原始长期缓存的克隆。
实际上,我正在尝试构建的是短期缓存的事务隔离级别。用户应该能够修改短期缓存的内容,但不应该传播对长期缓存的更改(根据缓存类型,也存在应该推送更改的情况)。
我会尽力解释:
主缓存包含:[A,B,C,D,E,F] 使用状态 [A,B,C,D,E,F] 创建的临时缓存
1) 临时缓存添加项目 G: [A,B,C,D,E,F] 2) 临时缓存删除项目 B: [A,C,D,E,F]
主缓存包含:[A,B,C,D,E,F]
3) master-cache 添加项 [X,Y,Z]: [A,B,C,D,E,F,X,Y,Z]
临时缓存包含:[A,C,D,E,F]
当项目中的值可以更改并且不应该总是更新时,事情变得更加困难(所以我什至不能共享底层对象实例,我需要使用克隆)。
我已经实现了一种简单的方法,即使用 ArrayList 上的标准 Collection 构造函数创建一个新的 List 实例,但是当您获得大约 200,000 个项目时,系统就会耗尽内存。我知道 200,000 的值对于迭代来说太过分了,但我想稍微强调一下我的代码。
我曾认为它可能能够以某种方式“代理”列表,因此临时缓存使用主缓存,并存储所有更改(实际上是更改的备忘录),但是当你想要迭代临时缓存,或在特定索引处检索项目。还考虑到我希望对列表的内容进行一些修改(取决于临时缓存的类型,是否是“自动更新”)并且我完全超出了我的深度。
任何指向技术或数据结构的指针或只是尝试和研究的一般概念将不胜感激。
干杯,
艾多斯