天道酬勤,学无止境

ets

Erlang/ets:在得到“错误的论点”后重置 ets 表?(Erlang/ets: reset ets table after getting a "bad argument"?)

问题 我一直在学习如何使用 ets,但让我感到困扰的一件事是,有时*, ets:match会抛出一个bad argument ......而且,从它们开始,所有后续调用(甚至以前有效的调用)也会抛出一个bad argument : > ets:match(Tid, { [$r | '$1'] }, 1). % this match works... % Then, at some point, this comes up: ** exception error: bad argument in function ets:match/3 called as ets:match(24589,{[114|'$1']},1) % And from then on, matches stop working: > ets:match(Tid, { [$r | '$1'] }, 1). ** exception error: bad argument in function ets:match/3 called as ets:match(24589,{[114|'$1']},1) 有什么方法可以“重置” ets系统,以便我可以再次查询它(即,从 shell 中)? *:我无法重现这个问题……但是当我尝试做“其他事情”时它经常发生。 回答1 虽然我不是 100% 肯定

2021-11-27 10:33:09    分类:技术分享    erlang   ets

Erlang/ets: reset ets table after getting a "bad argument"?

I've been learning how to use ets, but one thing that has bothered me is that, occasionally*, ets:match throws a bad argument… And, from them on, all subsequent calls (even calls which previously worked) also throw a bad argument: > ets:match(Tid, { [$r | '$1'] }, 1). % this match works... % Then, at some point, this comes up: ** exception error: bad argument in function ets:match/3 called as ets:match(24589,{[114|'$1']},1) % And from then on, matches stop working: > ets:match(Tid, { [$r | '$1'] }, 1). ** exception error: bad argument in function ets:match/3 called as ets:match(24589,{[114|'$1

2021-11-22 20:32:21    分类:问答    erlang   ets

ETS 创建返回值(ETS creation return value)

问题 我正在使用 Elixir 1.6.3。 我正在 Elixir 中使用 Erlang :ets模块,我对:ets.new/2函数的返回值有点困惑。 根据文档的示例,当调用:ets.new(:whatever, []) ,我应该返回一个整数值: iex> table = :ets.new(:buckets_registry, [:set, :protected]) 8207 但是,当我在iex运行完全相同的代码时,我得到了一个参考: iex(1)> table = :ets.new(:buckets_registry, [:set, :protected]) #Reference<0.1885502827.460455937.234656> 那么,自文档编写以来,有什么变化吗? 或者它是一样的,我对参考是什么感到困惑? 回答1 是的,在 Erlang/OTP 20.0 中, ets:new的返回值从整数更改为引用。 从自述文件: OTP-14094 Application(s): stdlib *** POTENTIAL INCOMPATIBILITY *** Optimized ETS operations by changing table identifier type from integer to reference. The reference enables a

2021-10-22 10:32:55    分类:技术分享    reference   erlang   elixir   ets

ets 和读取文件的错误(An error with ets and reading files)

问题 免责声明:我没有写这段代码,我只是想让它工作。 我正在尝试从这里获取代码。 设置是安装了 Erlang 的 Ubuntu 14.04 64 位机器。 动作顺序如下: 我正在做的事情如下: 克隆代码 cd到终端中包含代码和erl的文件夹make:all([load]). polis:create(). polis:start(). benchmarker:start(slidingwindow50). 我得到的错误是: 4> benchmarker:start(slidingwindow50). true Dimensions:4, Plasticity:none Dimensions:4, Plasticity:none Dimensions:4, Plasticity:none Dimensions:4, Plasticity:none Dimensions:4, Plasticity:none Dimensions:4, Plasticity:none Dimensions:4, Plasticity:none Dimensions:4, Plasticity:none Dimensions:4, Plasticity:none Dimensions:4, Plasticity:none Specie_Id:6.858114617542796e-10 Morphology

2021-10-19 01:08:22    分类:技术分享    erlang   erlang-shell   ets

An error with ets and reading files

Disclaimer: I didn't write this code, I'm just trying to make it work. I'm trying to get the code from here working. The setup is an Ubuntu 14.04 64bit machine with Erlang installed. The sequence of actions is as follows: What I'm doing is as follows: clone the code cd to the folder with the code and erl in terminal make:all([load]). polis:create(). polis:start(). benchmarker:start(slidingwindow50). The errors I get are: 4> benchmarker:start(slidingwindow50). true Dimensions:4, Plasticity:none Dimensions:4, Plasticity:none Dimensions:4, Plasticity:none Dimensions:4, Plasticity:none Dimensions

2021-10-18 13:25:49    分类:问答    erlang   erlang-shell   ets

Erlang:ets 选择和匹配性能(Erlang: ets select and match performance)

