1

私は多かれ少なかれジオリファレンスされたグリッドにさまざまな時系列データを保存しています。たとえば、緯度と経度の 0.2 度ごとに 1 つの値です。現在、データはテキスト ファイルに保存されているため、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.]

抽象化のレベルを上げ、パフォーマンスを向上させ、脆弱性を減らしたいと考えています (たとえば、現在のコードでは、既存の 2 つのコードの間に 1 日を挿入することはできません!)。BLOB-y RDBMS ハックをいじり、テキスト ファイル形式の各行をテーブルの行として複製することさえありました (タイムスタンプ/緯度のペアごとに 1 行、経度の増分ごとに 1 列 -- うん!)。

「実際の」ジオデータベースにアクセスすることもできますが、個々の値に緯度と経度でタグ付けするオーバーヘッドは法外に思えます。データのサイズと解像度は 10 年間変わっておらず、今後も変わる可能性は低いです。

私はすべてをNetCDFファイルに入れようと頑張ってきましたが、ファイルの考え方を完全に乗り越える必要があると思います.私のすべてのソフトウェアが日付からファイル名を見つけ出したり、複数のファイルを何年にもわたって処理したりする必要があるのは嫌いです. 10 年間 (およびカウント中) のすべてのデータを 1 つのファイルに入れる別の方法も、実行可能ではないようです。

何か素晴らしいアイデアや製品はありますか?

4

5 に答える 5

2

ここにあなたのコメントをまとめました:

  1. 「自分のファイルI/Oコードを書かずに」これらすべてをやりたい
  2. 「Java Ruby MATLAB」と「FORTRAN ルーチン」からのアクセスが必要です

これらを合計すると、新しいファイル形式は絶対に必要ありません。 あなたが持っているものに固執します。

最初の要件を緩和できる場合、つまり、独自のファイル I/O コードを作成する意思がある場合は、興味深いオプションがいくつかあります。C++ クラスを作成し、SWIG のようなものを使用して、必要な複数の言語で新しいクラスを使用できるようにします。(しかし、SWIG を使用して Java、Ruby、MATLAB、および FORTRAN からアクセスできるようになるかどうかはわかりません。別のものが必要になるかもしれません。どうすればよいか、私自身もよくわかりません。)

あなたはまた、「実際、ファイルが必要な場合は、必要に応じて手動で編集できるテキストの方が好きです」とも言いました。

私の考えでは、これは見当違いの発言です。独自のファイル I/O ルーチンを作成したい場合は、非常に賢い方法があります...そして究極のフォールバックとして、新しいファイル形式から同じ古いファイル形式に変換するツールを自分で用意することができます。使い慣れたテキスト形式...そして元に戻す別のツール。これについては記事の最後に戻ってきます...

あなたは私が対処したいことを言いました:

「40 年間の DB 最適化を活用する」

データベースは、ラスター データではなく、リレーショナル データを対象としています。この種のデータでは、誰かの DB最適化を利用することはありません。データを DB に詰め込むことはできるかもしれませんが、それはほとんど同じことではありません。

あなたが私たちに話してくれたすべてに基づいて、私があなたに言うことができる最も有用なことは次のとおりです. あなたはこう言いました:

「 CPU よりも時間を最適化することに関心がありますが、実行速度は良好です!」

率直に言って、これには TOOLS が必要です。テキストファイルと考えるのはやめましょう。自分が行う一般的なタスクについて考え始め、小さなツールを (言語に関係なく) 作成して、それらのタスクを些細なものにします。

また、ツールのパフォーマンスが悪いことが判明した場合はどうなりますか? 何を推測してください - それはあなたのフラットなテキスト ファイルが汚いフォーマットだからです。しかし、それは私の意見です。:)

于 2008-09-18T05:20:25.523 に答える
0

私は間違いなくテキストからバイナリに変更しますが、毎日別のファイルに保存しておきます。ファイル名に日付と可能な時刻を含めるなど、間に挿入してもインデックスに異常が生じないように名前を付けることができます。たとえば、場所ごとに複数のフィールドがある場合は、ファイル構造を検討することもできます。多数のタイムステップから小さなタイルを探すのが一般的ですか?その場合、それらを数日間のデータを含むタイルとして保存することをお勧めします。データを効率的に整理する方法に大きな役割を果たすデータへのアクセス方法については言及されていません。

于 2008-09-17T19:55:28.033 に答える
0

データを保存する方法に関するあなたの答えは、データをどうするかによって完全に異なります。たとえば、日付または日付範囲を指定して取得する必要がある場合は、BLOB としてデータベースに格納するのが合理的です。ただし、特定の値を持つレコードを見つける必要がある場合は、別のことを行う必要があります。

データにアクセスできるようにするために必要な方法を説明してください/

于 2008-09-17T20:31:45.183 に答える
0

説明:

「データベース」をタグの 1 つとして追加し、それをオプションと見なしたことに驚きました。どうしてこれをやったの?

基本的に、すべての時間ステップで 2D の単一成分浮動小数点画像が得られます。このデータの見方に同意しますか?

また、2 つの既存の日付の間に 1 日を挿入したいという要望にも言及しましたが、これは非常に奇妙なことのように思えます。なぜそれをする必要があるのですか?5 月 4 日から 5 月 5 日の間に、私が知らない新しい日はありますか?

「圧縮」は気になることの 1 つですか、それともフラット ファイルにうんざりしていますか?

float または double でデータを保存するのに十分でしょうか? それとも、より任意の精度が必要だと思いますか?

また、このデータにアクセスするには、どのプログラミング言語を使用しますか?

于 2008-09-17T20:05:26.603 に答える
0

マット、どうもありがとう。

この投稿は、部分的に実験であり、stackoverflow 談話の品質をテストしました。あなたたち/ギャル/エイリアンの生命体が代表的であるなら、私は売られます.

要点を言えば、あなたは私の考えをかなり明確にしてくれました。心に留めておいてください、私はまだあなたのアドバイスを必ずしも実行するとは限りませんが、私はそれについて非常に真剣に考えていることを知っています. >;-)

ファイル形式はそのままにして、既存の C および/または Ruby ルーチンに追加して、不足しているいくつかの低レベル機能 (たとえば、欠落しているタイムステップの挿入) を追加し、全体に HTTP フロントエンドを掛けます。どのようなボックスがデータを必要としても、そのデータを消費することができます。これらのデータを構築するのはほとんど変更されていないレガシー ソフトウェアですが、私たちは常に新しいコンシューマを考え出しています。書く側。これにより、多数のセキュリティ問題も回避できます。

改めまして、皆様。

于 2008-09-18T15:43:37.770 に答える