なぜそんなに多くのプログラマーがオブジェクトの有病率層を絶対に嫌うのですか?

softwareengineering.stackexchange https://softwareengineering.stackexchange.com/questions/6526

  •  16-10-2019
  •  | 
  •  

質問

有病率は、バイナリのシリアル化と書き込み式ロギングに基づいて、メモリ内オブジェクトモデルに酸性特性を提供する簡単な手法です。それはこのように動作します:

  • スナップショットから始めます。オブジェクトモデルをシリアル化し、ファイルに書き込みます。
  • ジャーナルファイルを作成します。オブジェクトモデルへの呼び出しごとに、コールとその引数をシリアル化します。
  • ジャーナルが大きくなりすぎる、シャットダウンしている場合、またはそれ以外の場合は便利で、チェックポイントを実行します。新しいスナップショットを書き、ジャーナルを切り捨てます。
  • クラッシュまたはパワーヒットからロールバックまたは回復するには、最後のスナップショットをロードし、ジャーナルに記録されたすべての呼び出しを再実行します。

この作業を行うために必要な注意事項は次のとおりです。

  • オブジェクトの可変リファレンスをエスケープしたり、有病率層を入力したりしないでください。 RPCを行っているかのように、何らかのプロキシまたはOIDスキームが必要です。 (これは非常に一般的な初心者の間違いです。バプテスマの問題'.)
  • 呼び出しから到達可能なすべてのロジックは、完全に決定論的でなければならず、ビジネスロジックの意味のあるI/OまたはOS呼び出しを実行してはなりません。診断ログへの書き込みはおそらく問題ありませんが、システム時間を取得するか、非同期デリゲートを起動することは一般にそうではありません。これは、ジャーナルが別のマシンで復元されていても、別の時間で復元されていても、同じようにリプレイするようにするためです。 (ほとんどの有病率コードは、トランザクションタイムスタンプを取得するための代替タイムコールを提供します。)
  • 作家の同意は、ジャーナルの解釈に曖昧さを導入するため、禁止されています。

なぜなら...

  • 人々は、それほど適していなかったプロジェクトで使用しようとした後、彼らのために悪い味を開発しました* それに?
  • Klaus Wuestefeld's 強烈な擁護 人々をオフにした?
  • 命令的なプログラミングモデルが好きな人は嫌いです I/Oを計算から分離します, 、代わりに、I/Oとスレッドコールで計算をインターリーブすることを好みますか?
  • 有病レイヤーは非常に概念的にシンプルであり、彼らが住んでいるフレームワークの特性に非常に密接に結びついているため、通常はプロジェクトのためにカスタムロールされているため、エイリアン/非標準/リスクが高まりますか?
  • あなたがしないように注意しなければならないことをまっすぐに保つのはあまりにも難しいですか?
  • 初心者の頭は、学校で書くことを学んだ2段のデータベース駆動型アプリと同じ種類のものではないものに直面したときに爆発するようですか? ;)

* データセット全体がRAMに適合します, 、作家の並行性は必要ありません。また、アドホッククエリ、レポート、またはデータウェアハウスへのエクスポートを行う必要はありません。 SQLiteに謝罪することで、有病率はSave Filesの改善であり、Oracleの代わりではありません。

役に立ちましたか?

解決

問題のいくつかは、非常に具体的なユースケースがあることだと思います(あなたの適切ではない理由)。私はこのアプローチを使用するシステムに基づいて構築し、取り組んできましたが、実際にこの問題である問題がある場合、それは素晴らしい解決策になる可能性があります。

別の部分は、10年以上前に多くのことを見つけたために使用していたカスタムデータストレージのより痛みを伴うビットのいくつかによく似ており、同じ落とし穴のいくつか(たとえば、Btreiveが更新されたと考えてください)を持っていることです。 「あまりにもカスタム」ポイントがありますが、丁寧に機能する棚の部分を見つけることも困難になります。

最後の部分は、多くの場合、彼らが照会するのが難しいことであり、一般的に人々は今すぐ答えを得ることができることにかなり慣れているということです。

他のヒント

私はあなたがまず、非常に多くの開発者が彼らを絶対に憎んでいることを示す必要があると思います。そうだとは思わない。しばらく前にファウラーがこのためにある種のパターンを正式化したことを考えてください ここ.

質問に対する答えは、理論は単純なものではないが、実践はそうではないということです。

このようなセットアップをテストするだけで、数十のテストケースが必要であり、mutliプロセスまたはマルチスレッドコードを追加すると、これは永続性と回復の両方でテストする必要がある数百の可能な条件にジャンプします。

CICS、Tuxedo、Weblogic、WebSphere、JBoss、.NETなどのトランザクションモニターは、これらすべての施設をクリーンでテストした方法で提供します。また、ほとんどのアプリケーションで「十分な」トランザクション/永続性が提供されます。

その主にそのホイールのケースが発明され、ずっと前に完成されました。

特にほとんどのシステムがメモリで実行されるときに酸性コンプライアンスを必要としない場合、事前の必要条件はコードを少し面倒に聞こえます。オーバーヘッドも少し厄介に聞こえます - そこには多くの州の追跡が関係しています。

ライセンス: CC-BY-SA帰属
所属していません softwareengineering.stackexchange
scroll top