中の技術日誌ブログ

C#とC++/CLIと
VBと.NETとWindowsで戯れる
 

目次

Blog 利用状況

ニュース

自己紹介

大阪でソフトウェアエンジニアをやっています。
お仕事大募集中です。
記事執筆とか、助言依頼とかでも何でもどうぞ(*^_^*)
似顔絵 MSMVPロゴ
MSMVP Visual C# Since 2004/04-2011/03

記事カテゴリ

書庫

日記カテゴリ

00-整理

01-MSMVP

O/Rマッピング

BBSにかこうかと思ったけど、主張ばっかりになったのでやめておいて、ブログで書く

http://bbs.wankuma.com/index.cgi?mode=al2&namber=19525

 

> O/R(ORM) マッピングの是非
> http://blog.y-110.net/log/eid86.html

とりあえず手の届かない所にSQLが行くというのは許容できないので、全体的には同意するけど。

>原因は十中八九データベース部分, 効率の悪い SQL でしょう。

そんなことはない。
もちろんたちの悪いSQLを平気に書くやつが多いのは確かだけど、それよりも性能要件はもっと複雑です。こんなSQL一個直すだけで解決するものばかりではありません。

Webアプリケーションのパフォーマンス確保のためのアプローチが3段階位あって、それがまったく方向性が逆のために、うまくあわないことによるパフォーマンスが出ないことのほうが多いと思います。

>そもそも何十行もの SQL文を見たことがありませんし, もしそのような SQL を書かなければならないのであれば, それは単純にテーブル設計が腐っているとしか思えません。

幸せなんだな・・・

テーブル設計が腐っていなくても業務が複雑ならすぐに(一発)数十行のSQLになるし、処理を書けば100行200行当たり前です。

 

ということで、本題ですが。
すべてのSQLはストアドの中で書きましょう。そうしないとどこでどんなSQLが呼ばれているか把握することは非常に困難になります。
まずはまとめるところから始める。

よくそういうコネクションをまとめるクラスとか作りたがりますが、それは必要ないでしょう。
それよりもデータセットなんかをうまく利用できるようにしたほうがつぶしがききます。
その上でどうしてもまとめないといけないようなことってのはうまくまとめてあげましょう。

投稿日時 : 2008年5月25日 11:34

コメントを追加

#  O/R(ORM) マッピング 2008/05/25 12:33 DHJJ [Hatsune's Journal Japan] blog

O/R(ORM) マッピング

# re: O/Rマッピング 2008/05/25 15:16 やじゅ

全部ストアドか、うーむ悩みどころ
確かに、なんでVBでSQL埋め込みしてるんだろう
今までのプロジェクトでの右倣え的発想かな

ストアド内で条件に応じてWHERE句に入れる
入れないってやろうとするとSQLを文字列加工
して動的SQLにするって方法ですよね。
VB側でも同じことしてるけど、文字列加工が
VB側の方が手軽ってだけかも。

# re: O/Rマッピング 2008/05/25 15:41 片桐

>テーブル設計が腐っていなくても業務が複雑ならすぐに(一発)数十行のSQLになるし、処理を書けば100行200行当たり前です。

まるっと同意。美しい正規化されたテーブル群が業務で美しく使えるかっちゅーっとそれは違うんだわ。
まさしく、青島と室井の関係w

それらの間をうまく取り繕うにはスリーアミーゴならぬ「業務要件でクラス化」と「SQL処理でクラス化」の二つの観点からウンウンうなるしかないわけですよん

そこに正しい答えなんて、あるんかなぁと思います。

# re: O/Rマッピング 2008/05/25 16:38 ネタ好き未記入

私もストアド派です。そもそもストアドは、トランザクションの正規化を行うためのものです。そして、正規化はデータベースの重要な基本であり、正規形をあえて崩す事もありますが、基本的には王道のストアドを行うべきです。
さらにストアドは、セキュリティの多層防御、パフォーマンス向上(逆に悪くなるケースもあるけど)もみこめるので、先ず最初はストアドにするべきでしょう。

# re: O/Rマッピング 2008/05/25 20:51 taka

ストアド書いたことないよー
いまのPJ、管理がめんどくさいとかでストアド使えないよー

# re: O/Rマッピング 2008/05/25 23:14 Mr.T

SQLが数十行とかにならないのは
そりゃ、幸せですな...

# re: O/Rマッピング 2008/05/25 23:54 ネタ好き未記入

>テーブル設計が腐っていなくても業務が複雑ならすぐに(一発)数十行のSQLになるし、処理を書けば100行200行当たり前です。

この意見に賛成なのですが、そう思わない人のコメントがちらほらあるから、最近のシステムはこのぐらいの規模の案件がないのかなぁ?
そうだとしたら、幸せというよりも不幸だと思います。
SQLを何百行も書くシステムを構築するのは、技術者にとってはよい体験だと思います。
えっ?みんなは思わない?

# re: O/Rマッピング 2008/05/25 23:55 ネタ好き未記入

先ほど書いたコメントとは、@ITとか掲示板での事です。

# re: O/Rマッピング 2008/05/26 0:02 Ognac

