2017-03-03 14 views
1

これは一般的な質問であり、このフォーラムで回答されていますが、私の質問はシナリオに固有です。 私は、データベーステーブル内のセンサデータを格納していますセンサーデータにタイムスタンプまたは日時を使用する必要があります

CREATE TABLE `sensordata` (
    `userID` varchar(45) NOT NULL DEFAULT '', 
    `instrumentID` varchar(10) NOT NULL DEFAULT '', 
    `utcDateTime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', 
    `localDateTime` datetime DEFAULT NULL, 
    `data` varchar(200) DEFAULT NULL, 
    PRIMARY KEY (`userID`,`instrumentID`,`utcDateTime`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 

localDateTime我々は、ユーザーがのタイムゾーンを変更できるようにするため、列はので、私はそれを取り除くしたいが、私はまた、ローカルタイムを追跡する必要が冗長です私は記録されたデータの現地時間を維持しています。また、utcDateTimeのデータ型をtimestampに変更して、SELECTクエリで時間変換を実行できるようにしたいと考えています。たとえば、

If a sensor is recording in Sydney, one day the user changes its timezone to UTC, how will I know which data is for what time (if I use the current timezone of the sensor). 

私はこのスキーマに固執する必要がありますか?または、タイムゾーンの変更を追跡し、それに基づいて日付を解析する別のテーブルを作成する必要がありますか? 良い解決策がある場合は、アドバイスをお願いします。 ありがとう

+0

あなたはUTCで保存した場合、それは「現地時間」のためにどのような違いを生むん - センサーにローカルであるか、それを格納するサーバーに対してローカルであることを意味しますか?私はあなたが時間帯を救うことができたと思います(日付の本当の必要はありません)。ユーザーにデータを表示することは、UTCから選択したタイムゾーンに変換することです。 –

+0

質問では、センサーの現地時間を話しています。 –

答えて

2

センサの読み取り時にUTC + 0時間とlocalTimeOffset(分)を格納するためにDATETIMEを使用します。どうして?

時間の経過とともにオフセットがどのように変化するかという単純なロジックはありません。時間の経過とともに国によって異なる場合があります。また、DSTの変更は異なる方法で適用されます。一部の国では、タイムゾーンのDST調整が行われていますが、一部の国(オーストラリアもその1つと考えています)がタイムゾーンを変更しています。

utcDatetimeとlocalTimeOffsetを設定すると、センサーのタイムゾーンの変更を含むあらゆる状況下でイベントの正確な時刻を再現させることができ、イベント時刻をユーザーのタイムゾーン時間に変換できるようになります。

サイドノート:あなたは、UTCのようなオフセットを持っている国があるとして、数分でlocalTimeOffsetを格納する必要が+ 05:45(ネパール)

+0

ええ、そう思っていますが、実際にはテーブルが64M以上の行で大きくなり、より良いソリューションを探しているのでテーブルのサイズを小さくしようとしています –

+1

いつもintとしての時間を考えることができます対8B –

+0

それは良い点(Y) –

1

私の2セントは "servertimestamp"と "localtimestamp"を使用することで、どのタイムスタンプがどのようなものであるかを見ることができます。そしてその隣には、自分の設定を変更したときにどのユーザーを見るための "イベントログ"を作成します。

関連する問題