web-dev-qa-db-ja.com

バックエンドでの計算を遅くするために、ユーザー入力と想定される入力を一致させる方法は?

背景:

私は臨床試験シミュレータを書いています。ユーザーは、100人のプラセボ患者、200人の治療患者、「楽観的」転帰シナリオなどの将来の試験オプションを定義します。このようなオプションは1〜20,000です。各オプションについて、10,000〜100,000の試行結果がシミュレーションされます。シミュレートされたデータは、想定されるオプションごとに、後で分析に使用されます。

実装:

これはAngular/Electronデスクトップアプリです(将来、Web拡張機能が追加される予定です)。フロントエンドはREST APIリクエストを試行オプションとともに送信します。Pythonバックエンドはシミュレーションを並行して実行します。結果はPostgreSQLデータベースに保存されます、オプションごとに行があります。データベースはユーザーのラップトップまたは外部ストレージにあります。シミュレーションを実行しているユーザーが1人います。

パフォーマンス:

シミュレーションには時間がかかる場合があり、その結果、大量のメモリが必要になります。したがって、ユーザーが試用オプションを追加したら、すべてのオプションではなく、これらの追加についてのみシミュレーションを行います。実行中のシミュレーションを中止することもできます。

データの整合性:

ユーザーが入力(試用オプション)を想定しているものは、最新の保存されたシミュレーション(およびその後の分析)への入力と一致している必要があります。そのため、フロントエンドとデータベースの違いを常にユーザーに通知したいと思います。したがって、違いがある場合、分析は無効になります。

質問:

この一貫性をどのように保証できますか?たとえば、フロントエンドは3セットの試行オプションを追跡できます。(1)終了したシミュレーション用。 (2)進行中のシミュレーションの場合、および(3)シミュレーションを開始していない現在のユーザー入力の場合。しかし、これは壊れやすいようです。また、真実の情報源としてバックエンドとデータベースではなく、フロントエンドを使用することに抵抗があります。このフロントエンドのアプローチは理にかなっていますか、それともバックエンドに行くべきですか?または他に何がうまくいくでしょうか?

注: 予測モデリングソフトウェアの設計 は同様のソフトウェアについて説明しますが、安定したユーザー入力とパフォーマンスに重点を置いています。これ以外にも、SEに関する情報はあまり見つかりませんでした。

1

ユーザーが入力を想定しているもの-試用オプション-は[…]

ユーザーがそのような仮定をすることを許可しないでください。少数のオプションで、ユーザーはそれらのいくつかが間違っていることを保証します。

代わりに、シミュレーションを開始する前に、わかりやすい名前を使用するオプションの各組み合わせをユーザーに提供してください。その後、ユーザーはその名前を使用して、後でそのオプションセットを呼び出すことができます。

将来的にバックエンドをクラウドに移動する予定の場合は、コンピューターAからシミュレーションを開始し、コンピューターBから結果を検査するワークフローにもアプリケーションを準備する必要があります。フロントエンドストレージの使用。