2016-08-04 2 views
2

私はnode.jsredissocket.iomongodbとのチャットアプリを開発しています。 MongoDBが最後に来て、メッセージを永続させます。チャットメッセージをmongodbコレクションに保存することをお勧めしますか?

私の質問は、この最後のステップのための最良のアプローチは何ですか?

私は

{ 
    id, 
    from, 
    to, 
    datetime, 
    message 
} 

などのすべてのメッセージのコレクションが早すぎる大きすぎる得ることができ、および読み取りのために非常に遅い得るために起こっている、あなたはどう思いますか?怖いですか

すでに作業した方がよいでしょうか?

+0

チャットは2人だけの間であるか、またはグループの人もそこにいることができますか? – Shrabanee

+0

二人だけ – R01010010

答えて

1

私はdb構造がうまくいくと思います。

あなたは、各ペア間のチャットのためのいくつかのunique idを割り当て、チャットの各レコードにそれを維持します。それを表示するときにそれに基づいて取得します。

セイ12は取得し、AとBの間のチャットのための固有のIDです。あなたはAとB

のためのチャットを表示したいときに、あなたのデシベルの構造は次のようにすることができ12に基づくべきである: -

{ 
    id, 
    from, 
    to, 
    datetime, 
    message, 
    uid 
} 

は、取得のためのいくつかのlimitを(一度に100を言う)与える場合は、あなたの検索を最適化することができ、覚えておいてください。ユーザーが100を超えてスクロールすると、100以上のチャットが取得されます。これは多くの検索を解決します。

limitを使用している場合は、date createdに基づいて検索し、sortと同様に検索クエリを使用してください。

+1

あなたは、UIDインデックス – R01010010

6

MongoDBでは、後で読みたい形式でデータを保存します。何をデータベースから読み取ることは「から」フィールド上でダイナミックな日時フィルターで濾過したメッセージのリストがある場合

、このスキーマはぴったりです。

は、それも数百万レコードの上に、それらを照会するための高速合理的になり、あなたが照会されるフィールドにインデックスを追加することを忘れないでください。

あなたは、例えば、常に一日の完全な履歴を表示したい場合、あなたは一つの文書で一日のためにすべてのメッセージを格納します。両方のタイプのクエリが多量に発生する場合は、メッセージを両方の形式で保存することもできます。

ストレージに問題がある場合は、cappedコレクションを使用することもできます。 1歳以上。

+0

ありがとう、ちょうどキャップされたものは、私が熟考していた何か、それは、情報のおかげで、それを行う方法を知らなかった何かでした – R01010010

0

メッセージはプレーンテキストですか、画像や動画も共有できますか?

後者の場合、1日分のすべてのチャットを1つのコレクションに保存するとうまくいかない場合があります。

実際に画像と動画の共有が許可されている場合は、そのアカウントを考慮する必要があります。 16Mbの文書の制限もあります。

+0

のおかげで、それは将来を考慮に入れるのがいい点です – R01010010

関連する問題