2017-06-02 10 views
0

私は、異なるバイオセンサとタブレットセンサのデータを読んで、それらをSQLデータベースに保存したいと考えています。バイオセンサデータは、例えば、皮膚コンダクタンス、心拍数、心拍変動などを含む。これらは単なる数字です(単位はあります)。タブレットセンサーのデータは、タッチ入力、加速、フロントカム、スタイラス入力などがあります。基本的には、スタイラスとフロントカムを除いて数字だけです。私は列にタイムスタンプユーザID錠剤IDセンサIDユニットをテーブルを作成する考えSQLデータベーススキームに関してセンサ測定値を格納するためのデータベース方式

。同時に異なるセンサーの測定値が存在することができるので、キーは(タイムスタンプユーザID錠剤IDセンサID)であろう。私はタブレット(バイオセンサーデータも含む)ですべてのセンサー値を記録していますので、常にタブレットIDがあります。つまり、データベースがタブレット上に保持されていることも意味します。私はAndroidを使用しています。

これは意味があるかどうかわかりません。おそらく、すべてのセンサーに別々のテーブルを用意するのが良いでしょう。あなたはそのような計画をどうやって作っていますか、あるいは良い計画のためのもう一つの提案はありますか?

第2に、スタイラス入力とフロントカム(ビデオ)レコーディングをどのように保存する必要がありますか?私はビデオ録画をデータベースに保存するのではなく外部に保存し、データベースからこの外部ファイル(ファイル名など)に何らかの形でリンクすることを考えました。

保存するデータはたくさんあります。私は60分以上センサデータを収集し、1秒ごとに書き込む値がいくつかあります(たとえば、新しい値がある1/10秒ごとのバイオセンサデータの場合)。したがって、データベースが大きくなりすぎたり、遅すぎたりするという問題が発生する可能性があります。ちなみに、私はデータベースに書きたいだけです。データベースを読む私は2番目(オフライン)のステップでやります。

+0

テーブルにもキーが必要ですか?おそらく、あなたはちょうど大きなデータのダンプを格納しており、そのデータは他のテーブルから参照されることはないでしょう... –

+0

@RB。はい、1つのテーブルだけです。私はキーは必要ありませんが、私が書いたように、私は複数のテーブルを持つより良いスキームを探しています。 – machinery

+0

@ dan1111スタイラスとフロントカム入力は数字だけではありません。 – machinery

答えて

1

センサーごとに別のテーブルに向かって傾けます。理由は:あなたは通常、異なるセンサ一緒のためのデータを分析したいと思うように、彼らは異なるものを表しているので

  • それは、いないようです。
  • ユニットIDまたはセンサーIDを保存する必要はありません。大量のセンサー読み取り値、特にストレージが限られているタブレット環境では、ストレージの節約量が大きくなる可能性があります。
  • 複数の異なるセンサーから高速でレコードを挿入しようとすると、共有テーブルにロックの問題がある可能性があります。

また、1つのテーブルを作成して、デバイスとのやり取りの1つの期間をキャプチャします。「セッション」としましょう。

これは、他のテーブルのキーを提供し、ビデオとスタイラスデータファイルがそのセッションに関連付けられているものを定義することもできます。

ですから、このようなものだろう:私はスタイラスデータについて十分に知らない:

heart_rate_readings (
    session_id, 
    timestamp, 
    value 
) 

注:

session (
    session_id, 
    user_id, 
    tablet_id, 
    video_file, 
    stylus_data_file, 
    session_start_time, 
    session_end_time, 
    ... any other session-level data ... 
) 

をし、各センサーについては、次のようにテーブルを持っています情報に基づく意見を述べる。上記は別のファイルに保存されることを前提としています。しかし、それが受信している座標のストリームの場合は、それをデータベースの別のテーブルに格納することも考えられます。

+0

ありがとうございました。トランザクションを使用すべきか(もしそうなら、コミットするか)、あるいはすべてのセンサーを1つのトランザクションに読み込む必要がありますか?次に、データベースを処理するセンサーごとにスレッドを使用すべきですか(新しい行の挿入)? – machinery

1

いくつかの考え:

私は各センサーのデータは常に同じユニットを使用していると思います。つまり、センサ#7が今日の値でオームで表示された場合、明日ミリメートルで値を与えるわけではありません。もっと説得力のあることに、インチとセンチメートルの間で切り替えることができる設定がいくつかあると思います。しかし、ユニットが常に同じであれば、そのユニットを値とともに同じテーブルに格納しないでください。そのセンサーの単位を示す別の「センサー」テーブル、おそらくはセンサーに関するその他の情報(名前のようなもの)があります。

センサごとに1つのテーブルを持つか、センサごとに1つのテーブルを持つか:1つのテーブルの大きな利点は、新しいセンサを追加する場合、スキーマを変更する必要がないことです。センサーテーブルに接続すると完了です。たくさんのデータがある場合、このテーブルは大きくなる可能性があります。しかし、各レコードはかなり小さいです:私はセンサーIDとタブレットIDはintのことができると推定します。ユーザーIDはintまたはguidです。

私は決してビデオをデータベースに保存しようとしたことはありません。私は画像を保存しており、それらは他のデータと比較して巨大です。ビデオは通常少なくともメガバイトです。私の気持ちは、ファイルを個別のファイルとして保存し、ファイル名を保存することです。実際にDBに動画を入れようとしている人に喜んで譲りましょう。

+0

トランザクションを使用する必要がありますか?そうであれば、いつコミットするのですか?すべてのセンサーを1つのトランザクションに読み込む必要がありますか?次に、データベースを処理するセンサーごとにスレッドを使用すべきですか(新しい行の挿入)? – machinery

+0

私はセンサーの読みが独立して有効であると思います。つまり、心拍数を取得しても、何らかの理由でシステムが血圧を得ることができない場合、心拍数は依然として良好で有用な測定値です。それが本当であると仮定すると、トランザクションであってはなりません。一緒に取ったときに意味のある読み取り値がある場合、トランザクションの場合があります。トランザクションを使用する通常の理由は、2つのアカウント間でお金を転送しようとするなどの不整合な状態を防ぐことです。したがって、1つのアカウントから引き落としますが、もう一方のアカウントに追加しようとして失敗すると、今度はお金... – Jay

+0

...ちょうど姿を消した。 – Jay

関連する問題