個人用ツール

「OpenPNE3ノウハウ:画像などのアップロードされたデータだけ別のデータベースに保存する」の版間の差分

提供:OpenPNE3まとめwiki

移動先: 案内, 検索
ページの作成: OpenPNE3は日記などでアップロードされた画像などをすべてデータベースに保存するため、その量が多くなるとデータベースのバック...
 
1行目: 1行目:
OpenPNE3は日記などでアップロードされた画像などをすべてデータベースに保存するため、その量が多くなるとデータベースのバックアップに時間が掛かってしまいます。file・file_binテーブルを隔離できれば画像だけバックアップの頻度を少なくするといったことも可能になるので、できるかどうか試した記録をここに残しておきます。参考程度にどうぞ。
OpenPNE3は日記などでアップロードされた画像などをすべてデータベースに保存するため、その量が多くなるとデータベースのバックアップに時間が掛かってしまいます。file・file_binテーブルを隔離できれば画像だけバックアップの頻度を少なくするといったことも可能になるので、できるかどうか試した記録をここに残しておきます。参考程度にどうぞ。


== 手順 ==
Good job making it apaper easy.
 
<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月11日 (日) 18:39時点における版

OpenPNE3は日記などでアップロードされた画像などをすべてデータベースに保存するため、その量が多くなるとデータベースのバックアップに時間が掛かってしまいます。file・file_binテーブルを隔離できれば画像だけバックアップの頻度を少なくするといったことも可能になるので、できるかどうか試した記録をここに残しておきます。参考程度にどうぞ。

Good job making it apaper easy.