36
CakePHPPostgreSQLを使う ×1株式会社 新原 雅司

CakePHPでPostgreSQLを使う · CakePHPでPostgreSQLを使う 1×1株式会社 新原 雅司

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: CakePHPでPostgreSQLを使う · CakePHPでPostgreSQLを使う 1×1株式会社 新原 雅司

CakePHPでPostgreSQLを使う1×1株式会社新原 雅司

Page 2: CakePHPでPostgreSQLを使う · CakePHPでPostgreSQLを使う 1×1株式会社 新原 雅司

First Mac

Page 3: CakePHPでPostgreSQLを使う · CakePHPでPostgreSQLを使う 1×1株式会社 新原 雅司

新原 雅司 (Masashi Shinbara)

1×1株式会社大阪在住

/shin1x1

Shin x bloghttp://www.1x1.jp/blog/

Page 4: CakePHPでPostgreSQLを使う · CakePHPでPostgreSQLを使う 1×1株式会社 新原 雅司

PostgreSQLとの出会い

• Oracle / Access(mdb)

• 2000年頃に出会う(PostgreSQL7.0)

• Oracle似の機能

• DBに起因する障害は皆無

Page 5: CakePHPでPostgreSQLを使う · CakePHPでPostgreSQLを使う 1×1株式会社 新原 雅司

Agenda

• CakePHPとは?

• 事例紹介

• pgpool-II + Slony-1での冗長構成

Page 6: CakePHPでPostgreSQLを使う · CakePHPでPostgreSQLを使う 1×1株式会社 新原 雅司

CakePHPとは?

Page 7: CakePHPでPostgreSQLを使う · CakePHPでPostgreSQLを使う 1×1株式会社 新原 雅司

OracleSQLServer

EASY

TEST CUSTOM

POPULAR

Page 8: CakePHPでPostgreSQLを使う · CakePHPでPostgreSQLを使う 1×1株式会社 新原 雅司

日本で人気

Page 9: CakePHPでPostgreSQLを使う · CakePHPでPostgreSQLを使う 1×1株式会社 新原 雅司

ちなみに

Page 10: CakePHPでPostgreSQLを使う · CakePHPでPostgreSQLを使う 1×1株式会社 新原 雅司

書籍

Page 11: CakePHPでPostgreSQLを使う · CakePHPでPostgreSQLを使う 1×1株式会社 新原 雅司

2007

コミュニティ

20082009

Page 12: CakePHPでPostgreSQLを使う · CakePHPでPostgreSQLを使う 1×1株式会社 新原 雅司

ケイク?

ケーキ?

Page 13: CakePHPでPostgreSQLを使う · CakePHPでPostgreSQLを使う 1×1株式会社 新原 雅司

Cake

2008 2009

Page 14: CakePHPでPostgreSQLを使う · CakePHPでPostgreSQLを使う 1×1株式会社 新原 雅司

事例紹介

Page 15: CakePHPでPostgreSQLを使う · CakePHPでPostgreSQLを使う 1×1株式会社 新原 雅司

事例1:学校向け簡易SNSシステム

Page 16: CakePHPでPostgreSQLを使う · CakePHPでPostgreSQLを使う 1×1株式会社 新原 雅司

事例2: チケット販売システム

Page 17: CakePHPでPostgreSQLを使う · CakePHPでPostgreSQLを使う 1×1株式会社 新原 雅司

事例3:携帯アンケートシステム

Page 18: CakePHPでPostgreSQLを使う · CakePHPでPostgreSQLを使う 1×1株式会社 新原 雅司

事例4:写真販売システム

写真登録

Page 19: CakePHPでPostgreSQLを使う · CakePHPでPostgreSQLを使う 1×1株式会社 新原 雅司

事例5:来場管理システム

バーコード読取

Page 20: CakePHPでPostgreSQLを使う · CakePHPでPostgreSQLを使う 1×1株式会社 新原 雅司

pgpool-II + Slony-1

Page 21: CakePHPでPostgreSQLを使う · CakePHPでPostgreSQLを使う 1×1株式会社 新原 雅司

可用性と性能向上が目的

