当前位置 : 主页 > 网络推广 > seo >

elixir – 如何在不扫描整个表的情况下检索ets键列表?

来源:互联网 收集:自由互联 发布时间:2021-06-16
我使用ets通过elixir作为一个简单的内存持久层来存储和检索键,也用于偶尔的foldl,它涉及减少许多具有不同值的重复键.我正在使用行李选项. 是否有一种简单的O(1)方法来检索当前密钥的
我使用ets通过elixir作为一个简单的内存持久层来存储和检索键,也用于偶尔的foldl,它涉及减少许多具有不同值的重复键.我正在使用行李选项.

是否有一种简单的O(1)方法来检索当前密钥的列表而无需进行更多涉及的表遍历或匹配或折叠?

Erlang或Elixir语法响应欢迎.

:ets.new(:cache, [:bag, :named_table, :protected])

我有一个原子键的静态映射,由我用来帮助插入的整数索引.但并非所有的钥匙都被使用..

chunk_key_map = %{2 => :chunk_key_2, ..... 28 => :chunk_key_28}

如果没有快速的方法,我知道我可以做一个ets:查找我的每个静态原子键值并测试!= []并生成我自己的列表,但想看看ets是否支持这样的功能.

谢谢

谢谢,这让我走上了正确的轨道:)

同样的事情,但将前一个键作为累加器传递:

def key_stream(table_name) do
  Stream.resource(
    fn -> :ets.first(table_name) end,
    fn :"$end_of_table" -> {:halt, nil}
       previous_key -> {[previous_key], :ets.next(table_name, previous_key)} end,
    fn _ -> :ok end)
end
网友评论