我需要每小时保存250个数据文件,在python中有36000个小数组[date,float,float,float],我可以用PHP轻松阅读.这需要至少运行10年,存储量为6tb.
保存这些单个文件的最佳方法是什么,我在想python struct.但是对于数据量大的工作来说,它开始变坏了?
数据的例子
a = [["2016:04:03 20:30:00", 3.423, 2.123, -23.243], ["2016:23:.....], ......]
编辑:
空间,比解包速度和计算更重要.由于空间非常有限.
解决方法:
所以你有250个数据提供者,每秒提供10个样本(浮点数,浮点数,浮点数).
由于您没有指定您的限制,因此有更多选项.
二进制文件
您可以使用struct写入3 * 36000浮点数的固定数组文件,每个文件4个字节,每个文件可以获得432.000个字节.您可以在文件名中对数据提供程序的目录名和ID进行编码.
如果您的数据不是太随机,一个不错的压缩算法应该削减足够的字节,但如果您不想丢失数据,则可能需要进行某种延迟压缩.
numpy的
使用struct打包的替代方法是numpy.tofile,它将数组直接存储到文件中.它速度很快,但始终以C格式存储数据,如果端点在目标机器上不同,则应注意这一点.使用numpy.savez_compressed,您可以在一个npz存档中存储多个阵列,并同时压缩它.
JSON,XML,CSV
一个好的选择是任何提到的格式.另外值得一提的是JSON-lines format,其中每一行都是JSON编码的记录.这是为了启用流式写入,每次写入后都保持有效的文件格式.
它们易于阅读,语法开销随着压缩而消失.只是不做字符串连接,使用真正的序列化程序库.
说真的,为什么不使用真正的数据库呢?
显然你需要对数据做些什么.每秒10个样本,没有人需要这么多的数据,所以你必须进行聚合:最小值,最大值,平均值,平均值,总和等.数据库已经拥有所有这些,并结合其他功能,它们可以为您节省大量的时间,你可以花费写作哦这么多的脚本和抽象文件.更不用说文件管理变得多么繁琐了.
数据库是可扩展的,并且受到许多语言的支持.使用Python在数据库中保存日期时间,用PHP读取日期时间.没有麻烦你将如何编码你的数据.
我个人最喜欢的是Postgresql,它有许多不错的功能.它支持BRIN index,一个轻量级索引,非常适合具有自然排序字段的大型数据集,例如时间戳.如果磁盘不足,可以使用cstore_fdw扩展它,这是一个支持压缩的面向列的数据存储.如果您仍想使用平面文件,可以编写foreign data wrapper(also possible with Python)并仍然使用sql来访问数据.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。