问题标签 [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.
concurrency - Erlang ETS 插入/2 错误
我正在尝试创建一个可以访问 ETS 模块的简单 Erlang 进程。
我的源代码包括:
进程创建:
/li>流程逻辑:
/li>与进程的通信
/li>
在 Erlang 终端中执行函数调用时,出现错误:
谁能告诉我,问题可能出在哪里?
erlang - erlang ets 选择错误的参数
erlang 版本18.3
Erlang ets:select/1出现一个奇怪的错误
以下代码将从表中选择元素并获取它们 。
如果我做
有用
如果我做
arg 也很糟糕ets:select(Cont)
,它不是在第一个或第二个循环中,而是一直存在。
有什么建议吗?
堆栈跟踪
elixir - 如何在 elixir 中调用 :ets.fun2ms?
可能吗?如果是这样,如何?
以下代码在 IEX 中执行。
但是,编译后的代码会产生运行时错误。
错误是这样出现的:我想知道如何正确调用。
erlang - Erlang ETS 匹配
使用 Erlang ets,如何匹配部分键?
例如,ets:insert(time_tb,{ {un_known,{<<"knonw_1">>,<<"knonw_2">>} },[data]}).
关键是{un_known,{<<"knonw_1">>,<<"knonw_2">>}
{<<"knonw_1">>,<<"knonw_2">>}
如果我只知道这可能,我怎么能从表中匹配?
concurrency - 在 Erlang 中将消息路由到 PID
我正在用 erlang 编写一个处理大量消息(记录)的服务器。每条消息都有一个标签(原子),如用户 ID。
如果该进程不存在,“路由器”将为该用户生成一个专用的永久进程(在保存和传递消息之前累积几分钟的消息)。否则它将作为消息传递给现有的进程邮箱。
问题是路由表的簿记。
我可以考虑序列化路由器,每条消息都会导致 ETS 查找通过 userId 查找 PID,如果它没有退出,则最终 Spawn 和 ETS 插入。但这在几秒钟内就变得拥挤了。
另一种方法是直接生成一个进程来路由每条消息,但是如果发送给单个用户的几条消息接踵而至,并且在 ETS 中找不到它们对应的 PID 并生成了永久进程,这可能会导致竞争状况。消息将丢失,只有最后生成的进程有效(覆盖 ETS 中的其他进程),而其他进程将处于空闲状态且未被跟踪。
我也可能想错了。有没有更好的方法来处理这种情况?
erlang - 元组作为 ets 表的键?
我想在 ETS 表中存储有关其他网络参与者信息的元组。我想使用{ip_address(), port_number()}
(return ofinet:peername(Socket)
作为条目的键的元组。也就是我想使用地址/端口的组合作为 ETS 表中其他节点/条目的标识符。
用ets可以吗?还是我必须使用其他类型作为键?
r - ets: ets(timeseries, model = "MAM") 中的错误:非季节性数据
我正在尝试使用指数平滑方法创建预测,但得到错误“非季节性数据”。这显然不是真的 - 请参阅下面的代码。为什么我会收到此错误?我应该使用不同的函数(它应该能够执行简单、双重、阻尼趋势、季节性、温特斯方法)?
谢谢&亲切的问候
erlang - 限制 ETS 存储的增长
我正在考虑使用 Erlang 的 ETS 作为新 Elixir 项目中用户搜索的缓存。根据用户输入,系统将使用昂贵的第三方 API 进行查找。
为了避免对相同的用户输入进行重复调用,我打算在外部 API 前面放置一个缓存层,ETS 似乎是一个不错的选择。但是,由于用户输入的变化没有限制,我担心 ETS 表所需的存储空间会无限增长。
在我阅读 ETS 时,我还没有看到其他人讨论过对 ETS 中表格大小的担忧。那是因为这对于 ETS 来说是一个不正常的用例吗?
乍一看,我的偏好是限制 ETS 表中的条目数量,并在达到限制后拒绝(即删除)最旧的条目......</p>
是否有处理 ETS 中无限数量的条目的通用策略?
erlang - 有没有办法浏览 erlang 术语存储 (ETS)
我有一个使用 erlang 术语存储的小型 Elixir 应用程序,我想浏览它并查看存储的内容。有没有办法用 Elixir 或 Erlang 做到这一点?
我想看看它有多大,里面有什么。
编辑:我知道我可以使用 来查看进程:observer.start
,但没有列出为 的进程或应用程序ets
。有Elixir.Hex.Registry.ETS
,但状态或其他进程信息看起来不正确。
我也可以把东西打印出来,iex
但这不是一个很好的体验。
erlang - Erlang ETS 原子和隔离
从ets doc中,保证对单个对象的所有更新都是原子的和孤立的。这意味着对单个对象的更新操作要么成功,要么完全失败,没有任何影响(原子性),并且其他进程看不到更新的中间结果(隔离)。
对于以下代码,我将两个表合二为一
我的问题:
这是 Erlang 中的常见模式吗?
对于插入和更新,它是原子的和孤立的吗?
-模块(example_store)。-导出([初始化/0,插入/1,更新/1])。
init() -> ets:new(store, [public, named_table, {read_concurrency, true}, {write_concurrency, true}]),
数据 = ets:new(store_data, [public, named_table, {read_concurrency, true}, {write_concurrency, true}]),
/li>
来自@Derek
Brown 的Update_1,被包裹的表不能保证insert/1
和update/1
被隔离。
Q3:可以隔离吗?(除了 Gen_server)