大規模なレコードベースの数学データベースのプラットフォームは何ですか?


11

こんにちは私はプログラミングの経験を持つ土木技師ですが、今日利用できる幅広いオプションに精通していません。先に進むための最善の方法を教えてください。

地上レベルの測量測定値のデータベースをグリッド形式で作成して照会したいと考えています。土工作業を通じて、さまざまな時間に各グリッド位置の多くの測定値があるため、時間の4番目の次元があります。

ほとんどの場合、観測はテキストファイルから読み込まれます。各レコードには、(2 x整数)グリッド位置(行と列)、(浮動小数点)地上レベル、およびさまざまな文字列情報コード(合計で最大30文字)があります。

グリッドは、約10000行x 10000列にすることができます。グリッド上のすべての場所に各調査のレコードがあるわけではありませんが、通常、それらのレコードには最大100のレコードがあります。グリッドの場所の多くには、レコードがまったくありません(サイトは完全に長方形ではありません)。

レコードを検索し、データを抽出して、計算を行います。たとえば、グリッドの場所ごとに最低または最高の地上レベルを計算します。私は、これをFORTRAN、BASIC、Cなどの言語で配列を使用してかなり簡単にプログラムできると確信しています。配列要素の多くは空ですが、これは適切な方法ではないと思います。このような大きなデータベースには、使用方法を学ぶために特別なツールが必要になると思います。

私はプラットフォームの可能なオプションを考えています-

  1. データベースプログラムを使用します。これらがどれほど強力であるかについてはよく知りませんが、GUIではオーバーヘッドが多くなると思います。

  2. SQLを使用しますか?これについてはあまり知りませんが、データベースの言語のようです。私は常に宣言型ではなく命令型言語を使用しており、ウィキペディアからSQLが宣言型であることを理解しているので、この変更には少し神経質になっています。使い方がよくわかりません。コンソールプログラムを作成するコンパイラはありますか?データベースはディスクに保存されていますか?そのような愚かな質問でごめんなさい。

  3. c-treeACEのようなAPIを使用しますか?これは、「これを実行してから、それを実行する」という言語の親しみを私に提供する方法になると思います(残念ながら、これは私がエンジニアとして考える方法です!)。しかし、APIによって提供されるバックグラウンドのメモリと処理の管理が、巨大な配列で実現できるものよりも優れていることを期待しています。

  4. または、オブジェクト指向言語でそれを行うことができ、コンピュータにストレージ要件を心配させることができます。たとえば、各レコードから必要な結果を得るのに役立つメソッドとプロパティを持つオブジェクトとしてレコードを保存した場合-3)に比べて巨大な肥大したプログラムになりますか

何億ものレコードが存在する可能性が高いため、Windowsを実行している最新のPCで、数時間ではなく数分(できれば数秒)でクエリを実行して処理できるようにしたいと考えています。より具体的には、Windows 7 64ビットを実行する6Gb ramと120Gb SSDを搭載したi7プロセッサーです。

誰かが知恵のいくつかの単語を初心者と共有する時間があることを願っています。


午後1時から5時の間にいつでもオンラインになることができる場合(またはそれ以降もすばらしい場合)は、チャットであ​​なたを助けてこの問題を解決したいと考えています。chat.stackexchange.com/rooms/179/the-heap(もちろん、その時間の前に仲間のブリットがいる可能性があります)。地理情報システムが役立つかもしれないなど、特定の考えがあります。
jcolebrand

回答:


9

いくつかのオプションがあり、ここでの私の答えに限定しないでください。特に、配列ネイティブのデータベースが役立つ場合があります。私の答えは、特にSQLベースのデータベースに関する質問についてです。

これは地理空間情報の問題だと私には思えます。SQLベースのデータベースは実際、このような分野で非常によく使用されていますが、これはデータベース内の専門分野でもあります。

この領域のSQLデータベースの中で、PostGISアドオンを備えたPostgreSQLは最高の1つと考えられています。私があなただったら、ここから始めます。SQLの主な利点は、まだ考えていない用途でのデータの再利用に関して、将来的に柔軟性を維持できることです。優れた地理空間サポートを使用してこれを行うと、球形トリガーの詳細を気にすることなく、広い領域の距離を計算できます。

もちろん、これは非常に大きなグリッドでのみ要素になります。地球の曲率を無視できる小さなグリッドの場合、PostgreSQLには、使用可能な座標系上の点を含む、さまざまな幾何タイプがあります。これは、調査されている領域の大きさと、平面ジオメトリを想定できるかどうかが明確でないためです。

それでも、PostGISは、3次元および4次元の幾何座標系での表現と計算を許可することで、物事を単純化します。

また、あなたのサイトは必ずしも正方形ではないということにも注意してください。PostgreSQLでできること(ジオメトリックタイプまたはPostGISのいずれかを使用)の1つは、各サイトに非長方形の境界を定義することです。これにより、測定値を保存する前に、ポイントがサイトの境界内にあることを確認できます。

宣言的な言語の影響

この懸念は誇張されていると思います。SQLクエリは、呼び出し元のプログラムの命令型言語の一部であるかのように記述できます。ほとんどのクエリではそれは重要ではありません。

宣言型言語の意味するところは、クエリ内では、構造はデータベースに、取得する方法ではなく、必要な情報をデータベースに伝えるということです。これは、データベースから複雑な情報が必要な場合に重要です。基本的には、正しい質問をすることができれば(そしてデータが有効であれば)、正しい答えが得られるということです。

ただし、発生する大きな違いは、クエリ内のどこで誤動作が発生するかをよりすばやく絞り込むことができるため、長いSQLクエリは長い命令型サブルーチンよりもデバッグが容易であることです。

これがどのように機能するか

このルートをたどると、選択した言語で書かれたデータベースとプログラムが手に入るでしょう。プログラムはデータベースにクエリを送信し、回答を返します。また、(PostgreSQLおよびその他の多くのリレーショナルDBでは)クエリを関数内に配置して、アプリケーションから呼び出すことができるため、命令型または関数型のインターフェースがさらに提供されます。データはディスクに保存され、プログラムとは別のソフトウェアからアクセスされます。(MS AccessからpgAdminへの)別のプログラムに接続して、クエリを実行したり、レポートを生成したりすることもできます。

本質的に、RDBMSはデータを管理する「数学エンジン」と考えることができ、プログラムはそれと対話して必要なことを行います。


1
返信が遅くなって申し訳ありません。私はとても忙しかったです。私は本当にあなたがsucgに詳細なアドバイスを与えることに感謝します。私はSQLから始めて、O'Reillyの本を学び、本の推奨に従ってmySQlをダウンロードしました。postgreSQL GIS拡張機能の使用方法を調べ、多分C#からSQLにアクセスする予定です。再びありがとう、私は戻ってきます!
user19109 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.