2017-09-17 4 views
2

monogoDBで自分のデータを設計する方法についてアドバイスが必要です。私はこのアプリを持っています。そこでは、ユーザーはクレジットカードやデビット取引を表示、追加、編集、削除できます。以下はデータの見た目です。 Transactions Tableデータベースで常に変化するデータを管理する

こちらのバランス欄は動的です。たとえば、誰かが取引日付10-09-2017を追加した場合、その後、残高フィールドのすべての金額は、新しい取引を反映するためにその瞬間に変更する必要があります。今、私はこのバランスフィールドをデータベースに保存しておらず、ユーザーがページをロードしてリロードしたり、トランザクションを編集、削除、追加するたびに計算しています。今は速いですが、将来、ユーザーが多くのトランザクションを処理すると、ユーザーがデータ・テーブルを表示する前にこれらの計算を行う必要があるため、遅くなると考えています。これを行うより効率的な方法はありますか?

また、私はクライアント側で計算を行っています。そのため、負荷はクライアント側のデバイスであり、サーバー側ではありません。私はそれがサーバー側にあり、多くのユーザーがそれを使い始めると、API要求はずっと遅くなり、しばらくしては使えなくなると思います。これは正しい方法ですか?

PS:読者が私の質問を理解するのは難しいですが、私はベストを尽くしました。これをもっと詳しく説明する必要があるのか​​、それとももっと詳細を追加するべきかを教えてください。

答えて

2

mongodbについての質問ではありませんが、ユーザーインターフェイスに関する質問です。 トランザクションの全履歴を一度に表示できますか? データを読み込むには、スクロールで改ページ(最も簡単)またはリロードする必要があります。 (ほぼ確実に)ネットワークから

  • 遅いロード
  • スローページの相互作用ため、DOMのサイズの:あなたがあるため、バランスのセル計算の問題を取得する前に

    は、あなたが原因の問題が発生する可能性が高いです

最初の100から500件目のトランザクションを表示して、以前のエントリをロードする方法をユーザーに提供します。

更新 - サーバー側の収支計算について:

あなたは、サーバー側でバランスを計算し、キャッシュとして機能する第2のコレクションにそれを格納することができます。トランザクションの挿入が過去に発生した場合は、キャッシュを再計算します。これをスピードアップするために、スナップショットを利用することができます。 3つ目のコレクション内で、現在の残高を特定の間隔で保存することができます。次のようなデータ構造を持つ:トランザクションが過去に挿入されると

{ Balance: 150000, Date: 2017-02-03, LastTransactionId: 546 } 

、その過去の瞬間の前に最新のスナップショットを取ると、それに基づいてキャッシュを再計算します。このように、あなた。再計算されたトランザクションの数をかなり小さく抑えることができます。

+0

ありがとうございました。あなたが言ったようにページングを実装しても、バランスを取るためには、トランザクションの最初から最後のトランザクションまでバランスを計算する必要があります。トランザクションのリストでCRUD操作が毎回行われます。 –

+0

取引は変更されますか?取引は過去の出来事なので、不変でなければなりません。新しいトランザクションは常に最後に追加されます。だから、いつもそれらを再計算する理由は何ですか? – mbnx

+0

新しいトランザクションを追加する際に日付を指定するオプションを使用します。たとえば、先週取引を追加するのを忘れて、それについて知りたければ、先週の日付を入力して取引を入力することができます。その取引後の残高はすべて変更する必要があります。 –

関連する問題