ECサイト運営開発記

PHPフレームワーク Laravelの使い方を中心とした通販サイトの開発日記

ECサイトでPHP×MongoDBを使ってみた

ここ最近よく見かける言葉で「ドキュメント指向型データベース」なんてのがありますが、正直、従来のRDBMSとどう違うのかさっぱりわからない。
で、このドキュメント指向型データベースの代表格がCouchDBとMongoDBなんですが、自分なりに調べてみた結果、MongoDBの方が環境をそろえる敷居は
低そうなので、深いことは考えず、MongoDBをちょっと使ってみることにした。

  • MongoDBを使ったプログラム
    • 携帯電話向けのクレジットカード決済用セッションの保存
      • ぶっちゃけ、RDBMSでもいいし、普通はそうすると思う。
      • 携帯電話はクッキーが使えないので、決済サービスに接続する際に、セッションの内容をどこかに保存しなければならない。
        • 「仮注文ID」「セッションID」「セッション名」「セッションの値」をMongoDBに保存
          • 決済が完了したら注文完了画面へリダイレクトされる仕様なので、決済サービスからのリターンコードなど取得し、MongoDBからセッションの値を読み込んで、注文成立させる。
<?php

// 接続
$mongo=new Mongo();
$db = $mongo->selectDB($dbName);

/**
 *データ取得
 **/
// DBでいうデーブルを指定
$col=$db->selectCollection("session");	

// 全件取得
$cursor=$col->find();
//var_dump($cursor);

// 条件付き取得 SQLでいうWhereっぽいもの
$cursor=$col->find(array("session_id"=>"hogehogehoge"));
//var_dump($cursor);

// 一件だけ取得したい場合
$cursor=$col->findOne(array("unique_id"=>"hoge1"));
//var_dump($cursor);

// ページネートしたい場合(自信ありません)
// 取得した結果に対して
$cursor->skip(10);  // Skipで11件目から表示し
$cursor->limit(10); // そこから10件まで取得可能にする

// データの追加
// $dataは基本連想配列でkey=>valueな値で。
$col->insert($data);

// 更新(自信ありません)
// 追加と同様に$dataは基本連想配列でkey=>valueな値で
// とりあえずは、array_merge($data,$newData)で古いデータと新しいデータを置き換えるようにしてる。
$data=$col->findOne(array("unique_id"=>"hoge1"));
$data=array_merge($data,$newData);
$col->save($data);

// 削除(全てを焼き払いたい人向け)
$col->remove();

// 条件付き削除
$col->remove(array("unique_id"=>"hoge1"));

?>
  • 使ってみた感想
    • RDBMSようなテーブルの結合みたいなことはできないっぽい。
      • なので、今のところはなんでも入る箱と考えるようにしている。
    • フィールドの型やフィールド数を一切、意識しなくていいので楽。
      • あるデータだけフィールドが一つ増えても、全く怒られない。
        • 故に拡張しやすいし、改修もしやすいと思う。
    • 今後もなんとな〜く使っていきたいので、勉強が必要。

MongoDBについてちょっとだけ解説

みてわかるクラウドマガジンvol.1 (日経BPパソコンベストムック)

日経BP出版センター
売り上げランキング: 14126
おすすめ度の平均: 4.5
5 サービスの比較
5 とっかかりによい
5 技術用語としてのクラウド解説本
4 技術者向けの良書
3 基礎的な知識を得るにはいいかも