Page 22: CakePHPでPostgreSQLを使う · CakePHPでPostgreSQLを使う 1×1株式会社 新原 雅司

全体構成

Page 23: CakePHPでPostgreSQLを使う · CakePHPでPostgreSQLを使う 1×1株式会社 新原 雅司

pgpool-II

• CakePHPとPostgreSQLを仲介

• 「マスタ、スレイブモード」を利用

• Web/APサーバにインストール

Page 24: CakePHPでPostgreSQLを使う · CakePHPでPostgreSQLを使う 1×1株式会社 新原 雅司

Slony-I

• 非同期レプリケーション

• シングルマスタ、マルチスレイブ

• slonik生成スクリプト

Page 25: CakePHPでPostgreSQLを使う · CakePHPでPostgreSQLを使う 1×1株式会社 新原 雅司

CakePHPの変更点

• DB接続先を pgpool-II に変更

• 参照クエリの振り分け

Page 26: CakePHPでPostgreSQLを使う · CakePHPでPostgreSQLを使う 1×1株式会社 新原 雅司

DB接続変更<?phpclass DATABASE_CONFIG { var $default = array( 'connect' => 'pg_connect', 'driver' => 'postgres', 'persistent' => false, 'host' => 'localhost', 'port' => '9999', 'login' => '1x1', 'password' => '', 'database' => 'hoge', );

Page 27: CakePHPでPostgreSQLを使う · CakePHPでPostgreSQLを使う 1×1株式会社 新原 雅司

pgpool-IIのクエリ振り分け• マスタへ• 更新系クエリ

• トランザクションブロック内の参照クエリ

• SQLコメントからはじまる参照クエリ

• スレイブへ• トランザクションブロック外の参照クエリ

Page 28: CakePHPでPostgreSQLを使う · CakePHPでPostgreSQLを使う 1×1株式会社 新原 雅司

pgpool-IIのクエリ振り分け

UPDATE users SET name='abc';

BEGIN;SELECT COUNT(*) FROM users;INSERT INTO users(name) VALUES('abc');COMMIT;

/**/ SELECT * FROM users;

SELECT * FROM users;スレイブへ

Page 29: CakePHPでPostgreSQLを使う · CakePHPでPostgreSQLを使う 1×1株式会社 新原 雅司

Slony-Iは非同期

マスタ更新直後にスレイブを読むと更新が反映されていない可能性がある

Page 30: CakePHPでPostgreSQLを使う · CakePHPでPostgreSQLを使う 1×1株式会社 新原 雅司

更新

Page 31: CakePHPでPostgreSQLを使う · CakePHPでPostgreSQLを使う 1×1株式会社 新原 雅司

参照

Page 32: CakePHPでPostgreSQLを使う · CakePHPでPostgreSQLを使う 1×1株式会社 新原 雅司

参照クエリをマスタへ

• トランザクションブロック内そのままマスタへ

• 参照クエリにSQLコメントを付ける

CakePHPで対応/**/ SELECT * FROM users;

Page 33: CakePHPでPostgreSQLを使う · CakePHPでPostgreSQLを使う 1×1株式会社 新原 雅司

CakePHPで振り分け

class DboPostgresReplication extends DboPostgres { public function execute($sql) { if (!AppModel::$toSlave) { if (preg_match('/^SELECT/i', $sql)) { $sql = '/**/'.$sql; } } return parent::execute($sql); }}

[app/models/datasources/dbo/dbo_postgres_replication.php]

Page 34: CakePHPでPostgreSQLを使う · CakePHPでPostgreSQLを使う 1×1株式会社 新原 雅司

まとめ

Page 35: CakePHPでPostgreSQLを使う · CakePHPでPostgreSQLを使う 1×1株式会社 新原 雅司

まとめ

• CakePHPは人気のPHPフレームワーク

• CakePHPとPostgreSQLはとっても良い関係

• pgpool-II + Slony-Iでの冗長化構成は非同期レプリケーションに注意!

Page 36: CakePHPでPostgreSQLを使う · CakePHPでPostgreSQLを使う 1×1株式会社 新原 雅司

Q?

/shin1x1