Drupal/Postgresqlの構成は初期状態では決して高速な組み合わせではない。
MySQLではクエリー結果をキャッシュする機構があるようだが、Postgresqlにはそのような機能はない模様。
またDrupalのPHPもmoduleによっては重たい処理も多々あり、高速化が重要となる。
PHPの処理を高速化するにはキャッシュの機構を導入するのが一般的なようで、Drupalの組み合わせで問題なく動く実績があるのがAPC(Alternative PHP Cache)(http://pecl.php.net/package/APC)である。またAPCにはDBクエリの結果もキャッシュする機能があるとのこと。
詳細な導入事例はここ(http://www.doyouphp.jp/tips/tips_apc.shtml)などが大変参考になる。
まずはCentOS、PHP-5.2.6環境での導入メモを記載しておく。
必要なパッケージ(yumで導入)
夫です。
先日に引き続きDrupalのモジュールネタです。
potgresqlを使ったDrupalでうまく動かないモジュールとしてbrowscap(http://drupal.org/project/browscap)モジュールがあります。
Browscapモジュールは、サイトを見てくれた人が、どんなブラウザを使っていたのか、統計情報を取得し、上位のモジュールと組み合わせると、ブラウザ、ユーザ環境に特化したHTMLを生成することができるとのことです。
Browscapモジュールは、Browser Capabilities Project(http://browsers.garykeith.com/downloads.asp)から、最新のブラウザ情報一覧を取り込み、基本データベースを生成するのですが、このデータベース生成にMySQL出しか使えない、"REPLACE INTO" 構文が使用されています。
このSQL構文を、普遍的なSQLである、SELECT文の結果を見て、INSERTもしくはUPDATEを行う処理に変更しないと、postgresqlではうまく動いてくれません。
Drupalは優れたCMSであり、DBとしてMySQLとPostgresqlの両者で動作できるようになっている。
しかし歴史的な経緯により、MySQLでの動作のほうが問題が少ない。
というのはDrupalでサイトを構築する場合、数多くのモジュールを使用して、機能追加を行っていくが、それでモジュールもDBへのアクセスを行う。
モジュールによっては、ロジックの中でMySQLでしか動作しないSQL処理を行っているものが多数あります。
残念ながら当初はそういった点を見切れず、このサイトではDrupal+Postgresqlを選択して稼動しています。
そのため、いくつかのモジュールで問題が出ることも多数。一度サイトが稼動すると、
なかなかデータベースの移行もままならず、当面はむしろ動かしたいモジュールをPostgresqlへ対応させていくこととします。