2016-11-23 6 views
0

私はデータを扱うのが初めてです。MangoDBによるデータモデリング?

私は時間に基づいて多くのデータを持っています。

15分ごとのデータ行。 1時間、1日、1ヶ月ごとにデータを計算してデータベースに保存する必要がありますか?

このスキーマを使用するとよいでしょう。

{ 
    _id: "joe", 
    name: "Joe Bookreader", 
    time min: [ 
       { 
        time: "1", 
        steps: "10" 
       }, 
       { 
        time: "2", 
        steps: "4" 
       } 
       ] 
    time day: [ 
       { 
        time: "1", 
        steps: "30" 
       }, 
       { 
        time: "2", 
        steps: "30" 
       } 
       ] 

} 

noSQLでデータモデリングに関する知識を向上させる方法についてアドバイスがありましたら、本当に感謝しています。

答えて

0

問題へのプログラム的なアプローチから一歩離れて、手元の課題について考えてください。

保存したデータはどのように使用しますか?データを使用するときは、特定のユーザーの正確なステップ数を知ることが重要です。また、特定のサンプルポイントの時間に基づいて大きな画像を表示したい場合もあります。

ユーザーごとの視点を気にしている場合は、上記の計画が有効です。一方、特定の時間にユーザーが平均(または合計)にどれだけ近づいたかなどのグローバルレポートを実行する場合は、ドキュメントが時間(特定の時点または時間範囲)であるスキーマを選択し、ユーザーとステップはあなたのプロパティです。

データベースのもう1つの重要な概念は、その場で計算できるデータを静的に格納することではありません。他のルールと同様に、これにはいくつかの例外があります。キャッシュされた値は短命であり、間違っているとアプリケーションに大きな影響を与えません。もう1つはレポートで、現在の値に基づいてユーザーのレポートを作成して保存しました。ユーザーが新しいデータを取得するように感じる場合、ユーザーはレポートを再実行します。

しかし、多くの場合、データに基づいて間違った判断をする古いデータや間違ったデータを提供するリスクは、余計な計算を避けることによるパフォーマンス上の利点を上回ります。

私がこれを言及している理由は、time mintime dayを保存しているためです。 time daytime minに基づいて計算できる場合は、データベースに格納するのではなく、その場で計算してください。アプリケーションノードで余分な計算能力を使用することなく、time dayの実際の結果を生成するクエリを書くことができます。すべての計算は、計算ノードよりもはるかに効率的で、ネットワークのペナルティなしで、データノードで実行されます。

私はこのポストが少し古くなっていることを認識していますが、私の答えが誰かを助けることを願っています。

関連する問題