すごい幸せな記事というのか感想です。
数10行以上のSQLが存在しないということは、クライアントアプリの処理が重いと思うのですが、適切なパフォーマンスが維持できるようなので、それはスキルなのか、軽いシステムなのか.....
Mr.Tさんと同感で、幸せなことだと思います。
給与関係で第三正規化したデータ引用を べたなSQLで書いてたら、すぐ数100行になる。
過去に、view化しないで、タイトル,加給、減給すべて1つのSQL文で書いている、立派なSQL文の改変をしたことがあります。1つのSQL文が 2800行なのには閉口しました。しかし、クライアントでLoopすると10倍以上の処理コストはかかります。それなりにチューニングされたSQL文では読みやすくはありました。  というわけで、極力、ストアード化すべきで、次にクスラ.DLL化、最後にクライアントアプリでコソコソ...と考えます。

# re: O/Rマッピング 2008/05/26 9:10 うつせみ(虚蝉)

めっちゃ効率の悪いSQLを書いてました。
見直すと速度が倍になるとか。。。
…。日々勉強です。

# re: O/Rマッピング 2008/05/26 10:07 よねけん

みなさんが思う「数十行のSQL」って同じイメージで捉えられたものなのでしょうか?

SELECT
A,
B,

FROM
テーブルHOGE

みたいな記述をして数十行ならごく普通というか、数十行くらい行かないのはなかなかないので、「数十行のSQL」というのは、上記のようなSQLを1行で書いたようなイメージで数十行分を意味しているのだと思っているのですが、みなさんはどう捉えていますか?

>そもそも何十行もの SQL文を見たことがありませんし, もしそのような SQL を書かなければならないのであれば, それは単純にテーブル設計が腐っているとしか思えません。

上記の捉え方を前提として、
私はネタ元のブログ主の意見に近いです。

数十行のSQLになるということは、結合するテーブル数も多く、場合によってはUnionなど様々なテクニックを使い倒しているSQLだと思うのですが、私にはそんなSQLを安全に保守する自身がありません。

Viewを使ってもっと見通しをよくできないか?SQLですべて処理するのではなく、適切にプログラム側で処理した方がよいのではないか?とか考えます。

正規表現でもそうなんですが複雑なものは、どうテストするのか?どうデバッグするのか?どう保守するのか、興味があります。
(個人的には正規表現も使いますが、仕事ではごく簡単なものしか正規表現は使ったことはありません)

ちなみにストアドはOracleで1度しか経験がありません。
この人に聞けばすべて解決!くらいの人の居る中での経験ではないので、デバッグ効率が悪い(たぶんやり方を知らないだけ)、保守性が悪い、という認識です。←真実ではなく、その経験の中で感じた初心者的事実です。
(しかも、Oracle8iくらいの時代にOracle7.3.4で、IF文でNullと比較すると落ちるとか、ストアドの不具合に嵌ったのも一因です)

ばりばり使いこなすプロジェクトを経験してみたいところですが、ばりばりストアドを使いこなせる技術者を見たことがないので、うちでは難しいかも。
プロジェクトメンバー全員にその技術が求められるので、メンバー集めもたぶん大変です。

# re: O/Rマッピング 2008/05/26 10:09 よねけん

すみません。
いろいろ思ったことを書いたら、長文になりすぎました(汗)

# re: O/Rマッピング 2008/05/26 12:20 ネタ好き未記入

ストアドが長くなるのは、トランザクションの正規化が終わっていない状態、論理的整合性チェックが厳しいシステムの場合などに起こります。
ストアドをデバッグする場合は細分化してチェック→取り込んでレグレッションテストを繰り返します。
それで何故一つのストアドが長くなるのかといいますと、データベースは並列操作が行われるから、一貫性などを保つために長くする場合があります。
データベースでは並列操作が普通であり、ストアドをあまり細分化してしまうと、個々が予期せぬタイミングで実行されて、データの一貫性を保つのが難しくなるのです。
ちなみに一貫性他に考える事とは、原子性、独立性、耐久性です。これらACID特性を守るのは困難なのです。

# re: O/Rマッピング 2008/05/26 12:30 やじゅ

ストアドって苦手というか怖い意識を持つ方が多いのかな?
分かってしまうと単純なんですけどね。

# re: O/Rマッピング 2008/05/26 12:39 ネタ好き未記入

>ストアドって苦手というか怖い意識を持つ方が多いのかな?

多分、SQLは手続き型じゃなくて問い合わせ型だから抵抗感を生むんじゃないかな?
DOAで考えれば簡単なのにね。

でも昨今の技術進化の流れを見ると、並列性がより重要視されるのは明白だから、問い合わせ型や関数型が積極的に既存のプログラム言語に取り込まれていくのは目に見ています。
だから、苦手な人は今のうち練習しておいた方がいいと思います。

# King Of Pirate Online 2010/07/03 17:42 Alewclerb

<b>King Of Pirate Online</b>

King Of Pirate is a fully 3D-designed multiplayer online game based on 5,000 years of pirate history.

In it, comical pirate characters and creatures travel the high seas and encounter intricate story-based quests,

wondrous cities and beautiful landscapes in their search for treasures fit for a king ? or a king's ransom!

Though the excitement of ship-to-ship combat is a heady brew for newcomers and veterans alike,

many players take pride in their place among the community. Whether you seek to enforce the laws of the KoP world,

http://www.KingOfPirate.com





Tales of pirates private server
pirate king online private server
top/pko private server
private server
igg top
igg

タイトル  
名前  
URL
コメント