26

私はC++プログラマーであり、MySQLを使用してデータベースを操作することがありますが、SQLに関する知識はかなり限られています。しかし、私は確かにそれを変えたいと思っています。

現在、SQLクエリのみを使用してデータベースにあるデータの分析(!)を実行しようとしています。しかし、私はあきらめようとしており、代わりにデータをC ++にインポートし、C++コードで分析を行います。

私はこれについて同僚と話し合いましたが、SQLは複雑な分析ではなく、主に(既存のテーブルからの)データのインポートと(新しいテーブルへの)エクスポート、およびもう少し多くのことを目的としていると言って、C++の使用を促しています。データを結合されたテーブルにマージするなど。

誰かが私に線を引くのを手伝ってもらえますか?だから私はいつC++に切り替えるべきか知っていますか?もちろん、パフォーマンスも問題です。

SQLで物事が複雑になる兆候は何ですか?あるいは、クエリの設計で間違ったアプローチを取っているだけかもしれません。それでは、より良いアプローチを取るためのチュートリアル、本、...をどこで見つけることができますか?

これが曖昧すぎないことを願っています。私は本当に少し迷っています。

4

8 に答える 8

26

SQLは、大量のリレーショナルデータの分析に優れています。

線を引く場所は、分析のスケールです。

個々のレコードを一度に1つずつ分析する場合は、アプリケーションで分析してください。

大量のレコードセットを1つの単位として分析する場合、SQLは間違いなくそのジョブに最適なツールです。

行ごとの分析は、SQLが非常にうまく設計または最適化されたものではありません。ただし、100万行のデータグループについて知りたい場合は、データベースで行ってください。

于 2011-07-06T13:09:49.203 に答える
7

私はこれについて同僚と話し合いましたが、SQLは複雑な分析ではなく、主に(既存のテーブルからの)データのインポートと(新しいテーブルへの)エクスポートなどを目的としていると言って、C++の使用を促しています。データを結合されたテーブルにマージするなど。

これは完全に任意です。SQLを学ぶ。Web上には無料で利用できるリソースがたくさんあります。

于 2011-07-06T13:04:17.297 に答える
5

SQLが提供する機能の使用方法を知っていれば、SQLでデータの非常に複雑な分析を行うことができます。

SQLには、結合や射影などの関係演算を実行するための機能があります。和集合、積集合、制限(サブセット)などの集合演算も実行します。また、4つの算術演算子のような数値の基本的な算術演算、およびSQRTのような組み込み関数を実行するためにも使用できます。また、COUNT、SUM、AVGなどの統計関数は、非常に興味深い方法で予測と組み合わせることができます。優れたDBMSを使用すると、組み込み関数をC、C ++、またはPL/SQLで記述された独自の関数で拡張できます。

これらの機能から得られる能力は、データベースがどれだけうまく設計されているかによって異なります。適切に設計されたデータベースはリレーショナルモデルに準拠しており、データの使用目的に関連している必要があります。

SQLコードは、保存された手順でデータベースに保存できます。SQLスクリプトファイルに保存できます。そして、あなたがすでに知っているように、それはアプリケーションプログラムに埋め込むことができます。SQLに加えて、OLAPツールとレポートジェネレータを使用して、データに対して標準的な処理を非常に簡単に行うことができます。

すべての処理をC++で維持するようにアドバイスする人々は、大きくてばかげたファイルシステムのようなデータベースを使用するのに十分なことを学んだように聞こえます。優れたDBMSはそれだけではありません。

于 2011-07-06T15:48:44.950 に答える
4

SQLは通常、独自のデータベースを非常に効率的に処理します(サーバーの実装によって異なります)。

データベースを分析するには、クエリを使用する必要があります。
その主な理由は、通信のオーバーヘッドです。
サーバーがローカルマシン上にある場合でも(リモートサーバーには明らかな通信オーバーヘッドがあります)、分析のためにSQLサーバーからc++プログラムに保存された情報を取得する必要があります。

SQLに10000行ある場合は、SQLサーバーにそれらすべてを読み取らせてプログラムに送信する必要があります。プログラムでは、作業用のデータのローカルコピーが作成される可能性があります。

SQL Serverにクエリを実行させると、実行しているクエリの種類に応じて複雑な最適化が行われ、最終的には限られた量のデータ(実際に必要なデータ)しか取得できなくなります。コミュニケーションを通じて。

于 2011-07-06T13:05:49.060 に答える
2

あなたはSQLでデータ分析を始めるという正しい決断をしました。さて、SQLの知識があなたを制限していると感じたら、2つの選択肢があります。諦めて、慣れ親しんだがあまり効率的ではないツールセット(C ++)に戻すか、SQLのレベルを上げるかです。

ある時点でSQLも複雑になりすぎる可能性がありますが、C++も答えにはなりません。おそらくいくつかの特殊なツールです。

于 2011-07-06T13:09:46.907 に答える
2

私の意見では、データベースサーバーによって分析機能に相当するものが提供されていない場合にのみC ++で分析を実行する必要があります。データベースサーバーは非常にスマートであり、データベースサーバーの分析機能のアルゴリズム効率を打ち負かすことは困難でほとんど不可能です。また、分析を実行するために生データをアプリケーションに取り込むことには、多くのオーバーヘッドも含まれます。

ある時点でプレーンSQLが過度に複雑になった場合、サーバーのネイティブPLが適切な選択になる可能性があります

于 2011-07-06T13:12:55.167 に答える
0

JNKとJochaiには同意しますが、Ascanioには同意しません。データベースシステムの知識を向上させることをお勧めします。SQLには付属しています

于 2011-07-06T13:28:02.663 に答える
0

ですから、これは私が考えていたものであり、SQLは、データを格納/操作するための単なるプラットフォーム/言語として、C++またはCライブラリに勝る固有の利点はないはずです。理論的には、これを行う際にSQLと同じくらい効率的ではないにしても、C++ライブラリを構築できるように思われます。そうすることで、int、chars、strings、およびその他のデータ型の格納方法に関してゼロから構築でき、特定のアプリケーション(Web開発など)とのインターフェースが容易になります。クエリがjavascriptのような言語で実行できるようにすることもできます(Web開発者が1つの言語を本当に上手に学ぶことに集中できるようにします)。

于 2016-02-15T15:15:10.003 に答える