2011年5月22日日曜日

フラット化する世界 上

ITバブルで敷設されたインド・アメリカ間の光ファイバーにより、インドへのアウトソーシングが助長されたって話がおもしろかった。





2011年4月20日水曜日

Oracleヒント句超基本編

とりあえずこのぐらい気にしていればDBAに怒られないんじゃね?ってレベル


/**---- 最適化目標 ----**/
-- 全体最適
SELECT /*+ ALL_ROWS */ FROM DUAL;
-- 最初のn行に対して最適化
SELECT /*+ FIRST_ROWS (1) */ FROM DUAL;

/**---- アクセスパス ----**/
-- テーブル全体を走査
SELECT /*+ FULL(A) */ FROM DUAL A;

-- インデックスを利用して走査(PK_Aの部分はインデックス名)
/*********************************************************************
インデックスを利用すべきかどうかの判断基準としては
絞り込み率が全体の1%未満・・・インデックスを利用すべき
絞り込み率が全体の5%未満・・・場合によるので別途検討が必要
絞り込み率が全体の5%以上・・・インデックスを利用すべきでない
また、インデックス利用時はWHERE句の条件にて
インデックスの項目をインデックスの定義順に追加すること。
**********************************************************************/
SELECT /*+ INDEX(A PK_A) */ FROM DUAL A
WHERE A.DUMMY = 'PK_VALUE';

/**---- 結合順序 ----**/
/*********************************************************************
テーブル結合順序は、結合結果の行数ができるだけ少なくなる順にする。
**********************************************************************/
SELECT /*+ LEADING (A B) */ FROM DUAL A, DUAL B
WHERE A.DUMMY = B.DUMMY;

/**---- 結合操作 ----**/
-- NestedLoop結合
/*********************************************************************
駆動表×結合対象をループ処理で結合していく結合方式
結合対象が、パーティションやインデックスで絞り込める場合に有効
結合結果が順次取得できるので、Webアプリの画面に向く。
**********************************************************************/
SELECT /*+ USE_NL (A B) */ FROM DUAL A, DUAL B
WHERE A.DUMMY = B.DUMMY;

-- HashJoin結合
/*********************************************************************
駆動表のハッシュテーブルをメモリ上に作成し、
それに対して結合対象のテーブルを紐づけていく結合方式
結合対象が、大量データや表の大部分を占める場合に有効
ただし、あまりに大量すぎると、メモリを逼迫してしまいDB全体に影響を与えてしまう。
結合が全て完了しないと結果が取得できないため、Webアプリの表示等には向かない。
**********************************************************************/
SELECT /*+ USE_HASH (A B) */ FROM DUAL A, DUAL B
WHERE A.DUMMY = B.DUMMY;


gistにもあげてみた

2011年4月16日土曜日

よくわかっていないターゲットアクションパラダイム

さっぱりわからん。

登場人物
- 部品(Cell?Outlet?)ボタンとかを想定。
- イベントが起こった場合に動くロジックが書かれたオブジェクト
- コントローラ。いろいろ制御する人
部品くん
- ロジックが書かれたセレクタ(SEL型)とそのセレクタを持つ型(id型)を持つ。
https://github.com/544/HelloWorldCUI/blob/master/HelloWorldCUI/HelloCell.h
- イベントが起こった場合、自分が持っているid型のSEL型セレクタを呼び出す。
部品君はid型やらSEL型やらの中身がなんなのかはしらない。

コントローラ君が部品とロジックを紐づける。
https://github.com/544/HelloWorldCUI/blob/master/HelloWorldCUI/HelloController.m
なにかイベントが起こったら、部品君のセレクタを呼び出す。
すると、部品君が持ってるid型のオブジェクトのセレクタが呼ばれる。

やっぱりよくわからない・・・・。