介绍

你在使用 Erlang 术语存储(ETS)吗?
这很方便,因为它可以从 Elixir 中使用而无需任何依赖。

确实,ETS 功能有些特殊且难以使用。
所以灵药地图我想如果我能用风接口的ETS,会更容易使用,所以我尝试了。

什么是 ETS

随意使用 ETS

  • 如果您至少有这么多,您可以轻松使用 ETS。
  • 让我们提前创建一个命名的 ETS 表。
  • 通过模块插入和取值也很方便。

构建您自己的 ETS 模块

defmodule MyEts do
  def init, do: :ets.new(__MODULE__, [:set, :named_table])

  def get(key, default \\ nil) do
    case :ets.lookup(__MODULE__, key) do
      [] -> default
      [{_, value} | _] -> value
    end
  end

  def put(key, value), do: :ets.insert(__MODULE__, [{key, value}])

  def delete(key), do: :ets.delete(__MODULE__, key)
end

做一张桌子

MyEts.init()

在表中插入值

MyEts.put(:feeling, "awesome")

从表中获取值

MyEts.get(:feeling)

从表中删除值

MyEts.delete(:feeling)

其他功能

db = :ets.new(:example_db, [:set, :named_table])
for i <- 0..9, do: :ets.insert(db, [{i, i**2}])

# キーの範囲を指定して複数の値を取得
match_spec = :ets.fun2ms(fn { key, value } when key in 3..5 -> value end)
:ets.select(db, match_spec)

匹配规格

  • 匹配规格有一种机制允许您使用 Erlang 自己的查询语言进行搜索,称为 .
  • 匹配规格可以自己写:ets.fun2ms/1函数(或ex2msHex 包提供的Ex2ms.fun/1 宏很有用。
  • 这有点令人困惑,但是一旦你习惯了它,你就会喜欢它。
# :ets.fun2ms(fn { key, value } when key in 3..5 -> value end)
[
  {{:"$1", :"$2"},
   [
     {:andalso, {:is_integer, :"$1"},
      {:andalso, {:>=, :"$1", 3}, {:"=<", :"$1", 5}}}
   ], [:"$2"]}
]

举个例子ex_ratedHex 包使用 Match Spec 在某些条件下删除旧数据。

错误

  • 有时您会收到令人困惑的特定于 Erlang 的错误消息。
# 2回同じ名前のテーブルを生成した場合に出るエラー
iex> :ets.new(:example_table, [:set, :named_table])
:example_table

iex> :ets.new(:example_table, [:set, :named_table])
** (ArgumentError) errors were found at the given arguments:

  * 2nd argument: invalid options

    (stdlib 4.0.1) :ets.new(:example_table, [:set, :named_table])
    iex:2: (file)

DETS

  • ETS 是内存数据存储,而 DETS 是基于磁盘的存储。
  • 功能类似于 ETS。
  • 因为是基于磁盘的,所以数据库文件在使用后必须打开和关闭。

各种地图@zacky1972

此外,@zacky1972 还实现了各种 Maps。

最后

享受长生不老药!

各社区详情请看《Elixir社区怎么走-国内线上版-》

ElixirでErlang Term Storage(ETS)を気軽に使う

ElixirでErlang Term Storage(ETS)を気軽に使う

您可以从“Elixir 活动日历”ElixirでErlang Term Storage(ETS)を気軽に使う 查看/参与各种 Elixir 活动

ElixirでErlang Term Storage(ETS)を気軽に使う


原创声明:本文系作者授权爱码网发表,未经许可,不得转载;

原文地址:https://www.likecs.com/show-308626573.html

相关文章: