ユーザーがサーバーとの間でファイルを送受信できるようにする iPhone アプリを開発しました。
この時点で、次のことを追跡するために、サーバー側アプリケーション (c# のソケット) にデータベースを追加したいと考えています。
- 個人カード (名前、年齢、電子メールなど) - ユーザーは記入することができます (義務ではありません)。
- ユーザーがこれまでに送受信したファイルの数
- 時々送信される app Stats には、アプリのエラー数、OS のバージョンなどの情報が含まれています。
- 過去 1 時間に送受信されたファイルの総数 (すべてのユーザー)
各ユーザーには、一意の 36 桁の 16 進数「AF41-FB11-.....-FFFF」があります。
DB は次の回答を提供する必要があります: どのユーザーが「ヘビー ユーザー」であるか、過去の日/時間/月に交換されたファイルの数、OS とエラー数の間に相関関係があるか。
残念ながら、私は DB 設計にあまり詳しくないので、次のことを考えました。
以下を含むusersテーブル:
一意のユーザー ID | パーソナルカード | 送信されたファイル | 受信したファイル
アプリの統計テーブル (各ユーザーは多くのレコードを持つことができます)
一意のユーザー ID | number_of エラー | OS_バージョン | .... | sumbission_date_time
一般統計表 ( 1時間ごとに新しいレコードが追加されます)
| | total_files_received_in_the_last_hour | total_files_sent_in_the_last_hour | submit_date_time
私の質問は次のとおりです。
- パフォーマンスの観点から、ユーザーごとにデータを収集してサーバー側アプリケーションに保存し、1 時間に 1 回すべてを DB に投入するのは理にかなっていますか (たとえば、接続を開く、UPDATE フィールド/INSERT フィールドを閉じる、接続を閉じる) ? それとも、ユーザーが実行するたびに各トランザクション (ファイルの送受信) を更新するだけでよいのでしょうか?
- 36 桁の ID 以外に別の主キーを作成する必要がありますか?
- このデザイン意味ありますか??
私はmySQL 5.1、innoDBを使用しています。DBMSはサーバー側アプリと同じマシンにあります
どんな洞察も役に立ちます!