动态创建模型字段的替代方法

时间:2019-05-12 06:18:51

标签: django postgresql data-structures

我正在尝试构建一个Web应用程序,用户可以在其中上传文件(特别是MDF文件格式)并以各种图表的形式查看数据。这些文件可以包含任意数量的基于时间的信号(各种数字数据类型),并且用户可以随意命名信号。

我保存数据的想法涉及两个步骤:

  1. 维护 主表 作为索引,以保存诸如文件名,上载者,何时等的元信息。每次添加记录(行)新文件已上传。
  2. 为上传的每个文件创建一个新表(我将其称为 数据表 ),在该表中,每列将是一个信号(第一列为时间戳)。

这带来了一个问题,我无法为数据表预定义Model,因为在几乎所有上传的文件中,字段的数量,名称和数据类型都会有所不同。

我知道一些有助于构建运行时动态模型的库,但是它们都已过时,因此关于它们的问题基本上得到零答案。因此,尽管付出了很多努力,但我什至不确定我的方法是否是实现自己想做的最佳方法。

我也遇到了this Postgres特定模型字段,该字段可以采用嵌套数组(我认为它适合于基于2D时间的信号列表)。从理论上讲,我可以解析原始的上传文件并构造一个数组,并将所有数据基本上保存在一个字段中。不知道数据大小的限制,这对于以后的查询也可能是一场噩梦,因为创建图表通常一次只占用几列信号,而总共要接收多达数百个信号。

所以我的问题是:

是否有更好的方法来组织数据存储?又如何?

任何见识都将受到赞赏!

1 个答案:

答案 0 :(得分:1)

如果每个用户的字段名称,编号和数据类型将有所不同,则您不需要ORM。您需要的是查询构建器或SQL字符串组合,例如Psycopg。您将以编程方式为用户和上载文件(如果不同)的每种组合创建一个表,并以编程方式插入记录。

使用postgresql可能是一个不错的选择,您也可以在数组上创建GIN索引以加快查询速度。

但是,如果您主要处理时间序列数据,那么使用InfluxDB之类的time-series database,Prometheus会更有意义。