問題タブ [prevayler]
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.
java - Prevayler の同期戦略とは?
Prevayler は、すべての書き込み (そのトランザクションを介して) が同期されることを保証します。しかし、読み取りはどうですか?
(ユーザー コードで) 明示的な同期が使用されていない場合、ダーティ リードが可能であるというのは正しいですか?
ビジネスオブジェクトが次のように読み取られる場合、それらは可能ですか。
?
もしそうなら、どの同期戦略がユーザーコードに適していますか?
(ビジネス オブジェクト A にビジネス オブジェクト B のコレクションが含まれているとします)、
- java.util.concurrent パッケージなどから (A 内の B の) 同期されたコレクションを使用しますか?
- トランザクション内のコレクションの書き込みとトランザクションの外部のコレクションの読み取りを同期します。
prevayler - Prevaylerコマンドでの複雑なオブジェクトの操作
Prevaylerディストリビューションに含まれているデモは、オブジェクトを作成または更新するために、いくつかの文字列(またはそのような単純なもの)をコマンドコンストラクターに渡す方法を示しています。問題は、多くのフィールドを持つMyObjectというオブジェクトがあることです。それらすべてを手動でCreateMyObjectコマンドに渡さなければならない場合、それは苦痛になります。
したがって、私が考えた別の方法は、ビジネスオブジェクト自体をコマンドに渡すことですが、そのクローンにぶら下がることです(BOをコマンドに直接格納できないことに注意してください)。もちろん、このコマンドを実行した後は、渡した元のコピーを必ず破棄する必要があります。
Prevaylerwikiは次のように述べています。
トランザクションは、ビジネスオブジェクトへの直接のオブジェクト参照(ポインター)を運ぶことはできません。これは一般的な初心者の落とし穴であるため、バプテスマの問題として知られるようになりました。トランザクションがジャーナルにシリアル化されてから実行のために逆シリアル化されると、そのオブジェクト参照は目的のオブジェクトを参照しなくなるため、直接オブジェクト参照は機能しません---最初に参照した可能性のあるオブジェクトはシリアル化によってコピーされます処理する!したがって、トランザクションは、参照するオブジェクトに対して何らかの文字列または数値の識別子を保持する必要があり、実行時にオブジェクトを検索する必要があります。
渡されたオブジェクトのクローンを作成することで、「直接オブジェクトポインタ」の問題を回避できると思いますが、これが良いアイデアかどうかはまだわかりません...
node.js - Prevalence/Prevaylor を Javascript/NodeJS に実装/移植した人はいますか?
Prevaylorによって Java に実装されているが、代わりにNodeJS用に実装されている、 Prevalence System Design Patternの SSJS 実装はありますか?
dart - dartvm を使用してアプリケーションの普及を実装する方法は?
サーバー上で dartvm を使用してアプリケーションの普及 (Prevayler を考えてください) を実装するには、どのようなオプションがありますか?
純粋な Dart ソリューションを探しています (Java/Prevayler とのプロセス間ソケットはありません)
既存のコードまたはプロジェクトはありますか?
java - Prevayler シリアル化の最適化
私は Prevayler と協力して、非常に簡単なストレス テストを行っています。
私のプログラムでは、500 ミリ秒で 10,000 回の読み取りを取得できますが、1 つのオブジェクトの書き込みまたは変更には 23 ミリ秒かかります。(このコンピューターの詳細な仕様はありません。印象的なものはありません。デュアルコア 3.0GHz、7200rpm HD、およびおそらく 1333MHz ddr3 メモリです。)
シリアル化がボトルネックのようです。
書き込み/変更のパフォーマンスを向上させるために何ができますか?
JProfiler JProfiler でプログラムを実行しました (10,000 個のユーザー オブジェクトがディスクに書き込まれました)。250 秒間実行され、その時間の 99.6% が org.implementation.PrevaylerImpl.execute の実行に使用されました。
更新 XStreamSerializer に切り替えました。これにより、書き込み速度が書き込みあたり 21 ミリ秒に向上し、ストレージが
3555KB ジャーナル/10,000 オブジェクト -> 2421KB
350KB スナップショット/10,000 オブジェクト -> 313KB
1 秒あたり 1000 回以上の書き込みを見たいです。
java - Java でシリアル化された Clojure データ構造のサイズ
この問題を github プロジェクト prevayler-clj でオープンしました
https://github.com/klauswuestefeld/prevayler-clj/issues/1
この のような 1M の短いベクトル[:a1 1]
が prevayler の状態を形成するため、Java writeObject を使用して 1 つずつシリアル化すると、1 GB のファイル サイズになります。
出来ますか?PersistentVector ごとに約 1kB? さらに調査した結果、同じ量のベクターを 80MB のファイルでシリアル化できることが示されました。では、プリベイラーの連載で何が問題になっているのでしょうか。これらのテストで何か間違ったことをしていますか?テスト コードの抜粋については、github の問題を参照してください。
java - Prevayler 型はジェネリックではありません。引数でパラメータ化することはできません
フォールトトレランスのためのチェックポイント手法について読んでいます。だから、私はprevayler
チェックポイントのためにJavaライブラリを使っています。ここで、The type Prevayler
is not generic;というエラーが表示されました。引数でパラメータ化することはできません<P>
。このエラーについて教えてもらえますか?
これが私のコードです: