チャットアプリを作成していますが、チャット会話で送信されたすべてのメッセージの完全な履歴が必要です。現時点では、各メッセージを「メッセージ」というテーブルの単一行として保存しています。 「こんにちは」のような小さなメッセージにも独自のデータベースレコードがあるため、このテーブルが大きくなる可能性があることを認識しています。
誰でもよりスケーラブルなmysqlソリューションを推奨できますか?個々のメッセージが検索可能、編集可能、または削除可能である必要はありません。会話全体を1つの大きなフィールドに保存できますか?
あなたのアイデアを聞いてみたい!
データベースに履歴全体を保存することに何の問題もありません。それらはその種のタスクのために準備されています。
実際、ここでStack Overflowにチャットのサンプルスキーマへのリンクを見つけることができます。 example
それでもサイズが心配な場合は、一定時間(1分程度)後にのみプッシュするアプリケーションにバッファーを追加するなど、グループメッセージにいくつかの最適化を適用できます。そうすれば、1行のメッセージだけを避けることができます。
単一のファイルへの同時書き込みの必要性を回避できる場合、チャットメッセージを保存するためのデータベースは必要ないと思われます。
テキストファイルに会話を追加するだけです(ユーザー\会話ごとに1ファイル)。ディレクトリ/ファイル構造を持っている
ファイル構造の簡略化されたビューは次のとおりです。
chat-1-bob.txt
201101011029, hi
201101011030, fine thanks.
chat-1-jen.txt
201101011030, how are you?
201101011035, have you spoken to bill recently?
chat-2-bob.txt
201101021200, hi
201101021222, about 12:22
chat-2-bill.txt
201101021201, Hey Bob,
201101021203, what time do you call this?
ユーザーID、会話ID(ガイド?)、およびファイル名への参照のみを保存する必要があります。
もっとシンプルで拡張可能なソリューションを得るのは難しいと思うと思います。
LOAD_FILE
を使用してデータを取得することもできます。 http://dev.mysql.com/doc/refman/5.0/en/string-functions.html
会話を再構築する必要がある場合は、送信されたチャットメッセージ(ファイル内)に値(日付時刻)を追加して、ファイルをマージおよび並べ替えることができるようにする必要がありますが、この時点ではおそらく良い考えですデータベースの使用を検討する。
これらの会話のすべてのメッセージを含むx会話用のデータベースを作成できます。これにより、xを超えるたびに新しいデータベース(またはサーバー)を追加できます。 Xは、インフラストラクチャがサポートする会話の数です(ハードウェアに依存します...)。
問題は、同じデータベース上で大きな会話(大量のメッセージ)が発生する可能性があることです。例えばデータベースAとデータベースBがあり、それぞれが保存されています。 1000件の会話。サーバーBよりもサーバーAの方がはるかに多くの「大きな」会話がある可能性があります(これはユーザーが作成したコンテンツであるため)。ルックアップを含む「マスター」データベースを追加できます。このデータベースでは、単一の会話を見つけることができます(または、ハッシュ/モジュロなどからデータベースを割り当てるスキーマがあります)。
同じ問題に対処する現実世界のアーキテクチャを見つけることができるかもしれません(最初の問題ではないかもしれませんが)、すでに解決されています。