介绍
你在使用 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)
其他功能
- Erlang 官方文档列于
- 灵药学校还有一些示例代码。
- 就个人而言,
select系列函数很有趣。
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 活动日历” 查看/参与各种 Elixir 活动
原创声明:本文系作者授权爱码网发表,未经许可,不得转载;
原文地址:https://www.likecs.com/show-308626573.html