1

我有各种时间序列数据存储在或多或少的地理参考网格上,例如每 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 黑客,甚至将文本文件格式的每一行复制为表中的一行(每个时间戳/纬度对一行,每个经度增量一列 - 耶!)。

我们可以去一个“真实的”地理数据库,但是用 lat 和 long 标记每个单独的值的开销似乎令人望而却步。数据的大小和分辨率十年来没有变化,而且不太可能发生变化。

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

有什么好主意或产品吗?

4

5 回答 5

2

我在这里收集了你的评论:

  1. 我想做所有这些“不写我自己的文件 I/O 代码”
  2. 我需要从“Java Ruby MATLAB”和“FORTRAN 例程”访问

当你把这些加起来时,你肯定不想要新的文件格式。 坚持你拥有的那个。

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

您还说,“实际上,如果我必须有文件,我更喜欢文本,因为这样我可以在必要时进入并手动编辑。”

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

你说了一些我想表达的东西:

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

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

这是我能告诉你的最有用的事情,基于你告诉我们的一切。 你这样说:

“我对优化时间比 CPU 更感兴趣尽管执行速度很好!”

坦率地说,这将需要工具。别再把它想象成一个文本文件了。开始思考你所做的常见任务,并编写小工具——用任何语言——让这些事情变得微不足道。

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

于 2008-09-18T05:20:25.523 回答
0

我肯定会从文本更改为二进制,但仍将每天保存在一个单独的文件中。您可以以这样一种方式命名它们,即它们之间的插入不会对索引造成任何奇怪,例如通过在文件名中包含日期和可能的时间。例如,如果每个位置有多个字段,您也可以考虑文件结构。从大量时间步长中寻找小块是否常见?在这种情况下,您可能希望将它们存储为包含几天数据的图块。您没有提到如何访问数据,这在如何有效组织数据方面起着重要作用。

于 2008-09-17T19:55:28.033 回答
0

说明:

我很惊讶您将“数据库”添加为标签之一,并将其​​视为一种选择。你为什么这么做?

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

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

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

浮点数或双精度数是否足以存储您的数据,还是您觉得需要更多的任意精度?

另外,您想使用什么编程语言来访问这些数据?

于 2008-09-17T20:05:26.603 回答
0

您对如何存储数据的回答完全取决于您将如何处理数据。例如,如果您只需要通过指定日期或日期范围进行检索,那么在数据库中存储为 BLOB 是有意义的。但如果您需要查找具有特定值的记录,则需要做一些不同的事情。

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

于 2008-09-17T20:31:45.183 回答
0

马特,非常感谢,还有 longneck 和 jirv。

这篇文章部分是一个实验,测试stackoverflow话语的质量。如果你们/女孩/外星生命形式具有代表性,我就被卖了。

在这一点上,你已经大大澄清了我的想法。请注意,我可能仍然不一定会执行您的建议,但知道我会非常认真地考虑它。>;-)

我可能会很好地保持文件格式不变,添加到现有的 C 和/或 Ruby 例程以补充我缺乏的一些低级功能(例如插入缺少的时间步),并在整个事情上挂起一个 HTTP 前端,所以数据可以被任何需要它的盒子以任何当前流行的语言使用。虽然构建这些数据的主要是不变的遗留软件,但我们总是为它找到新的消费者,所以多语言/多计算机的要求(天哪,我忘了那个吗?)适用于阅读方面,而不是写作方面。这也避免了一系列安全问题。

再次感谢各位。

于 2008-09-18T15:43:37.770 回答