我将时间-温度数据存储在一个数据库中,这实际上就是CSV数据。第一列是以秒为单位的时间,从零开始,以下(一个或多个)列是温度:
0,197.5,202.4
1,196.0,201.5
2,194.0,206.5
3,192.0,208.1 ....etc每个图代表大约2000秒。目前,我正在压缩数据,然后将其存储在output_profile longtext字段中。
CREATE TABLE `outputprofiles` (
`id` int(11) NOT NULL auto_increment,
`output_profile` longtext NOT NULL,
PRIMARY KEY (`id`)这很有帮助……我可以将10K的纯文本压缩到大约2.5K。不需要对此数据进行搜索或索引,因为它只是在另一个表中引用。
我的问题是:有没有其他方法存储这些数据,我没有考虑哪种方法在存储空间方面更有效率?
发布于 2009-05-12 03:44:22
有没有理由认为存储空间会限制你的应用程序呢?与易用性和易用性相比,我会在将其放在更高的优先级之前,尝试确定情况确实如此;出于这个目的,它听起来像是您所拥有的是令人满意的。
发布于 2009-05-12 04:57:20
我其实不太明白你所说的“压缩情节”是什么意思。这意味着,您正在压缩2000个测量值,还是您正在压缩每一行?
无论如何,空间是便宜的。我会用传统的方式,即两列,每个度量一个条目。
如果由于某些原因这不起作用,如果你想将2000个测量值保存为一条记录,那么你可以做得更好。
。创建包含测量结果的csv文件。。压缩它(gzip -9给您最大的压缩)。将其另存为blob (或longblob,取决于您使用的数据库),而不是长文本
那就把它保存在数据库里。
这将给你最大的压缩。
发布于 2009-05-12 12:26:04
PostgreSQL有很大的存储空间开销,因为每个元组(表中一行的预先表示)都是28字节,不包括数据(PostgreSQL 8.3)。有2、4和8个字节的整数,时间戳是8个字节。我认为浮点数是8个字节。因此,在PostgreSQL中存储1,000,000,000行将需要比MySQL多几个GiB存储空间(取决于您在MySQL中使用的存储引擎)。但与MySQL相比,PostgreSQL在处理海量数据方面也很出色。试着对一个巨大的MySQL表运行一些DDL查询,您就会明白我的意思。但是您要存储的这些简单数据可能很容易进行大量分区,所以一个简单的MySQL就可以很好地处理这项工作。但是,正如我经常说的,如果你不是真的很确定你需要一个特定的MySQL特性,你应该选择PostgreSQL。
我将这篇文章限制在MySQL和PostgreSQL上,因为这个问题只有这两个数据库。
编辑:对不起,我没有看到你实际上在数据库中存储CSV。
https://stackoverflow.com/questions/851046
复制相似问题