存储栅格数据的好方法是什么?

时间:2008-09-17 19:49:05

标签: database geolocation time-series raster

我有多种时间序列数据存储在一个或多或少的地理参考网格上,例如每0.2度纬度和经度一个值。目前,数据存储在文本文件中,因此在第251天您可能会看到:

251
 12.76 12.55 12.55 12.34 [etc., 200 more values...]
 13.02 12.95 12.70 12.40 [etc., 200 more values...]
 [etc., 250 more lines]
252
 [etc., etc.]

我想提高抽象级别,提高性能并降低脆弱性(例如,当前代码不能在两个现有代码之间插入一天!)。我们弄乱了BLOB-y RDBMS黑客,甚至将文本文件格式的每一行复制为一个表中的一行(每个时间戳/纬度对一行,每个经度增量一列 - yecch!)。

我们可以去一个“真正的”地理数据库,但用lat和long标记每个单独值的开销似乎过高。数据的大小和分辨率在十年内没有变化,也不太可能发生变化。

我一直在把所有内容放在NetCDF文件中,但我认为我们需要完全超越文件思维模式 - 我讨厌我的所有软件都必须从日期中找出文件名,多年处理多个文件等等。将所有十年(和计数)数据放入一个文件中的替代方案似乎也不可行。

任何好主意或产品?

5 个答案:

答案 0 :(得分:2)

我在这里收集了你的意见:

  1. 我想做所有这些“没有编写我自己的文件I / O代码”
  2. 我需要访问“Java Ruby MATLAB”和“FORTRAN例程”
  3. 当你添加它们时,你绝对不需要新的文件格式。 坚持你所拥有的那个。

    如果我们能让您放松第一个要求 - 即,如果您愿意编写自己的文件I / O代码,那么有一些有趣的选项供您使用。我会编写C ++类,并且我会使用类似SWIG的东西来使您的新类可用于您需要的多种语言。 (但我不确定你是否能够使用SWIG来提供Java,Ruby,MATLAB和FORTRAN的访问权限。你可能还需要别的东西。我自己也不确定该怎么做。)

    你还说,“实际上,如果我必须有文件,我更喜欢文字,因为那时我可以进入并在必要时进行手工编辑。”

    我的信念是这是一个误入歧途的陈述。如果您愿意制作自己的文件I / O例程,那么您可以做一些非常聪明的事情......作为一个终极后备,您可以给自己一个工具,从新文件格式转换为相同的旧文件格式您习惯的文本格式......以及另一种转换回来的工具。我会在帖子的最后回到这个......

    你说了一些我要解决的问题:

    “利用40年的数据库优化”

    数据库用于关系数据,而不是栅格数据。您不会利用任何人的数据库优化来利用此类数据。您可能可以将数据塞入数据库,但这几乎不是一回事。

    根据您告诉我们的所有内容,这是我能告诉您的最有用的事情。您这样说:

    “我对优化我的时间比对CPU更感兴趣,虽然执行速度很快!”

    坦率地说这需要TOOLS。不要把它当成文本文件。开始考虑你做的常见任务,并编写小工具 - 在WHATEVER LANGAUGE(S)中 - 使这些东西变成TRIVIAL。

    如果你的工具结果糟糕吗?猜猜是什么 - 因为你的平面文本文件是一种粗糙的格式。但那只是我的个人意见。 :)

答案 1 :(得分:0)

我肯定会从文本更改为二进制文件,但仍然将每一天保留在单独的文件中。您可以通过以下方式命名它们:插入介于两者之间不会对索引产生任何异常,例如在文件名中包含日期和可能的时间。如果每个位置有多个字段,也可以考虑文件结构。从大量的时间步中寻找一个小瓷砖是很常见的吗?在这种情况下,您可能希望将它们存储为包含数天数据的磁贴。您没有提到如何访问数据,这对如何有效地组织数据起着重要作用。

答案 2 :(得分:0)

澄清:

我很惊讶您将“数据库”添加为其中一个标记,并将其视为一个选项。你为什么这样做?

基本上,每个时间步都有一个2D单组分浮点图像。您是否同意这种查看数据的方式?

你还提到了在现有两个之间插入一天的愿望 - 这似乎是一件非常奇怪的事情。你为什么要这么做?我不知道5月4日到5月5日是否有新的一天?

“压缩”是你关心的事情之一,还是你只是厌倦了平面文件?

float或double是否足以存储您的数据,或者您是否觉得需要更多的任意精度?

另外,您想用哪种编程语言访问这些数据?

答案 3 :(得分:0)

关于如何存储数据的答案完全取决于您将如何处理数据。例如,如果您只需要通过指定日期或日期范围进行检索,那么将数据库存储为BLOB就行了。但如果您需要查找具有特定值的记录,则需要执行不同的操作。

请描述您需要如何访问数据/

答案 4 :(得分:0)

马特,非常感谢,同样也是longneck和jirv。

这篇文章部分是一个实验,测试stackoverflow话语的质量。如果你们/ gals / alien lifeforms具有代表性,我就卖掉了。

关于这一点,你已经大大澄清了我的想法。记住,我仍然可能不一定实施你的建议,但要知道我会非常认真地思考。取代; - )

我可能会保持文件格式相同,添加到现有的C和/或Ruby例程来处理我缺少的一些低级功能(例如插入缺少的时间步长),并挂起HTTP前端整个事情,以便数据可以被任何需要它的盒子消耗,无论当前的语言是什么。虽然构建这些数据的遗传软件大多不变,但我们总是想出新的消费者,因此多语言/多计算机的要求(哎呀,我忘了那个吗?)适用于阅读方面,而不是写作方面。这也消除了一大堆安全问题。

再次感谢,伙计们。