我希望在clojure哈希表中存储许多记录.如果我希望使用某个字段或范围查询快速访问某些记录,那么我有什么选项,而不必求助于将数据存储在数据库中(数据首先来自数据库).
我想我也想知道STM是否也是大型索引数据集的正确位置.
根据您想要推动的程度,您需要构建一个内存数据库.我假设您实际上并不想这样做,或者可能使用已经存在的许多内存中Java数据库中的一个(Derby,H2等).
如果要对数据的多个属性进行索引或范围访问,则需要在Clojure数据结构中创建所有这些索引.Clojure映射将为您提供O(log32 n)时间访问数据(比常数更差,但仍然非常有限).如果你需要更好的东西,可以直接使用HashMap或ConcurrentHashMap等Java地图,以及你在Clojure数据模型之外的警告.对于范围访问,您将需要某种排序的树数据结构... Java具有ConcurentSkipListMap,它非常适合它的功能.如果这还不够好,您可能需要自己的btree impl.
如果你没有改变这些数据,那么Clojure的STM就不重要了.此数据是否被视为数据库子集的缓存?如果是这样,您可能会考虑使用像Ehcache这样的缓存库(他们最近添加了对非常大的堆外缓存和搜索功能的支持).
在内存缓存和持久存储之间平衡数据是一项棘手的业务,也是在数据量最大的应用程序中实现最重要的事情之一.
| 归档时间: |
|
| 查看次数: |
418 次 |
| 最近记录: |