「OpenPNE3ノウハウ:画像などのアップロードされたデータだけ別のデータベースに保存する」の版間の差分
提供: OpenPNE3まとめwiki
(→手順) |
細 (50.22.104.219(トーク)による編集をKim.upsilonによる直前の版へ差し戻しました) |
||
行1: | 行1: | ||
OpenPNE3は日記などでアップロードされた画像などをすべてデータベースに保存するため、その量が多くなるとデータベースのバックアップに時間が掛かってしまいます。file・file_binテーブルを隔離できれば画像だけバックアップの頻度を少なくするといったことも可能になるので、できるかどうか試した記録をここに残しておきます。参考程度にどうぞ。 | OpenPNE3は日記などでアップロードされた画像などをすべてデータベースに保存するため、その量が多くなるとデータベースのバックアップに時間が掛かってしまいます。file・file_binテーブルを隔離できれば画像だけバックアップの頻度を少なくするといったことも可能になるので、できるかどうか試した記録をここに残しておきます。参考程度にどうぞ。 | ||
− | + | == 手順 == | |
+ | |||
+ | <div style="color: red"> | ||
+ | :※ この手順はOpenPNE3を'''最初からインストール'''することを前提としています。すでに使用しているデータを消さずに移行する方法は自分で調べて下さい。 | ||
+ | :※ 見ての通りとてもいい加減な方法なので、環境によっては失敗してデータが消えたり読み込めなくなったりするかもしれません。 | ||
+ | :※ データベースをマスター・スレーブに分割する構成にする場合は'''この方法は使えません'''。 | ||
+ | </div> | ||
+ | |||
+ | 1. ここではアップロードされたデータをMySQLではなく'''SQLite'''データベースに保存します。前もって必要なパッケージ等をインストールしておいて下さい。Debian等の場合は、 | ||
+ | sudo aptitude install sqlite3 php5-sqlite | ||
+ | で必要なものがインストールされます。 | ||
+ | |||
+ | 2. 次に config/ProjectConfiguration.class.php を修正します。ファイル中の setupProjectOpenPNEDoctrine の部分を下記のように書き換えて下さい。 | ||
+ | <source lang="php"> | ||
+ | public function setupProjectOpenPNEDoctrine($manager) | ||
+ | { | ||
+ | // You can write your own configurations. | ||
+ | |||
+ | // In default, OpenPNE uses foreign key. | ||
+ | // If you want not to use foreign key, comment out the following configuration: | ||
+ | // $manager->setAttribute(Doctrine::ATTR_EXPORT, Doctrine::EXPORT_ALL ^ Doctrine::EXPORT_CONSTRAINTS); | ||
+ | |||
+ | $manager->setAttribute(Doctrine::ATTR_EXPORT, Doctrine::EXPORT_ALL ^ Doctrine::EXPORT_CONSTRAINTS); | ||
+ | $manager->openConnection('sqlite:openpne3-uploads.sqlite', 'slave-uploads'); | ||
+ | $manager->bindComponent('File', 'slave-uploads'); | ||
+ | $manager->bindComponent('FileBin', 'slave-uploads'); | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | 3. さらにOpenPNE3自体にも修正を加えます。lib/util/opDoctrineQuery.class.php の preQuery の部分を下記のようにコメントアウトして下さい。 | ||
+ | <source lang="text"> | ||
+ | /* | ||
+ | public function preQuery() | ||
+ | { | ||
+ | if ($this->specifiedConnection) | ||
+ | { | ||
+ | $this->_conn = $this->specifiedConnection; | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | $this->_conn = self::chooseConnection($this->shouldGoToMaster, $this->getType()); | ||
+ | } | ||
+ | } | ||
+ | */ | ||
+ | </source> | ||
+ | |||
+ | 4. lib/util/opDoctrineRecord.class.php の save の部分を下記のようにコメントアウトして下さい。 | ||
+ | <source lang="text"> | ||
+ | /* | ||
+ | public function save(Doctrine_Connection $conn = null) | ||
+ | { | ||
+ | if (is_null($conn)) | ||
+ | { | ||
+ | $conn = opDoctrineQuery::chooseConnection(true); | ||
+ | } | ||
+ | |||
+ | parent::save($conn); | ||
+ | } | ||
+ | */ | ||
+ | </source> | ||
+ | |||
+ | 5. OpenPNE3のインストールを実行します。 | ||
+ | php symfony openpne:install | ||
+ | |||
+ | 6. 何事もなく使用できれば成功です。 | ||
+ | |||
+ | |||
+ | [[Category:OpenPNE3ノウハウ|{{PAGENAME}}]] |
2012年3月12日 (月) 15:41時点における最新版
OpenPNE3は日記などでアップロードされた画像などをすべてデータベースに保存するため、その量が多くなるとデータベースのバックアップに時間が掛かってしまいます。file・file_binテーブルを隔離できれば画像だけバックアップの頻度を少なくするといったことも可能になるので、できるかどうか試した記録をここに残しておきます。参考程度にどうぞ。
手順[編集]
- ※ この手順はOpenPNE3を最初からインストールすることを前提としています。すでに使用しているデータを消さずに移行する方法は自分で調べて下さい。
- ※ 見ての通りとてもいい加減な方法なので、環境によっては失敗してデータが消えたり読み込めなくなったりするかもしれません。
- ※ データベースをマスター・スレーブに分割する構成にする場合はこの方法は使えません。
1. ここではアップロードされたデータをMySQLではなくSQLiteデータベースに保存します。前もって必要なパッケージ等をインストールしておいて下さい。Debian等の場合は、
sudo aptitude install sqlite3 php5-sqlite
で必要なものがインストールされます。
2. 次に config/ProjectConfiguration.class.php を修正します。ファイル中の setupProjectOpenPNEDoctrine の部分を下記のように書き換えて下さい。
public function setupProjectOpenPNEDoctrine($manager) { // You can write your own configurations. // In default, OpenPNE uses foreign key. // If you want not to use foreign key, comment out the following configuration: // $manager->setAttribute(Doctrine::ATTR_EXPORT, Doctrine::EXPORT_ALL ^ Doctrine::EXPORT_CONSTRAINTS); $manager->setAttribute(Doctrine::ATTR_EXPORT, Doctrine::EXPORT_ALL ^ Doctrine::EXPORT_CONSTRAINTS); $manager->openConnection('sqlite:openpne3-uploads.sqlite', 'slave-uploads'); $manager->bindComponent('File', 'slave-uploads'); $manager->bindComponent('FileBin', 'slave-uploads'); }
3. さらにOpenPNE3自体にも修正を加えます。lib/util/opDoctrineQuery.class.php の preQuery の部分を下記のようにコメントアウトして下さい。
/* public function preQuery() { if ($this->specifiedConnection) { $this->_conn = $this->specifiedConnection; } else { $this->_conn = self::chooseConnection($this->shouldGoToMaster, $this->getType()); } } */
4. lib/util/opDoctrineRecord.class.php の save の部分を下記のようにコメントアウトして下さい。
/* public function save(Doctrine_Connection $conn = null) { if (is_null($conn)) { $conn = opDoctrineQuery::chooseConnection(true); } parent::save($conn); } */
5. OpenPNE3のインストールを実行します。
php symfony openpne:install
6. 何事もなく使用できれば成功です。