Sql 构造缺少表字段的流式数据的最佳方法,有利于文件大小

Sql 构造缺少表字段的流式数据的最佳方法,有利于文件大小,sql,Sql,我目前有一个服务,它每秒以JSON格式提供实时数据,并将其保存到SQLserver表中 通常,该表大约有20个varchar、int和decimal字段,每一行/记录每秒都有一个时间戳。JSON和INSERT查询都包含每个时间戳上所有字段的数据 为了加快响应时间和减少传输字节,将来的JSON将只包含对数据的更改(即该值与以前的值不同),因此JSON中将不包含许多字段 我的问题是,在SQL中存储这些数据的最佳方法是什么,以从数据的减少中获益?有更好的方法吗?如果我使用相同的表结构和空条目,那么基于

我目前有一个服务,它每秒以JSON格式提供实时数据,并将其保存到SQLserver表中

通常,该表大约有20个varchar、int和decimal字段,每一行/记录每秒都有一个时间戳。JSON和INSERT查询都包含每个时间戳上所有字段的数据

为了加快响应时间和减少传输字节,将来的JSON将只包含对数据的更改(即该值与以前的值不同),因此JSON中将不包含许多字段

我的问题是,在SQL中存储这些数据的最佳方法是什么,以从数据的减少中获益?有更好的方法吗?如果我使用相同的表结构和空条目,那么基于字段类型,这肯定是相同的字节大小吗

编辑:新的流媒体格式将意味着以下内容

  • 每个时间段仍将有数据值,但如果之前的值没有数据更改,则它们将不在JSON数组中

  • 我正在考虑节省磁盘空间。我很乐意在需要时通过SQL之外的后处理重新生成数据,以获得任何特定时间戳的“完整”数据

  • 可能最好只存储带有时间戳的完整JSON响应字符串


不熟悉JSON和整个概念,但存储可能的空值的最佳方法是将固定大小的字段(INT、BIT、SMALL INT DECIMAL、FLOAT等)放在表的开头,将可变大小的字段(VARCHAR、NVARCHAR、XML、JSON等)放在表的末尾


第二个建议是在SQL 2016中使用时态表更新。这可能会以最佳方式存储数据(需要研究),但会大大简化数据的提取和处理。

我的主要重点是能够从减少存储大小中获益,即知道当前数据与以前的数据相同,而无需重复存储相同的值。数据多久会更改一次?如何查询数据?第二个问题特别重要。数据库的结构应(至少部分)基于数据的使用方式。通常情况下,如果超过24小时,则每次刷新时每个字段都会更改约3小时,剩余的21小时几乎没有更改。数据在C#和R中被查询一整天(而不是一条记录一条记录)进行分析,但查询速度并不重要,因为数据量很大,所以我的首要任务是节省空间。另外,刚刚发现这可能很有趣,我确实需要知道当前值,尽管在该时间段上没有提供数据,SQLServer是否有数据压缩选项?这将是一个很好的用例,因为您的数据有很多重复值。除了启用压缩,您不需要更改任何其他内容。