パスワードを忘れた? アカウント作成
671098 journal

Oliverの日記: K.O. 9

日記 by Oliver

明朝、データベース実習の最終プロジェクト(簡易な在庫/仕入れ/注文管理システムの設計と実装)の検収なのだが、今の気分を一言であらわすと、

もうだめぽ。

だ。単位がもらえそうなくらいにはパッチワークしたが、GUI担当のコードをチェックしていて、マジで頭痛がしてきたので早退した。いくら提出以後はバージョンアップもしなければ、バグ潰しもしない、といっても、いくばかは構造があってもいいじゃないか。あなた、GUI担当のクラスでコンストラクタしかないって、なんですか。(数百行におよぶこともあるコールバック等はコールバックを設定する場でインライン定義) Javaって気を使わない場合はデフォルトで読めないコードが出てくるんだから、気をつかぇぇぇぇ。

この実習の教訓:

  • 可能な限り、オラクルは使わない。履歴書にも決してオラクル経験あり、とは書かない。
    挙動が素直じゃないスギ、ちったぁPostgreSQLを見習って欲しい。
  • Trust was good, Control would have been better.
    数回の小さなものをみて、コードが信用できそうと思っても信用するな。誰もが人にみられる/人にメンテされることを前提にコードを書けるわけではない。オープンソースソフトウェアのコード品質って実はかなり高い。

心底疲れたので、検収が終ったら週末はノートも持たずに旅に出ることにした。週明けまでは探さないでください。

