ピザ配達店向けのシンプルなフォールトトレラントなソフトリアルタイムWebアプリケーションについてはすでに質問しました。
私はそこで本当に素晴らしいコメントと回答を得ましたが、それが真のWebサービスであるという点で私は同意しません。Webサービスではなく、顧客からの注文を受け付け、これらの注文の発送を制御し、それらの注文をリアルタイムで配信する車両を制御するのは、よりリアルタイムのシステムです。
さらに、「真の」Webサービスとは異なり、このシステムは多くのユーザーを対象とはしていません。これを使用するのは、ほんの数人のディスパッチャー(電話交換手)と数人の配達ドライバーです(今のところ、直接アクセスを提供する必要はありません)。実際の顧客へのサービスへ。ディスパッチャと配達ドライバーのみが直接アクセスできます)。
したがって、この質問はもう少し一般的です。
このアプリケーションのNoSQLデータストレージオプションを正しく選択するために最初に行う必要があるのは、 CAP定理に従ってとを選択CA
することです。PA
CP
さて、Building Web Applications with Erlangの本には、「[Mnesia]はSQLデータベースではありませんが、SQLデータベースのようなCAデータベースです。ネットワークパーティションは処理されません」と書かれています。同じ本には、CouchDBデータベースはデータベースであると書かれていPA
ます。
そのことを念頭に置いて、アプリケーションで最初に行う必要があるのは、CAPに関して「フォールトトレランス」という用語が何を意味するかを決定することだと思います。
私が持っている単純な要件は、アプリケーションを24時間年中無休(R1)で利用できるようにすることです。もう1つは、拡張する必要がないことです。アプリケーションのユーザー数は非常に少なくなります(数千のディスパッチャーを持つことはおそらく不可能です)(R2)。
さて、R1はアプリケーションに一貫性、可用性、パーティション許容度を提供することを要求し、どのような優先順位を付けますか?
次の問題をより適切に処理できるのは、どのタイプのデータストレージオプションですか。
- ディスパッチャ(顧客からの電話を受け入れ、CRMを使用する人)が顧客の記録を検索してシステムに注文するための24時間年中無休の可用性を提供します。
- 現在進行中の注文とそのステータス(発注、ベーキング、ディスパッチ、配信、配信)をリアルタイムで検索します。
- すべての作業車両の位置とそのペイロードをリアルタイムで追跡します。
- システムクラッシュまたはネットワーククラッシュ後にシステムの任意の部分を回復して、1、2、および3を提供し続けます。
要約すると、上記のシステムにはどのような種類のデータストレージ(CA、PA、またはCP)が適していますか?どのような種類のデータストレージがR1要件をよりよく満たすでしょうか?