问题标签 [ets]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
5595 浏览

erlang - 如何匹配 ets:匹配 Erlang 中的记录?

我听说在代码中通过元组指定记录是一种不好的做法:我应该始终使用记录字段 ( #record_name{record_field = something}) 而不是普通的元组{record_name, value1, value2, something}

但是如何将记录与 ETS 表进行匹配?如果我有一个记录表,我只能匹配以下内容:

很明显,一旦我在记录定义中添加了一些新字段,这个模式匹配就会停止工作。

相反,我想使用这样的东西:

不幸的是,它返回一个空列表。

0 投票
1 回答
2328 浏览

erlang - 如何查找erlang ets表字段信息?

在 erlang 中查找 ets 表的字段信息(即字段名称)的方法是什么?

我试过ets:info(TableName)ets:i(TableName)。第一个提供有关表的详细信息,如内存、所有者、大小、named_table、keypos、保护等。第二个提供有关表中存在的条目的详细信息。

0 投票
1 回答
656 浏览

performance - ETS ordered_set 和有效分页

我将{Key, Value}数据保存在 ETSordered_set中,其中Key是日期时间。在给定时间内选择所有项目非常容易 internal [From, To]

像这样的东西:

我们Limit在函数中有参数,select()因此我们能够限制要选择的项目数量。但是如何指定偏移量?

作为输入,我的模块接收时间间隔和页码。我的目标是返回指定时间间隔和页面的项目。页面大小 ( Limit) 是一个常数。我可以计算一个偏移量

问题是我如何才能有效地只为给定页面选择项目?

我知道该select()函数可以接收Continuation参数,但我没有之前选择的状态。我只有一个页码。

可能,我必须使用其他数据结构。请推荐更好的解决方案。

0 投票
2 回答
837 浏览

erlang - ETS设置保留顺序?

ETS 设置是否保证元组的内部顺序与插入它们的顺序相同?例如:我通过每秒插入一个元组来保存日志,时间戳是关键。在这个例子中,set 是否保证元组按键排序?

我知道 ordered_set 会做我想做的事,但它有插入开销。因此,如果 set 保持插入顺序,那么在我的示例中使用 set 会更有效。那么,是吗?:-)

在此先感谢,尼古拉

0 投票
1 回答
480 浏览

erlang - 从 ETS 表中检索数据

我知道 ETS 表的查找时间是恒定的。但我也听说表被保留在进程之外,在检索数据时,它需要移动到进程堆中。所以,这很贵。但是,如何解释这一点:

从表中检索 1.7 MB 二进制文件需要 0 时间!?

编辑:看到 Odobenus Rosmarus 的回答后,我决定将二进制文件转换为列表。结果如下:

现在从表中检索 1986392 long需要 106000微秒list,这非常快,不是吗?列表是每个元素 2 个单词。因此数据为 4x1.7MB。

编辑 2:我在 erlang-question (http://groups.google.com/group/erlang-programming/browse_thread/thread/5581a8b5b27d4fe1)上启动了一个线程,结果证明 0.1 秒几乎是它需要做的时间memcpy() (将数据移动到进程的堆中)。另一方面,Odobenus Rosmarus 的回答解释了为什么检索二进制文件需要 0 时间。

0 投票
2 回答
940 浏览

ets - dets 示例导入数据

dets:to_ets/2 有问题

有人可以在网上给我举个例子吗?我查看了手册页,但看不到任何示例用法。在谷歌上找不到任何东西..

我的问题似乎与实际的 dets:to_ets() 函数本身有关,而不是 dets 的创建。我自己测试过,没问题。

0 投票
2 回答
272 浏览

debugging - 能够从进程 ID 识别进程身份的最佳 erlang 方法是什么?

当我调试时,我通常会查看大约 5000 个进程,每个进程可能是大约 100 个 gen_servers、fsms 等中的一个。如果我想知道 erlang 进程是什么,我可以这样做:

并得到如下结果:

...这几乎是无用的。

最近,我想到了一个想法(振作起来),用一个名字来注册每个进程,这个名字告诉我这个进程代表了谁。例如,player_1150 是代表玩家 1150 的玩家进程。是的,我最终在一周的运行过程中生成了几百万个原子。(当我的系统在未使用大约 8GB 的​​实际内存的情况下运行时,我很想听到关于将限制提高到 10,000,000 个原子的缺点的评论,如果有的话。)这样做意味着我可以在实时系统的控制台上,查询所有进程的消息队列有多长时间,找到最严重的违规者,然后检查这些进程是否已注册并打印出它们注册的原子。

我遇到了一个障碍:我正在将进程从一个节点移动到另一个节点。现在一个玩家进程可以有3个不同的名字;player_1158、player_1158_deprecating、player_1158_replacement。而且我必须确保我以精确的时间注册和取消注册这些名称,以确保始终命名一个进程并且始终存在适当的名称,并且我不会尝试注册某个垂死的进程已经拥有的名称. 有一些空间,因为这仅用于实时系统的控制台调试尽管如此,当我开始感觉这种机制正在影响我开发系统的方式(移动进程的系统)的那一刻,我觉得是时候了做点别的。

我现在有两个想法。将进程 ID 与其描述相关联的 ets 表:

我不太喜欢那个,因为我必须手动保持桌子清洁。当玩家退出(或崩溃)时,有人负责确保从 ets 表中删除他的数据。

第二种选择是使用进程字典,存储类似的信息。当我对实时系统的探索让我想知道进程是谁时,我可以使用 process_info 查看他的进程字典。

我意识到这些解决方案中没有一个在功能上是干净的,但鉴于系统本身从来都不是这些数据的消费者,我并不太担心。我需要某些调试工具来快速轻松地工作,因此所描述的行为不值得商榷。是否有任何令人信服的论点可以采用这种或另一种方式(除了学术上的“不要使用_,这是邪恶的”罐头垃圾?)我很乐意听到其他建议和他们的理由。

0 投票
2 回答
233 浏览

erlang - 在erlang中拆分ets

我在使用 mapReduce 算法的课程中工作,所以我从一个大数据文件在 Erlang 中构建了一个 ets 表,我想同时处理它。结果表很大,我想知道是否有办法将一个大表拆分为几个较小的表,以便我可以使用 mapReduce 算法同时搜索表,有什么方法可以拆分一个大表表变成子表???谢谢。

0 投票
1 回答
1008 浏览

python - 如何下载 Enthought Tool Suite python 脚本?

我已经下载了 Python,但想为 Enthought Tool Suite (ETS) 贡献代码。根据这个网站(http://code.enthought.com/source/):

它说要下载以下python脚本:https ://raw.github.com/enthought/ets/master/ets.py

我将 ets.py 放入 python 脚本中,另存为......在 Python Shell 中,我输入了“import ets”

然而,什么也没有发生。

此外,该网站说要运行以下命令:

在 Python Shell 中键入这些行会给我以下消息:“SyntaxError: invalid syntax”

如您所见,我是 Python 新手,不知道自己在做什么。如何下载 ETS 脚本并运行命令?

0 投票
1 回答
1133 浏览

erlang - ets match_object 与匹配规范

这个函数只得到一个空列表,而我想用低 =< X =< 高选择这条记录。

请帮我。谢谢