代码之家  ›  专栏  ›  技术社区  ›  brianz

以分贝为单位存储时间温度数据

  •  0
  • brianz  · 技术社区  · 15 年前

    我在数据库中存储时间温度数据,这实际上只是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`)
    

    这有很大的帮助…我可以将一个10000纯文本的图压缩到2.5K左右。由于该数据只是在另一个表中引用,所以不需要对其进行搜索或索引。

    我的问题是:有没有其他方法来存储这些数据?我没有考虑哪种方法在存储空间方面更有效?

    3 回复  |  直到 15 年前
        1
  •  3
  •   dkretz    15 年前

    有没有理由认为存储空间会对您的应用程序造成限制?我会尽量确定情况是这样的,然后再把它放在更高的优先级上,相比之下,方便的访问和使用;为此目的,听起来你所拥有的是令人满意的。

        2
  •  1
  •   Luixv    15 年前

    实际上我不太明白你所说的“压缩情节”是什么意思。这意味着,您正在压缩2000个度量值,还是正在压缩每一行?

    总之,空间很便宜。我会用传统的方式,即两列,每个测量一个条目。

    如果出于某种原因,这不起作用,如果你想将2000个测量值保存为一个记录,那么你可以做得更好。

    . 用您的测量值创建一个csv文件。 . 压缩(gzip-9提供最大压缩) . 将它保存为 斑点 (或) 长斑 取决于您使用的数据库)而不是长文本

    然后把它保存在数据库中。

    这将给你最大的压缩。

        3
  •  0
  •   Martin Torhage    15 年前

    PostgreSQL有很大的存储空间开销,因为每个元组(表中一行的预呈现)都是28字节,不包括数据(PostgreSQL 8.3)。有2、4和8个字节的整数,时间戳是8个字节。我想浮点数是8字节。因此,在PostgreSQL中存储100000000行需要比MySQL多几个gib的存储空间(这取决于您在MySQL中使用的存储引擎)。但是与MySQL相比,PostgreSQL在处理海量数据方面也非常出色。尝试对一个巨大的mysql表运行一些DDL查询,你就会明白我的意思了。但是,您存储的这个简单数据可能很容易分区,所以简单的MySQL可以很好地处理这个工作。但是,正如我一直说的,如果你不确定你是否真的需要一个特定的MySQL特性,你应该选择PostgreSQL。

    我把这篇文章限制在mysql和postgresql上,因为这个问题只标记了这两个数据库。

    编辑:对不起,我没看到你在数据库中存储了csv。