php – 存储60亿个浮点数,便于访问文件

我需要每小时保存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编码的记录.这是为了启用流式写入,每次写入后都保持有效的文件格式.

它们易于阅读,语法开销随着压缩而消失.只是不做字符串连接,使用真正的序列化程序库.

(sql)数据库

说真的,为什么不使用真正的数据库呢?

显然你需要对数据做些什么.每秒10个样本,没有人需要这么多的数据,所以你必须进行聚合:最小值,最大值,平均值,平均值,总和等.数据库已经拥有所有这些,并结合其他功能,它们可以为您节省大量的时间,你可以花费写作哦这么多的脚本和抽象文件.更不用说文件管理变得多么繁琐了.

数据库是可扩展的,并且受到许多语言的支持.使用Python在数据库中保存日期时间,用PHP读取日期时间.没有麻烦你将如何编码你的数据.

数据库支持索引以加快查找速度.

我个人最喜欢的是Postgresql,它有许多不错的功能.它支持BRIN index,一个轻量级索引,非常适合具有自然排序字段的大型数据集,例如时间戳.如果磁盘不足,可以使用cstore_fdw扩展它,这是一个支持压缩的面向列的数据存储.如果您仍想使用平面文件,可以编写foreign data wrapper(also possible with Python)并仍然使用sql来访问数据.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...