2011-02-10 7 views
0

私が取り組んでいるプロジェクトのための私のSQLデータベース設計に関する質問。データベース設計、実装に関する質問

私は数秒ごとにデータを受信し、そのデータをデータベースに保存する必要があります。私は自分のDBMSにmySQLを使用しています。データは、各データに添付されたユーザーIDを使用してデータベースに格納する必要があります。私はアプリケーションごとに1人のユーザーしか扱わない。したがって、アプリケーションの各インスタンスは1つのユーザーデータのみを処理します。リモートデータベースはすべてのユーザーデータを格納します。だから、私は誰のデータが誰であるのかを知るために、私はuseridが必要です。

私の考えは、私が50データパケットのように受信し、すべての50データパケットの区切り文字列を作成するまで待つことでした。 (たぶんカンマで区切ります)次に、その文字列をユーザIDとともにデータベースにプッシュします。そしてそのようなデータを保存します。私の質問は、それを行うには良い方法ですか?より良い方法がありますか?これは悪い習慣ですか?ヒントありがとう! =)

私はこのデータをたくさん受け取っています。毎秒のような1つのデータパケット。時には高速です。あなたの考えを私に知らせてください。

DBMSはリモートマシン上で実行されます。アプリケーションはAndroid端末で実行されます。

ありがとうございます!

答えて

2

デリミタ付きの文字列をデータベースに送信するために複数の値を連結しないことをお勧めします。これは、文字列を解析するための追加作業をデータベース上に作成するだけです。

データベースとやり取りするための合理的なフレームワークを使用すると、バインド変数の値が異なるSQLステートメントのバッチをデータベースに作成して送信できます。これにより、ストアドプロシージャやINSERTステートメントの優れたフレンドリな構文が維持され、データベースが適切に正規化されたままになり、ラウンドトリップ回数を最小限に抑えるというパフォーマンス目標が達成されます。

+0

わかりました、それは意味があります。だから、行ごとに1つのデータパケットを保持しますが、一度にいくつかの文を挿入するステートメントのバッチを作成してください。今私はクリスの意味を理解しています。これはあなたが意味することですか? – prolink007

+0

データベースに直接アクセスできる場合は、これに同意する傾向があります。また、通信の問題によるデータ損失の問題もきちんと解決します。トランザクションはコミットされているか、そうではありません。しかし、ネイティブのSQL通信メソッドは、HTTP/jsonがそうでない場合、かなり「チャット」になる可能性があります。また、今扱っておく必要がある資格情報/アクセス管理に問題があります。 –

1

あなたが本当に答えなければならない質問は、データを失うための許容差です。 1k以下のデータを1秒間に転送する要求はあまりありません。特に、jsonとxmlを使用する場合は特にそうです。それでは、バッテリーの寿命はモバイル機器に留意しておくべきことなので、5〜60秒ごとにリクエストを行うことも可能です。

更新プログラムをサーバーにバッチできない理由はありません。

データ損失の許容範囲がない場合は、50個のアップデートのバッチをローカルストレージに収集してアップロードできます。送信に障害が発生した場合は、再送信することができます。しかし、この場合、UUIDのように一意であることが合理的に保証されているレコードIDが必要です。このようにして、サーバーはすでに処理されているレコードを確認し、再処理から除外します。

+0

"更新プログラムをサーバーにバッチできない理由はありません。"バッチでは、パケットの50程度を収集し、私が言及したような文字列を作成することを意味しますか?あなたの用語について興味があるだけです。 – prolink007

+0

データ損失の許容範囲に応じて、10〜50レコードを絶対的に取得してサーバーに送信します。 –

+0

ジャスティンは、1行につき1データを挿入すると述べていますが、挿入コマンドのいくつかのバッチを作成し、50パケットを取得するとバッチを実行します。これは、データの文字列を作成し、50個のパケットがあるときに文字列を挿入するよりも優れているとお考えですか?議論を開始しようとしていない、あなたが何を考えているのか不思議です。 – prolink007

1

dbmsが正常なサーバー上で実行されていて、データを使用するだけであれば、かなり単純なテーブルに簡単に挿入できます。私はそれがほとんど測定可能ではないと思います。

+0

私はこれが当てはまると思っていましたが、以下に述べるChrisのように、私は電池の寿命も心配しています。そしてそれは、文字列を作るよりも速く私のバッテリーを消耗させる可能性があります。すべきである。完全にはわかりません。 – prolink007

1

区切り文字列として格納する問題に取り組んでいます。このデータが保存された後にクエリを実行しようとしていますか? 1つまたは少数の値のグループを検索する必要がありますが、文字列全体ではない場合は、この方法でデータを格納することを検討しないでください。クエリを実行する際に恐ろしいパフォーマンスが得られます。一般に、複数のdatをフィールドに格納することは悪いことです。つまり、関連するテーブルが必要です。

また、データの分析クエリーを行う必要がない場合は、おそらくnosqlデータベースがリレーショナルデータベースよりも優れた選択肢になります。

+0

私はこのデータベースに4つのテーブルを持っています.1つはuser_profile情報を格納するためのもの、もう1つはOPに記載されたデータを格納するためのもの、もう1つはまったく同じ方法で別のデータを格納するものです。すべてのユーザーは、データに関連付けられたユーザーIDを持つ必要があります。 nosqlは依然として私のニーズに適していますか? – prolink007

関連する問題