问题 我发现“函数 ets:select/2 和 mnesia:select/3 应该优先于 ets:match/2,ets:match_object/2 和 mnesia:match_object/3”表单引用链接:http://www.erlang .org/doc/efficiency_guide/tablesDatabases.html 我读过一些关于比较选择和匹配的文章,我得出结论,有一些影响结果的因素,例如表中的记录数量,是否选择/匹配主键,表种类(袋,集... ), 等等。 在我的测试中,我对所有类型的表进行了 10W 记录和 1W 记录,并且只选择/匹配非主键。 代码如下: select_ets_test(Times) -> MS = ets:fun2ms(fun(T) when T#ets_haoxian_template.count == 15 -> T end), T1 = timer:tc(?MODULE, todo, [fun() -> ets:select(haoxian_test_bag, MS) end, Times]), T2 = timer:tc(?MODULE, todo, [fun() -> ets:select(haoxian_test_set, MS) end, Times]), T3 = timer:tc(?MODULE, todo,

2021-09-19 22:07:38    分类:技术分享    performance   erlang   ets

ETS creation return value

I'm using Elixir 1.6.3. I'm working with the Erlang :ets module in Elixir, and I'm a bit confused by the return value of the :ets.new/2 function. According to the doc's example, when calling :ets.new(:whatever, []), I should be returned what appears to be an integral value: iex> table = :ets.new(:buckets_registry, [:set, :protected]) 8207 However, when I run the exact same code in iex, I get a reference: iex(1)> table = :ets.new(:buckets_registry, [:set, :protected]) #Reference<0.1885502827.460455937.234656> So, has something changed since the documentation was written? Or is it just the same

2021-08-30 08:05:14    分类:问答    reference   erlang   elixir   ets

如何确定 ETS 表的确切内存大小?(How to identify the exact memory size of an ETS table?)

问题 给具有数据的ETS表中,方式/ 1函数返回表中的各种属性,包括一个尺寸值是特定于行数,而不是实际尺寸。 有没有办法计算 ETS 表占用的内存量(以字节为单位)? ets:new( mytable, [bag, named_table, compressed]), ets:insert( mytable, { Key, Value } ), .... ets:info ( mytable ). 回答1 特尔;博士: ETS 表分配的内存大小(以字节为单位): ets:info(Table,memory) * erlang:system_info(wordsize). 详细说明一下, ets:info(Table,memory)为您提供了分配给 ETS 表中数据的单词(Mnesia 也是如此。您可以在TV应用程序中查看所有这些信息。DETS 表的相同属性以字节为单位) . 一个词只不过是特定 CPU 架构的“自然”数据单元。 代表什么取决于您的架构:32 位或 64 位(或使用erlang:system_info(wordsize)立即获得正确的字长) 在32 位系统上,一个字是 4 个字节(32 位)。 在64 位系统上,一个字是 8 个字节(64 位)。 另请注意,ETS 表最初跨越 768 个单词,您必须添加每个元素的大小,6 个单词 + Erlang 数据的大小。

2021-08-30 03:42:10    分类:技术分享    erlang   ets

ets:foldl vs 删除的元素(ets:foldl vs deleted elements)

问题 ets:foldl/3 的文档说: 如果Function将对象插入到表中,或者另一个进程将对象插入到表中,则这些对象可能(取决于键排序)被包含在遍历中。 但是如果Function从表中删除对象会发生什么? 在这种情况下,是否可以保证所有剩余的对象都将包含在遍历中? 回答1 根据 ets.erl 的来源,如果一个进程正在迭代表并且在此期间它删除记录,那么如果到目前为止尚未处理这些记录,则不会处理这些记录。 foldl(F, Accu, T) -> ets:safe_fixtable(T, true), First = ets:first(T), try do_foldl(F, Accu, First, T) after ets:safe_fixtable(T, false) end. 辅助函数是 do_foldl(F, Accu0, Key, T) -> case Key of '$end_of_table' -> Accu0; _ -> do_foldl(F, lists:foldl(F, Accu0, ets:lookup(T, Key)), ets:next(T, Key), T) end. 首先 foldl 固定桌子。 当一个进程修复一个表时,它会被记录到一个 {Time, Pid} 列表中。 在固定表中 ets:first 和 ets:next

2021-08-12 16:31:19    分类:技术分享    erlang   ets

ets:foldl vs deleted elements

The documentation for ets:foldl/3 says: If Function inserts objects into the table, or another process inserts objects into the table, those objects may (depending on key ordering) be included in the traversal. But what happens if Function deletes objects from the table? Is there any guarantee that all remaining objects will be included in the traversal in that case?

2021-07-03 08:52:29    分类:问答    erlang   ets