問題タブ [mnesia]

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 投票する
2 に答える
595 参照

functional-programming - 参照透過性はどこまで取る必要がありますか?

私はerlang、mnesia、およびwebmachineを使用してWebサイトを構築しています。私が読んだドキュメントのほとんどは、参照透過性の機能を持つことの長所を賞賛しています。

問題は、すべてのデータベースアクセスが外部状態であるということです。これは、データベースにヒットするメソッドが参照透過性ではなくなったことを意味します。

データベースにユーザーオブジェクトがあり、認証を処理するいくつかの関数があるとします。

参照的に不透明な関数は次のようになります。

参照の透明性では、参照の不透明なコードの量を最小限に抑える必要があるため、呼び出し元はデータベースからオブジェクトを取得し、それを引数として関数に渡す必要があります。

上記のコードは明らかに実動コードではありません-それは純粋に説明の目的で構成されています。

私は教義に夢中になりたくありません。参照透過性のあるコード(証明可能な単体テストなど)の利点は、使い勝手の悪いインターフェースを正当化するのでしょうか?参照の透明性を追求するには、どこまで行けばよいのでしょうか。

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

erlang - ノード間のErlangEtsテーブル

大量のカスタムモジュールが実行されているejabberdサーバーがあります。私はいくつかのmnesiaテーブルを持っており、コードをまったく変更することなく、これらをノード間で簡単にコピーできることを知っています。etsテーブルで同様の方法があるかどうか疑問に思いましたか?

理想的には、etsテーブルをmnesiaテーブルに変換しなくても、まったく同じmnesiaおよびetsデータで複数のマシンを実行できると便利です。(したがって、かなりの量のコードを書き直します。)

1つは、各ノードのetsテーブルでrpc:callを実行していましたが、これがパフォーマンスに与える影響については確信が持てませんでした。

誰か答えがあれば教えてください。

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

database - Erlang:Mnesia:行の単一のフィールド値を更新しています

レコードを使用して作成された、i​​、a、bの3つのフィールドを持つmnesiaテーブルがあります。

次に、次のようにテーブルに行を挿入します。

この行を更新し、iとbを同じ値のままにして、aの値のみを10に変更する場合は、どうすればよいですか?""のようなSQLに相当するものはありますUPDATE T SET a=10 WHERE i=1か?

私がこのようなことをした場合:

行は次のように保存されます。

0 投票する
4 に答える
3958 参照

database - Erlang : Mnesia : Lookup and update based on fields other than the key

I have a table in mnesia and I need to update individual fields in the records in it. According to Erlang : Mnesia : Updating a single field value in a row if I do something like:

Now as I understand, the above code reads a record P based on a Key, acquiring a write lock on the record, so that no other transactions modify this record while it is being read and written back (or in short, updated). So far so good.

Now my requirement is that I need to able to read records based on both the Key and one other field in the table and then perform an update on it. A function that will do this looking up is mnesia:match_object. The problem now is that, the function only supports a read lock, not a write lock, according to http://www.erlang.org/doc/man/mnesia.html#match_object-3.

The consequence of this is that, suppose in the above function I were to use mnesia:match_object, I will get a (group of) record(s), all with read locks. After I read the records, I need to perform some checks on the retrieved data and then write back the updated record only if a condition is satisfied. Now, assume there are two parallel transactions T1 and T2 initiated by two different sources running. Both T1 and T2 access the same record, at the same time. Since they are read locked, both T1 and T2 will be able to read the records parallely. Both T1 and T2 will perform the same check on the same record, and if the condition matches, both will proceed to execute the update. But, in my code, if T1 and T2 were to have executed serially, T1 would have made changes to the record and in T2, it would have read these changed records and the condition would have failed and no update would have been made.

In short, I need to write lock records that are returned by mnesia:match_object. The documentation clearly states only read lock is supported. Are there are any alternatives?

UPDATE: I've been experimenting a little bit, and a possible solution I thought could be to use compound keys. Suppose I have data written to a table like:

Is there any way to lookup entries, using don't cares?

I tried these, but both returned empty results:

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

erlang - Erlang: mnesia の作業ディレクトリを指定しますか?

mnesiaコマンドラインで "dir" パラメータを渡さずに作業ディレクトリを指定するにはどうすればよいですか?

つまり、 mnesia:start() を呼び出す直前に mnesia の「作業ディレクトリ」を指定できますか?

0 投票する
3 に答える
610 参照

erlang - Erlang: mnesia:create_schema を複数回呼び出すことの副作用?

mnesia:create_schema()各アプリケーションの起動時に呼び出すことの副作用はありますか?

私が読み続けていることから、この関数はデータベース インスタンスごとに 1 回だけ呼び出す必要があります。既存のデータベースで複数回呼び出すことは大きな問題ですか?

0 投票する
3 に答える
3097 参照

erlang - Ejabberdメモリ消費(またはリーク?)

サーバーでejabberd+mochiwebを使用しています。ejabberdとmochiwebを実行し続ける時間が長いほど、より多くのメモリが消費されます(昨夜は、メモリの35%を消費していました。現在、50%を少し上回っています)。これは単なるmnesiaガベージコレクションの問題だと思ったので、Erlang R13B3をインストールして、ejabberdを再起動しました。しかし、これはそれを修正しませんでした。

そのため、フルメモリ消費量の50%を少し超えると、ejabberdがメモリを「解放」し始めて約50%にとどまっているように見えることに気づきました。これは正常ですか?ejabberdのしきい値は約50%なので、それに達すると「実際にメモリを解放する時間です...」と表示され、残りの部分をすばやくアクセスできるようにします(キャッシュ記憶容量など)。

ご意見をいただければ幸いです。ありがとう!

0 投票する
3 に答える
928 参照

erlang - Mnesia 非同期トランザクション

Erlang ノードのマスター/スレーブ セットアップが必要で、読み取りおよび書き込み操作はマスター ノードでのみ行われます。スレーブ ノードは、ホット スタンバイとしてのみ保持されます。

私が理解しているように、Mnesia のデフォルトの動作は、書き込み操作を実行する前にすべてのノードで同期的にロックを取得することです。これにより、特に地理的に分散したノードの場合、待ち時間が長くなります。

私の質問は次のとおりです: Mnesia は、ロックがマスター ノードでのみ取得され、書き込み操作が後でスレーブ ノードに伝達される非同期トランザクションをサポートしますか?

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

ejabberd - ejabberd : mnesia を mysql に置き換えます

mnesia の代わりに mysql をセットアップする方法はありますか。これに関するヘルプは大歓迎です。私にとってはすべてうまくいきました。また、履歴テキストをアーカイブする必要があります。

事前に感謝します エイブラハム