嗨,我有各种时间序列,每个序列都有唯一的时间序列ID。给定一个ID,该系列看起来像这样(显然重复的日期和数据不同)
datetime data
1/1/1980 11.6985
1/2/1980 43.6431
1/3/1980 54.9089
1/4/1980 63.1225
1/5/1980 72.4399
1/6/1980 79.1363
1/7/1980 82.2778
1/8/1980 86.0785
这些时间序列具有不同的“类型”。例如,假设一些时间序列是“ WindData”类型,一些时间序列是“ SolarData”类型,而一些时间序列是“ GasData”类型。给定一个时间序列ID,它将属于某种类型。例如:
相同类型的时间序列(对于instanec 1、2、3)共享元数据的相同字段(但值不相同!),例如WindData可以具有以下字段:
而SolarData可以具有以下字段:
并且GasData可能具有:
现在,问题是随着时间的推移,我可能会拥有更多类型。因此,我想要一种概括这种数据元数据结构的方法。怎么样?我的想法是:
我需要什么数据库结构?
我无法弄清楚如何创建一个表(或多个表),该表可以在给定序列号的情况下告诉我它需要哪些元数据字段。
答案 0 :(得分:1)
我相信您不会在这里找到真正适合您需求的关系数据库结构。
关系数据库的设计遵循“写模式”的理念。我们决定将来要获取的数据是什么样的,然后设计具有该数据模式的存储结构,然后将数据插入该模式。在适当的情况下,这可以很好地工作,已有五十多年的Boyce-Codd风格的数据库结构证明了这一点。
听起来,就像想要存储数据一样,无论形状如何,然后应用“读取模式”原理,然后以查询所需的形式提取有用的位。这将需要NoSQL或NewSQL解决方案。从Hadoop及其相关结构(例如HBase(但不是Hive))到CouchDB或Apache Cassandra,您可以考虑使用多种设备来实现这一目标。
答案 1 :(得分:0)
一般理想如下。您必须有一个系列表和一个“父亲”系列表以及一些子系列表。
create table dbo.Seriekind
(
Id int not null primrary key
,Description varchar(50) not null
,ListOfColumns varchar(500) not null
)
create table dbo.Series
(
Id int not null indentity primary key
,TimeStamp datetime not null
,SerieKindId int not null
)
create table dbo.SolarData
(
Id int not null primary key identity
,SerieId int not null
,SiteName
,SolarPanelType
)
create table dbo.WindData
(
Id int not null primary key identity
,SerieId int not null
,WindTurbineNumber
,WindFarmName
,Country
)
create table dbo.GasData
(
Id int not null primary key identity
,SerieId int not null
,PipelineNumber
,CountryOfOrigin
,CountryOfDestination
)
您要做的一个“不利条件”对于任何新类型的数据都需要一个新表。 FK是微不足道的。
修改
正如Eric解释的那样,SQL结构并不那么灵活。描述数据关系真是棒极了,并且在存储和获取大数据块方面非常有效,更不用说它在某些处理中的功能了。
一个更好的解决方案可能是一种混合解决方案,可以将数据存储为Series表中的json之类的灵活格式,甚至可以使用NoSql解决方案或SQL x NoSQL的混合解决方案。
这里的主要内容是您需要多少个系列,以及一个新系列的发布频率。一打:SQl,一千个:NoSQL。