【问题标题】:How to store multidimensional data如何存储多维数据
【发布时间】:2017-09-13 23:14:47
【问题描述】:

请考虑以下情况:

  • 我每小时测量一次价值(时间)(从几个月到大约 10 年的广告系列)
  • 关闭几个物种(1到10)
  • 有几个仪器(1到5)
  • 在多个测量网站 (~70)
  • 每个站点都有多个采样级别(1 到 5)
  • 每个值都有一个标志,表明它是否有效

考虑到数据库/文件/任何东西都应该可以用 R 读写。

注意:

  • 一些实验包括在很长一段时间内测量少数物种,使用单一仪器和采样水平,
  • 一些实验包括比较许多网站 (~70) 的相同几个月时间范围
  • 一些站点有许多采样级别和/或仪器(将进行比较)
  • 存储系统必须是可并行读取(如果可能的话可写入)

到目前为止我尝试了什么:

  • MySQL 数据库,每个站点/物种 1 个表,每个表包含以下列:时间、采样级别、仪器、值和标志。当然,随着站点数量的增长,表的数量也在增长。比较网站很痛苦,因为它需要很多请求。此外,采样级别和仪器在表内重复很多时间,这样占用空间效率低。
  • NetCDF 文件:有趣的是它们能够存储多维数据,它们很适合存储一组数据,但不适合用于日常修改并且不是很“可扩展”。
  • Druid,一个多维数据库管理系统,原本是面向“商业智能”的。原理不错,但是对我的应用来说太重太慢了。

因此,我正在寻找一个系统:

  1. 花费或多或少相同的时间来检索
    • 1 个站点、1 个物种、1 台仪器、1 个采样级别的 100 小时数据,或
    • 10 个站点、1 个物种、1 个仪器、1 个采样级别的 10 小时数据,或
    • 10 小时的 1 个站点、2 个物种、1 台仪器、5 个采样级别的数据,或
  2. 允许并行读/写
  3. 尽量减少写入和读取数据库的时间
  4. 尽量减少使用的磁盘空间
  5. 允许轻松添加新站点、仪器或物种等。
  6. 适用于 R

一个好的系统应该是一种超立方体,它允许所有维度上的复杂请求......

【问题讨论】:

  • 您预计有多少样品/单位?
  • 不用于理解样品/单位的含义。我在帖子的第一个列表中写了每个“维度”的大致长度。例如,目前我每个站点有 1 到 5 台仪器(取决于站点),一些站点有 1 台仪器测量 2 个物种 10 年(每个物种 10*365*24=87600 小时值),在其他站点我有 5 台仪器测量同一物种 3 个月等。变化很大。

标签: r database


【解决方案1】:

具有多列主键(或候选键)的关系数据库非常适合存储这种多维数据。根据您的描述,合适的主键似乎是timespeciesinstrumentsitesampling_levelflag 似乎是值的属性,而不是键。该表应具有用于选择要检索的数据的所有列的索引。您可能需要额外的表格来存储物种、仪器和地点的描述或其他属性。主数据表中的每一个都有外键。

【讨论】:

  • 谢谢。这个想法值得一试,但我想避免timespeciesinstrumentsitesampling_level 列中的值的数千次重复所暗示的磁盘空间浪费。并且它不允许并行 R/W。不过,其他标准还可以!
  • speciesinstrumentsitesampling_level 值编码为单字符代码(或更多根据需要)将最小化存储空间。查找表可以提供这些的完整定义。 R 中的内存空间可能比数据库的磁盘空间更成问题,紧凑的编码也会有所帮助。
猜你喜欢
  • 2012-08-21
  • 1970-01-01
  • 2011-09-12
  • 1970-01-01
  • 2019-08-08
  • 1970-01-01
  • 2021-03-09
  • 1970-01-01
  • 2016-07-10
相关资源
最近更新 更多