Erlang 数据存储:ETS、DETS 与 Mnesia 数据库
1. ETS 与 DETS 基础
ETS(Erlang Term Storage)表用于在内存中存储元组,而 DETS(Disk ETS)则提供了在磁盘上存储 Erlang 元组的功能。DETS 文件最大为 2GB,使用前必须打开,使用完毕后应正确关闭,否则下次打开时会自动修复,而修复可能需要较长时间。
DETS 表与 ETS 表具有不同的共享属性。打开 DETS 表时,必须为其指定一个全局名称。如果两个或多个本地进程以相同的名称和选项打开 DETS 表,它们将共享该表,该表将保持打开状态,直到所有进程关闭该表(或崩溃)。
2. 示例:文件名索引
我们要创建一个基于磁盘的表,将文件名映射为整数,反之亦然。为此,我们定义 filename2index 函数及其逆函数 index2filename 。
为实现这一点,我们创建一个 DETS 表,并使用三种不同类型的元组填充它:
- {free, N} :N 是表中第一个可用的索引。当我们在表中输入新文件名时,它将被分配索引 N。
- {FileNameBin, K} :FileNameBin(二进制)已被分配索引 K。
- {K, FileNameBin} :K(整数)表示文件 FilenameBin。
每次添加新文件时,会向表中添加两个条目:一个是文件到索引的条目,另一个是索引到文件的反向条目,这是出于效率考虑。在构建 ETS
超级会员免费看
订阅专栏 解锁全文
813

被折叠的 条评论
为什么被折叠?



