gpt4 book ai didi

clojure - 如何创建索引以快速访问 clojure 哈希表?

转载 作者:行者123 更新时间:2023-12-02 16:18:55 25 4
gpt4 key购买 nike

我希望在 clojure 哈希表中存储许多记录。如果我希望使用特定字段或范围查询快速访问特定记录,那么我有什么选择,而不必将数据存储在数据库中(这是数据最初的来源)。

我想我也想知道 STM 是否也适合存放大型索引数据集。

最佳答案

根据您想要将其推进到什么程度,您需要构建一个内存数据库。我假设您实际上不想这样做,或者可能使用已经存在的许多内存中 Java 数据库之一( DerbyH2 等)。

如果您希望对数据的多个属性进行索引或范围访问,那么您需要在 Clojure 数据结构中创建所有这些索引。 Clojure 映射将为您提供 O(log32 n) 时间访问数据(比常量更差,但仍然非常有限)。如果您需要更好的,您可以使用 Java map ,如 HashMapConcurrentHashMap直接警告您处于 Clojure 数据模型之外。对于范围访问,您需要某种排序的树数据结构...... Java 有 ConcurentSkipListMap这对于它的作用来说非常好。如果这还不够好,您可能需要自己的 btree impl。

如果您不更改此数据,那么 Clojure 的 STM 就无关紧要。该数据是否被视为数据库子集的缓存?如果是这样,您可能会考虑使用像 Ehcache 这样的缓存库相反(他们最近添加了对非常大的堆外缓存和搜索功能的支持)。

在内存缓存和持久存储之间平衡数据是一项棘手的工作,也是数据密集型应用中最重要的事情之一。

关于clojure - 如何创建索引以快速访问 clojure 哈希表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4562169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com