栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 面试经验 > 面试问答

Django + Postgres +大时间系列

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Django + Postgres +大时间系列

如果我正确理解您的想法,那么您正在考虑将时间序列存储在PostgreSQL中,一个时间序列记录存储在一个数据库行中。不要那样做

一方面,这个问题是理论上的。关系数据库(我认为大多数数据库)是基于行独立性的前提,而时间序列的记录是按物理顺序排列的。当然,数据库索引为数据库表提供了一些顺序,但是该顺序是为了加快搜索速度或按字母顺序或其他顺序显示结果。它并不意味着该顺序有任何自然的含义。不管您如何订购它们,每个客户都独立于其他客户,并且每个客户的购买都独立于他的其他购买,即使您可以按时间顺序将它们完全合并以形成客户的购买历史。时间序列记录的相互依赖性要强得多,这使得关系数据库不合适。

实际上,这意味着表及其索引占用的磁盘空间将很大(可能比将时间序列存储在文件中大20倍),并且从数据库中读取时间序列将非常慢,类似于命令比存储在文件中慢得多。它也不会给您任何重要的好处。您可能永远不会进行查询“将值大于X的所有时间序列记录给我”。如果您需要这样的查询,则还需要进行其他分析,而关系数据库尚未设计成执行该分析,因此无论如何您都将整个时间序列读入某个对象。

因此,每个时间序列都应存储为文件。它可能是文件系统上的文件,也可能是数据库中的Blob。尽管我已经实施了后者,但我相信前者更好。在Django中,我会这样写:

class Timeseries(models.model):    name = models.CharField(max_length=50)    time_step = models.ForeignKey(...)    other_metadata = models.Whatever(...)    data = models.FileField(...)

使用a

FileField
将使您的数据库更小,并使创建系统的增量备份更加容易。通过在文件中查找来获取切片也将变得更加容易,这对于blob来说可能是不可能或很难的。

现在,什么样的文件?我建议你看看熊猫。这是一个用于数学分析的python库,它支持时间序列,并且还应该有一种在文件中存储时间序列的方法。

我在上面链接到我的图书馆,我不建议您使用它。一方面,它不能满足您的要求(它不能处理超过一分钟的粒度,并且还有其他缺点),另一方面,它已经过时了-
我在熊猫之前写了它,打算转换它将来用大熊猫 熊猫的作者写了一本书“ Python for data analysis”,我发现它是无价的。

更新(2016年): 还有InfluxDB。从未使用过它,因此我没有意见,但是如果您想知道如何存储时间序列,那绝对是您需要检查的东西。

更新(2020年2月7日): 还有TimescaleDB,扩展到PostgreSQL。

更新(2020-08-07):
我们再次更改了软件,以使其使用TimescaleDB将数据存储在数据库中。我们已经精通PostgreSQL,并且很容易学习一些TimescaleDB。最重要的具体优势是,我们可以进行查询,例如“在2019年的24小时内查找所有降雨量大于50mm的位置”,这在将数据存储在平面文件中时非常困难。另一个优势是完整性检查-
多年来,由于这里和那里的小错误,我们有一些时间序列重复行。缺点也很明显。它使用10倍以上的磁盘空间。因此,我们可能需要更改PostgreSQL备份策略。慢一点
检索30万条记录的时间序列可能需要一秒钟的时间。这是瞬间。我们需要实现缓存以检索时间序列,而这在以前是不需要的。



转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/640140.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号