問題タブ [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 投票する
1 に答える
2155 参照

concurrency - Erlang ETS insert/2 エラー

ETS モジュールにアクセスできる単純な Erlang プロセスを作成しようとしています。

私のソースコードには以下が含まれます:

  1. プロセスの作成:

    /li>
  2. プロセス ロジック:

    /li>
  3. プロセスとの通信

    /li>

Erlang ターミナルで関数呼び出しを実行しているときに、次のエラーが発生します。

どこに問題があるのでしょうか。

0 投票する
1 に答える
681 参照

erlang - erlang etsは不正な引数を選択します

アーラン バージョン18.3

Erlang ets:select/1で奇妙なエラーが発生しました

次のコードは、テーブルから要素を選択して取得します

私が行った場合

できます

私が行った場合

それも悪い引数でした。最初または2番目のループではありませんでしたが、常にそこにありましets:select(Cont)

なにか提案を?

スタックトレース

0 投票する
1 に答える
1002 参照

elixir - エリクサーで:ets.fun2msを呼び出す方法は?

出来ますか?もしそうなら、どのように?

次のコードは IEX で実行されます。

ただし、コンパイルされたコードは実行時エラーを生成します。

エラーは次のようになります。適切に呼び出す方法を知りたいです。

0 投票する
2 に答える
348 参照

concurrency - Erlang でメッセージを PID にルーティングする

非常に大量のメッセージ (レコード) を処理するサーバーを erlang で作成しています。各メッセージには、ユーザー ID のようなタグ (アトム) があります。

そのようなプロセスが存在しない場合、「ルーター」はこのユーザー専用の永続的なプロセスを生成します (メッセージを保存して渡す前に数分間メッセージを蓄積するため)。それ以外の場合は、既存のプロセス メールボックスにメッセージとして渡します。

問題はルーティング テーブルの簿記です。

ルーターをシリアル化することを考えることができます。各メッセージは、userId によって PID を見つけるための ETS ルックアップになり、終了しなかった場合は最終的に Spawn と ETS が挿入されます。しかし、それは数秒で混雑しました。

別の方法として、プロセスを直接生成して各メッセージをルーティングすることもできますが、1 人のユーザーへのいくつかのメッセージが連続して受信され、ETS で対応する PID が見つからず、永続的なプロセスが生成された場合、競合状態が発生する可能性があります。メッセージは失われ、最後に生成されたプロセスのみが有効になり (ETS で他のプロセスを上書きします)、他のプロセスはアイドル状態になり、追跡されなくなります。

また、私はすべて間違って考えているかもしれません。このシナリオを処理するより良い方法はありますか?

0 投票する
1 に答える
1312 参照

erlang - etsテーブルのキーとしてのタプル?

他のネットワーク参加者に関する情報に関するタプルを ETS テーブルに格納したいと考えています。{ip_address(), port_number()}(return のタプルをinet:peername(Socket)エントリのキーとして使用したいと思います。別名、ETS テーブル内の他のノード/エントリの識別子として、アドレス/ポートの組み合わせを使用したいと思います。

これはetsで可能ですか?または、他のタイプをキーとして使用する必要がありますか?

0 投票する
2 に答える
855 参照

erlang - ETS ストレージの増加を制限する

新しい Elixir プロジェクトで、Erlang の ETS をユーザー検索用のキャッシュとして使用することを検討しています。ユーザー入力に基づいて、システムは高価なサードパーティ API を使用してルックアップを行います。

同じユーザー入力に対して重複した呼び出しを行うことを避けるために、外部 API の前にキャッシュ レイヤーを配置するつもりであり、ETS はこれに適したオプションのようです。ただし、ユーザー入力のバリエーションに制限がないため、ETS テーブルに必要なストレージ容量が際限なく増大することが懸念されます。

私が ETS について読んだとき、ETS のテーブルのサイズに関する懸念について話し合っている人を他に見たことがありません。これは、ETS の異常な使用例になるからですか?

一見したところ、私の好みは ETS テーブルのエントリ数を制限し、制限に達したら最も古いエントリを拒否 (つまり削除) することです…</p>

ETS で無制限の数のエントリを処理するための一般的な戦略はありますか?

0 投票する
1 に答える
620 参照

erlang - Erlang ETS アトミックおよび分離

ets docから、単一オブジェクトへのすべての更新は、アトミックかつ分離されていることが保証されます。これは、1 つのオブジェクトに対する更新操作が成功するか失敗するかのどちらかであり、何の影響もなく (原子性)、更新の中間結果が他のプロセスから見えない (分離) ことを意味します。

次のコードでは、2 つのテーブルを 1 つにラップしました

私の質問:

  1. これはErlangの一般的なパターンですか?

  2. 挿入と更新の場合、それはアトミックで分離されていますか?

    -module(example_store)。-export([init/0, insert/1, update/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 を除く)