2016-03-19 7 views
2

現在、毎秒のライブデータをJSON形式で提供するサービスがあり、SQLserverテーブルに保存します。ファイルフィールドのために欠落したテーブルフィールドを持つストリームデータを構造化する最良の方法

通常、テーブルは約20フィールドのvarchar、int、およびdecimalで、各行/レコードは1秒ごとに1つのタイムスタンプです。 JSONクエリとINSERTクエリの両方には、すべてのタイムスタンプ上のすべてのフィールドのデータが含まれています。

応答時間を短縮し、送信バイトを減らすために、将来のJSONにはデータの変更のみが含まれます(つまり、値が以前の値とは異なります)。したがって、JSONには多くのフィールドは含まれません。

私の質問は、これをSQLに保存してデータの削減の恩恵を受ける最もよい方法です。これを行うにはより良い方法がありますか?私がNULLエントリで同じテーブル構造を使用した場合、確かにこれはとにかくフィールドの型に基づいて同じバイトサイズになりますか?

編集:新しいストリーミング形式は、次

  • 各時間枠はまだデータ値を持つことになりますが、以前の値からのデータ変更がなかった場合、彼らはJSON配列にならない意味します。

  • 私はディスク容量を節約しようとしています。特定のタイムスタンプの「フル」データを取得するために、SQLの外部で後処理が必要な場合にデータを再構築することは喜ばしいことです。

  • おそらく、完全なJSON応答文字列をタイムスタンプとともに保存するほうがよいでしょうか? JSONと全体的なアイデアが、可能なNULLを格納するための最良の方法に精通していない

+0

私の主な焦点は、同じ値を繰り返し保存することなく、現在のデータが以前のデータと同じであることを知っていることによる記憶容量の削減の恩恵を受ける能力でした。 – pathDongle

+0

データはどのくらいの頻度で変更されますか?データはどのように照会されますか?第二の質問は特に重要です。データベースの構造は、(少なくとも部分的に)データの使用方法*に基づいていなければなりません。 –

+0

通常、24時間以上経過すると、すべてのフィールドがリフレッシュごとに約3時間、残りの21時間がほとんど変化しません。データは分析のためにC#とRで一日に(レコードではなく)記録されますが、クエリの速度はそれほど重要ではありません。多くのデータがありますので、私の優先順位はスペースを節約します。また、これは興味深いかもしれませんが見つかりましたhttps://blogs.msdn.microsoft.com/jocapc/2015/05/16/json-support-in-sql-server-2016/ – pathDongle

答えて

0

は、固定サイズのフィールドを置くことである(INT、BIT、SMALL INT DECIMAL、FLOAT、など)をテーブルの先頭でテーブルの最後に可変サイズのフィールド(VARCHAR、NVARCHAR、XML、JSONなど)があります。

2番目のアドバイスは、SQL2016で一時テーブルの更新を使用することです。これはデータを最良の方法で保存することになります(調査が必要です)が、データの抽出と処理が大幅に簡単になります。

関連する問題