こんなことを言わなければならない、貴方も情けなくないですか?毎回炎上するブログとそうでないブログがある。この差は何か、あなたは分かりますよね?もしあなたに@ITの担当者としての責任感があるならば、いい加減、生島氏に直接指導してはどうですか?あなたは胸をはって、自分の仕事をしていると言えますか?自分の胸に聞いてみてください。我々は、あなた方の行動をちゃんと見てますよ。01:29>いい加減、生島氏に直接指導してはどうですか?これ、具体的にどういう行動に出ることを示唆してるのかねえ。「攻撃的な言葉遣いはお控えくださるようお願いしております。」って、すでに直接指導してるんだと思うんだけどさ。それ以上の指導は干渉しすぎでしょ。浦和サポーターの国籍侮辱ヤジみたいなのがあったらカウントして、定期的にワーストコラムニストとしてランキングしたらどうかね。みながわさんのコラムのように、百害あって一利なしのコラムを排除する仕組みを考えた方がいいかもよ。01:41はじめまして>ALL技術的には皆様の足元にも及びませんが、ここまでROMして想ったことを。ユーザー側の視点ですが。臨死体験をしてから失業中のおぢさんです。できる異を目的としたスキルアップの為に@IT等を時々読んでいます。以下に述べることのは、私の今までの経験:旧職場(小売業)+α(製造業の現場などなど)範囲での事です。狭いかもしれませんが、過去にPC講師もしていましたので100人ぐらいの中小企業経営の方々と色々話したり、何件かの導入検討の際にお手伝いした経験を元にしています。私が語れるのは効率についてだけかもですが、客としては一番重要視して欲しい項目です。IT投資の目的って業務効率の向上でしたので。過去に実際にあった案件で、最初の打ち合わせで出した要求の一部です。レスポンスは早ければ早いほど。予算内の範囲で最大でお願いいたします。在庫管理や受発注は特に。使用する者は端末前にいる時間を極力短くしたいのです。LANのトラフィックは可能な限り少なくしてください。最悪INS64回線で繋がります。(バックアップ緊急回線)#以上の条件を、俺は出来るぜ臭を漂わせた営業さんは契約の段階で無視しよとしてました。#契約書に64kbpsでレスポンス200ms以内じゃなきゃ半額って入れるのを頑なに拒否されました。#3万点の商品から任意の件数の現在庫数量出すのに500msかかるシステムのリプレースだったのに。余談:で、色々なコメント見てると、遭遇したくない方がちらほらと。本文に書かれている前提条件(釣針付き要読解力)をハナから無視して絡んでくる方なんか特に。一応、生島氏のコラムは最初からコメントを含めてすべて1度は目を通しています。同じような内容の繰り返しを今回が3回目?かな。2009年12月まで読破。コメントは飛ばし読みですが。あぁ頭がクラクラする。09:31生島さん、お久しぶりです。本題とは関係ないですが、こちらをちょっと借ります。#余所で不完全燃焼しましたもので・・・Voyagerさん、はじめまして、ryoと申します。面白いお題をありがとうございます。私ですが、零細ユーザ企業に勤めながら、SE(というかなんでも屋)として開発の仕事も行っている、アラフォーの男です。>レスポンスは早ければ早いほど。予算内の範囲で最大でお願いいたします。>在庫管理や受発注は特に。使用する者は端末前にいる時間を極力短くしたいのです。>LANのトラフィックは可能な限り少なくしてください。最悪INS64回線で繋がります。(バックアップ緊急回線)INS64回線ならデータ転送がタイトになりますね。#以上の条件を、俺は出来るぜ臭を漂わせた営業さんは契約の段階で無視しよとしてました。#契約書に64kbpsでレスポンス200ms以内じゃなきゃ半額って入れるのを頑なに拒否されました。#3万点の商品から任意の件数の現在庫数量出すのに500msかかるシステムのリプレースだったのに。あれば、200msでやり取りできるデータは、単純計算で、往復1.6KBになります。検索時間が100msであれば、やり取りできるデータは、0.8KBになります。最近のSQLは、ちょっと大きいもので、あっという間に1KBになりますので、行きだけでアウトになりますね。行きの部分は極力小さくする必要がありますね。おお、ストアドを使うと行きの部分は多少効率化がはかれます。帰り(結果の取得)はどうでしょうか?やはり0.8KBは小さいですね。後でちょっとデータを足すとなっても、たった100バイトの追加で、単純計算で、約12mかかります。目標に対して12%実行時間が増えることになります。これは無視できないですね。通常回線の帯域が不明ですが、私としては、バックアップ回線の制約で設計に影響を与えるのはこの場合ちょっと面倒だと思います。スピードアップという提案を希望しますし、そういう提案を行いますが、如何でしょうか?その方が結果としてリーズナブルになると思います。15:10まさかレスがあるとは(^^;ryoさんどうもです。お名前は覚えていますが、やりとりの内容までは覚えてないです。#昨年後半のあまりに強烈な方の印象が強すぎて。#大昔?に某BBSで暴れまくっていた方と同じHN・・・蘇る悪夢?(w8年以上前の事を記憶の奥底を探って書いたので、条件が一部抜けまま投稿したので、そのような詳しい考察が帰ってくるとは思いませんでした。これだけで見積もるのは無理かと思いました。読み返すと肝心なところが抜けてるし。結局は200msレスポンスは実現されませんでした(^^;お騒がせしました。1回あたりのデータ量はたいした事は無かったですよ。送信:約20Byte、返信:240Byteぐらいだったと記憶しています。最大10件だったと記憶しています。最初の打ち合わせで・アイテム数が15,000から30,000まで増えるけど、レスポンス落とさないでね。・データベースは現システムのOracleをそのまま使ってね。社長:「それは凄い」ってなったので既定事実になりました。横で聞いてて「大丈夫か?」って思いましたけどね。#どうも元のシステムを作った会社をバカにして、うちなら倍!って失言?したらしいと後日聞きましたが。結局、元のシステムを作った会社にお願いして、2割ほど体感速度があがったようです。#測定したけど残してないようです。いままで20人ほどの業者さんとやりとりしましたが、3~4人:普通に話せた。15~6人:専門用語で煙に巻こうとする印象を受けた。17:23Voyagerさん、ryoさん、こんにちは。送信:約20Byte、返信:240Byteぐらいだったと記憶しています。最大10件だったと記憶しています。いう条件であれば、つまりC/Sなんですよね。ストアドプロシージャ前提ですね。8年前のリプレース案件なら元はVBでしょう。VBでグルグル回しているプログラムが相手なら、最低でも20倍ぐらいは出せるし、さらに64Kbpsであれば100倍ぐらいは軽いけれど、そもそも、64Kbpsが前提になれば、最初からストアドプロシージャを使っているでしょう。64Kbpsで8年前の時点でリプレースするということは、更に10年以上前の中小企業のハードってことで、そのレベルだと、最初から目一杯やってた可能性もなきにしもあらず。そりゃ、相手を確認しないで無条件に倍にできるっていたらダメですね。ストアドプロシージャ(SQL)でやっているモノを、SQLでやったら速くなるって前提からズレていますから。当時もグルグルやってるのが多かったから、確認しないで、つい言っちゃったのでしょうが(苦笑)。400MHzぐらいかな。回線が64Kbpsで500msecで遅いと言われたら、今の技術者はほぼ全滅ですな。いうギチギチの所でやってきた人達は理論値にかなり近い。工数も滅茶苦茶少なくできます。ryoさん、どうもです。メールで残っていますから検索したらすぐに出てきます。生島の「カス」「クズ」を消さない理由を説明してもらおう。17:58中小企業の受発注画面で表示される在庫数を出す。200msec(結果、500msec)ハードや回線が格段に上がっても500msecどころか、5000msecなんてザラにあるし、工数も滅茶苦茶掛かっている。WEB系のHTMLの転送部分は除くとしても、それでも遅すぎ。できる人は当時も少なくって、できる人は残念ながら教育担当に廻るのではなく、徹底的な火消し役に廻って、信じられない量の仕事が集中してえらいことになってしまった。技術の継承ができず、業界として技術者のスキルアップのスピードよりも、ムーアの法則の方が早かったから、もういいや、ハードでなんとかしよう。なってO/Rマッパーなんかが生まれたりした。結果的にできない人が大多数になって、そんな人を見たことがないから「SQLでxx倍、そんなわけない!」ってなるんでしょうけどね。19:23生島さんどうもです。当時はストアドって言われてもチンプンカンプンでした。在庫管理しながらおじちゃん・おばちゃんたちのヘルプデスクしてましたので(W#導入後にお家騒動?ではじき出されたのであまり触っていないですけど。#CIO補佐はその後に勤めたほぼ同規模の異業種小売業での肩書きです。#当時は、総務部リーダーって名刺に書いてあったような。メモには残ってました。オフコンからのリプレースでやらかした業者がありまして。経緯は、12年使ったオフコンのリプレース検討時にやらかした業者の「これからはクラサバ」の言葉に乗って、旧システム導入・・・半年たってもまともに動かず怒った社長、元システムの会社に声をかける・・・三カ月後本格稼働2年とちょっと後、限定的プチバブルで店舗拡大、元システム会社に無理してもらったから、システム拡張(ハードはそのまま)を依頼。相見積りの為に声かけたら。採用には至らず、その後お付き合いは途絶えてしまいました。渋チンの会社だったので、大変だったです。採用されたのは、COBOLバリバリでオフコンからのお付き合いの業者。Oracle+Access2000+リモートアクセスで端末30台。(Wストアドがいいって言ったら、「お前いくらもらった!」って(Wどう考えてもパフォーマンスが・・・高くてもパフォーマンスが2桁以上・・・#その後、アプリをコピーせずにちゃんとライセンス買ってって申請を出しつづけ#このクソ遅いシステムをどうにかしろといわれ続け・・・#ストレスたまって心臓止まりました(W#ネットショップでWEB構築に使っているAdobe製品がすべて割れ物ってどうよ#遅いのはあんたのせいでしょうが。19:55Voyagerさんご返信ありがとうございます。ryoというHNは、1年程前から使っているだけですので、大暴れした人とは多分違うと思います。ここ数年ですが、プログラミングだけでなく、ユーザさんへの説得とかやってますとある種の緊張感を持って話をしなければならないのですが、そのせいか、ふっとしたときに理屈をこねたくなることがあり、こういう所で練習がてら理屈をこねています。私にとってですが、実際にあった話ってそれだけで説得力を感じるので情報が欠落していても話が大きくずれることは無いかと思います。事実、Voyagerさんの返信には違和感を感じません。#このように書くと一部の人から反感を買うかもしれませんが、まぁ一個人の感想と受け取って下さいね。件のSEさんですが、>#どうも元のシステムを作った会社をバカにして、うちなら倍!って失言?したらしいと後日聞きましたが。そのSEさんの気持ちを代弁すると、倍というのは意気込みをいったところでしょうか?会話の行間を補足させて頂きますと、SE:「倍以上のレスポンスに出来ます」(少なくともSQLの実行部分は、倍になるようチューニングしてみます)。(うわぁ、具体的ってどうしよう。社長:「それは凄い」というわけで、倍以上というのと200msの間には何のつながりもありませんでした。何れにしても良く聞く話です。>いままで20人ほどの業者さんとやりとりしましたが、>3~4人:普通に話せた。>15~6人:専門用語で煙に巻こうとする印象を受けた。>1人:話が明後日の方向に行って、過去案件の自慢話&理想論で独演会(wこのての話ですが、私の経験(この場合開発者としての経験の方が強いですね)を言わせて頂きますと、20%:出来る人80%:出来ない人ですかね。出来ない人って言い訳する為に煙に巻こうとするのでしょう。私自体が煙にまかれることはあまりないのですが、正直に告白しますと煙に巻いたことはあります。『こんなんでお金をもらってよいの?』とか思ったことがありました。20:04生島さんご返信ありがとうございます。お互いに過激な発言が大好きなので、こういう制限下で会話するのは私にとってもしんどいのですが、せっかく返信頂けたのでコメントします。「SQLでX倍」の話ですが、余所でも言ったのですが、一般論として他の言語からSQLに置き換えたからと言って速度がX倍(実行時間が1/X)になるという話は聞いたことがありません。Bean(まぁORマッパーですかね)で、ロクに最適化しないで実行時間がX倍になったということはありました。これは作りが悪かったですね。Railsを使うと感覚的に実行時間が数十倍あるという認識はあります。他の方も言われていましたとおり、一般論としてSQLに置き換えるとパフォーマンスが上がるのならやはりその根拠を示して頂かないと私も納得しません。いう風に言いますと、『一般論としてSQLに置き換えてもパフォーマンスが上がらない根拠を示せ』と言われそうなのですが、以下、私の考えを書きます。SQLにせよ他の言語にせよ最終的には機械語で実行されます。実行(機械語)となるでしょう。この観点から言いますと、C言語もSQLも同様に実行されます。想像ですが、大きくは外していないでしょう。仮想マシンというと要するにJavaやC#と同様になりますが、まぁ私にとってはSQLの実行パフォーマンスは、その位の言語(JavaやC#)と同程度という認識です。『SQLはオプティマイザーがあるので有効に使えばX倍になるでしょう』となるかもしれませんが、それはもう個別のDBMSの話になりますし、オプティマイザーを有効に使うという点で既に『単にSQLでX倍』って話になりませんよね?また、今現在のところ自動でSQLをチューニングしてくれるDBMSを私は知りません。元が500msでそれを倍以上の200msにすると言う話でしたが、それは無理だったいうことです(正確には試していないとのことですが)。生島さんは、>ハードや回線が格段に上がっても500msecどころか、5000msecなんてザラにあるし、工数も滅茶苦茶掛かっている。WEB系のHTMLの転送部分は除くとしても、それでも遅すぎ。ハードルを下げる方向に話を持って行っていますが、5000msecでしかプログラムを書けないエンジニアは、Javaで書こうがSQLで書こうがどんな言語を使っても5000msec以上のシステムは作れないと思いますが如何でしょうか?先ほど私は、Voyagerさんへの返信で、20%:出来る人80%:出来ない人と書きました。この業界ですが、確かに出来ない人が多いです。その中にはSQLすら出来ない人もいるでしょう。申し訳ないのですが、私の周りですが、80%の中の人たちもSQLが出来る人は多く、そういう人が書いたSQLも5000msecなんてざらにあります。ServerとOracleの一番大きな違い』のようなコラムを書くと好評のようなので、あまり炎上を狙ったコラムは控えた方がよろしいかと思いますよ。23:24>で、他の方も言われていましたとおり、一般論としてSQLに置き換えると>パフォーマンスが上がるのならやはりその根拠を示して頂かないと私も納得しません。それらしい数値をどうでっちあげようか、必死になっているところだと思うからさ。06:19ryoさん、おはようございます。炎上を狙っているのではありません。対立する意見が多いことを承知で、衝突を恐れずに書いているだけです。SQLでやるというのは複雑なSQLを使うという意味で書いています。RDBMSを使う以上、他の言語でというのは、単純なSQLで処理することを指しています。複雑なSQLであっても、単純なSQLであっても、理論値の話をするならば、SQLのチューニングを行うのは当たり前の話です。複雑なSQLでは、自動生成されたアルゴリズムが一致するまでSQLをチューニングするので、他の言語で書かれたものと最低限一致します。コーディング量はアルゴリズムが要らない分減りますし、余計な処理が減る分、(ネットワークを挟んでループなんてあり得ない)パフォーマンスも上がります。RDBMSを使ってSQLを使わないのは、タイヤの再開発になりますから、工数が掛かるし、同じ筐体にあってもプロセス間通信という無駄な処理が繰り返されますからパフォーマンスが落ちるのです。最低限と書きましたが、例えば、SQLは結合のやり方が何種類もあって、データの分散を見てオプティマイザが自動で結合のやり方を変えます。他の言語で書いたときは、ネスティッドループか、ソートマージジョインぐらいしか再現できませんが、SQLではハッシュキーを生成して結合に使うと速くなるなら、ハッシュジョインもできます。b.KEYたったこれだけで、ハッシュキーを作って結合するか、インデックスを使って結合するか、a.KEY、b.KEYでソートしてから結合を行うか、その他の方法で結合を行うか、データの分散具合、ヒット率の予想から、DBエンジンは適切な方法で結合し実行します。他の言語でデータの分散が変わったときのために、何種類もアルゴリズム書いて、条件によって、使うアルゴリズムを変えるなんて事実上できないでしょう。理論上は、RDBMSを使ってSQLより速く処理する方法はあり得ない。コーディング量もひっくり返ることはあり得ない訳です。理論値でって、言ってきているのは、下手糞にやったらいくらでも遅く、工数を掛けてコーディングすることは可能ですから、できない人の理屈を持ち出しては議論にならない。チューニングの手間が抜けているって思うかも知れませんが、頭の中では、先にアルゴリズムを作って、そのアルゴリズム通り処理させるSQLを考える。それが会話のスピードでできるようになります。最後に確認するだけですよ。この辺も読んでみてください。09:12生島さん?はじめから具体的にこう書けば、炎上もしないし、誰も文句言わないと思うのに。06:19に書かれたコメントの状況下であれば、そりゃOO言語こねくりまわしてなんとかするより、SQLで処理したほうが効率的なことは誰もが認めるはず。そもそも一般論としてSQLとOO言語を比較するというのがおかしい。生島さんの主張を裏返してみると「RDBMSを使わないシステムでもOO言語は使われますが、RDBMSを使わないシステムではSQLなんて使わないから、OO言語に比べてSQLなんてダメ」ということになります。これだって変でしょう?最初のフォーマットに戻って整理してみます。1.業務系では効率がトレードオフできない必要条件これはごもっとも。RDBMSのアクセス効率だけが最優先ではない。業務効率」ではなく、必要条件は「業務効率」の向上であって「RDBMSのアクセス効率」ではないことに注意されたい。貴殿の主張は「RDBMSのアクセス効率」に限って言えば全面的に正しい。「業務効率」の向上はそれだけでは言えないことにご注意を。2.SQLはオブジェクト指向言語の数十倍の効率ここで一般論とか言っちゃうから議論がおかしくなっている。先の条件下では正しい。システムはそれだけじゃないからね。全体最適化を考慮して議論すべきです。3.SQLとオブジェクト指向言語は分業すべきそりゃそうでしょう。