2016-10-14 6 views
1

複数のタスクが同時に.jsonファイルを読み込んで更新しようとしています。データベースのシナリオでは、私はちょうど行にロックを置くだろう...何か同様のファイルで行うことができますか?jsonファイルへのエリクシルスレッドセーフなアクセス?

これはgenserver handle_callで解決できることがわかりました。私は簡単なオプションがありますか?

+1

JSONアクセスの周りのGenServerまたはあらゆる種類の「ラッパー」インターフェースは、Elixirに入る方法になります。他に何か考えているのであれば、あなたが考えていたインターフェースの例を教えてください。 – tompave

+1

'GenServer.handle_call'より何が_easier_でしょうか? – mudasobwa

答えて

1

ファイルの特定の行にロックを設定するメカニズムはなく、json構造内の特定の要素にロックを設定できるエリクサーjsonライブラリはありません。データの独自のエリクシール表現を作成し、構造から要素をチェックアウトしたりチェックインしたり、構造内の各サブピースを処理したりする必要があります。

また、elixir/erlang/otpを書くときにスレッドという言葉を忘れてしまうのが普通です。私たちはプロセスを使用します。

0

あり、実際にこのファイルを「ラップ」するためにGenServerを使用しない理由ではない - 努力は非常に低く、メリットが大きい:

  1. あなたはJSONファイルの変更についての抽象化を構築することができ、そのあなたのコードをきれいにするでしょう。
  2. GenServerの実行がシリアライズされ、ロックの問題が解消されます。
  3. JSONの編集が完了したときにコールバックを使用した非同期呼び出しなど、より高度な使い方を提供する基盤を構築します。

さらに詳しい情報を得ることができます。 Elixirを起動すると、GenServerはちょっと重いと感じます(もう少し定型文があります)。しばらくすると、質問は「私はこれをGenServerで包みますか?」ではありません。 「このビットのGenServerはどのように見えますか?」それは自然になります。

関連する問題