追記(月曜深夜):ただいま。すっきり。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by cooper (4658) on 2003年07月11日 16時40分 (#356824) 日記
    どのへんが「素直じゃない」と感じたのか興味があります。DDL なのか、DML なのか、はたまたそれ以外の何かなのか...

    Oracle が非難されても別になんとも思いません。ただ、そうやってひっかかるところってのは、何か直感的じゃない、設計やインタフェースのマズさがあるように思えるし、Oracle ならではのバッドノウハウかもしれないので、知りたいなぁと。

    もし、旅から戻ってきてもまだ「くそぅ!」なんて思うところがあったら是非。

    # 僕なら履歴書には「Oracle 経験者」と書きます :-)
    --

    -- cooper

    • by wosamu (4952) on 2003年07月12日 1時37分 (#357169) 日記
      挙動が素直じゃないと感じるのは見た目上の速度を重視して遅延書き込みを行っていたり、通常エラーを返すような処理でもエラーを返さなかったりする場合があるからかな。

      あとオプティマイザの挙動はなぞかも。
      親コメント
      • Re:挙動 (スコア:2, 参考になる)

        by cooper (4658) on 2003年07月12日 17時46分 (#357435) 日記
        遅延書き込みは Oracle がやらずとも、ファイルシステムやアレイコントローラで実装されてることもあるので、概念としては「素直」だと思います。パフォーマンスを追及すれば必ず出てくることですしね。もちろん、一般の人から見たら「ええっ?」っていうのはわかります。

        # PostgreSQL も遅延してたような...

        オプティマイザに関しては、遅いなぁと思う時は大抵 explain plan で事前に確認しているので、その段階で最適化手法はわかります。おかしなパスになっているのは、正規化ができてなかったり、インデックスの張り忘れっていうような基本的なチョンボが多いですね、僕の場合。

        気になったのが「通常エラーを返す~」の下り。これって、饌療?砲呂匹鵑塀萢?任靴腓Δ?
        --

        -- cooper

        親コメント
        • by cooper (4658) on 2003年07月12日 17時49分 (#357437) 日記
          あああ、ごめんなさい。最後の行はこうです。

          気になったのが「通常エラーを返す~」の下り。これって、具体的にはどんな処理なんでしょうか?
          --

          -- cooper

          親コメント
          • by wosamu (4952) on 2003年07月17日 15時53分 (#360831) 日記
            ええ、ああうーんと、いろいろあって一言ではいえないんですが、SQL*Loaderとかでロードするとき破棄レコードが存在するときにも「ロードに成功しましたが、挿入できなかった行があります。」とか出ませんでしたっけ?
            なんかそういうのが素直じゃないな、と。

            あと遅延書き込み云々はOSレベルのそういうのじゃなくて、Redoやらなんやらの仕組みでcommitした時点でデータファイルに反映されてないってのがリカバリの時にわかりにくいかな、と。
            まあ、これはPostgresとかも同じなのかもしれませんが。
            親コメント
    • by Oliver (4) on 2003年07月15日 15時53分 (#359424) ホームページ 日記
      どの辺が素直じゃないのか説明しづらいところが素直じゃない(ぉぃ)。いくつかあげてみると

      - PL/SQLでミスると"Success with compilation error"。どこがSuccessじゃい。
      - 絶対にこのセッション以外にユーザがいないテーブルを何十分もロックされていると言われてDROP TABLEできん。
      - 同一セッション内なのに変更がすぐに見えない。DELETEで全部消した直後にSELECT count(*)すると>0だなんて。sleep 15入れるとOK。いくら遅延書き込みでもREAD COMMITEDな別セッションならまだしも、同一セッションはダメだろう。
      - なんで DUAL ?

      というのが消し去られた忌まわしき記憶から発掘されてきました。

      データベース管理者は希望職種じゃないし、書かなくても採用されるようなスキルをもった人になりたいので、履歴書には書かないつもりです。
      親コメント
      • by cooper (4658) on 2003年07月15日 22時04分 (#359717) 日記
        - 同一セッション内なのに変更がすぐに見えない。DELETEで全部消した直後にSELECT count(*)すると>0だなんて。sleep 15入れるとOK。いくら遅延書き込みでもREAD COMMITEDな別セッションならまだしも、同一セッションはダメだろう。
        同一セッションで、ですか。ううむ、それは実に運が悪い。きっと間違った神託が下されたのです :-)

        なんとなく予想していたのは、デフォルトでトランザクションが有効になっているところかなぁと思っていたのですが、違ったみたいですね。dual は僕も最初「???」でしたが、特殊な値を SELECT のインタフェースで得るために都合がいいんだな、ぐらいに思ってます。ネーミングセンスは別にして。

        まあでも、すっきりしたようでなによりです。
        --

        -- cooper

        親コメント
      • by GetSet (9536) on 2003年07月17日 11時00分 (#360571) ホームページ 日記
        >> DELETEで全部消した直後にSELECT count(*)すると>0だなんて。sleep 15入れるとOK。

        思いっきり外していそうですが、nologgingを明示的に指定してやれば改善されたりしないかな、と。
        似たような遅延が頻発するOracle8iの環境で、結局、redoがボトルネックだったってことが何度かありましたので。機会があればお試しください。

        # drop tableでも引っかかっているというのなら、redoじゃなくてcontrolファイルへのi/oがネックのような気もしますが^^;
        親コメント
      • by wosamu (4952) on 2003年07月17日 16時05分 (#360838) 日記
        >- PL/SQLでミスると"Success with compilation error"。どこがSuccessじゃい。

        エラーなんやったらエラーコードだせっちゅーねん。

        >- 絶対にこのセッション以外にユーザがいないテーブルを何十分もロックされていると言われてDROP TABLEできん。

        絶対にってどうやって確認しました?
        案外切ったはずのセッションが残ってたりするのかも。
        もしくはロックだけ残ったかな・・・。

        - 同一セッション内なのに変更がすぐに見えない。DELETEで全部消した直後にSELECT count(*)すると>0だなんて。sleep 15入れるとOK。いくら遅延書き込みでもREAD COMMITEDな別セッションならまだしも、同一セッションはダメだろう。

        >- 同一セッション内なのに変更がすぐに見えない。DELETEで全部消した直後にSELECT count(*)すると>0だなんて。sleep 15入れるとOK。いくら遅延書き込みでもREAD COMMITEDな別セッションならまだしも、同一セッションはダメだろう。

        これは聞いたこと無いですね。
        遅延書き込み云々の問題じゃないし。
        なんでしょうね。

        >- なんで DUAL ?

        謎ですね。
        親コメント
typodupeerror

192.168.0.1は、私が使っている IPアドレスですので勝手に使わないでください --- ある通りすがり

読み込み中...