ブログシステム - BLOG.BBTUNE.COM -

PostgreSQL

ludia + postgresql で全文検索!

ludia install
-------------------

http://sourceforge.jp/projects/ludia/
ここから withdeps を取ってきました。

解凍した、INSTALLファイルに見やすく書いてあります。

- PosgreSQL : http://www.postgresql.org/
ludia-1.1.0
- Senna : http://qwik.jp/senna/FrontPageJ.html
- MeCab : http://mecab.sourceforge.jp/

MeCab をインストール
-------------------

MeCab0.96 が最新なのでそれを取ってくる。
http://sourceforge.net/project/showfiles.php?group_id=177856


$ ./configure --with-charset=utf8
$ make
$ su
# make install


辞書も最新に。
mecab-ipadic-2.7.0-20070610


$ ./configure --with-charset=utf8
$ make
$ su
# make install

Sennaのインストール
-------------------

$ ./configure
$ make
$ su
# make install

nfkcは時間がかかるのでと書いてありますがほんとに時間掛かります>。<;
とはいっても
celeron 400 MHz
mem 640M
で10分くらいなので大したことないです。(計ってないけどそんなもんですた。)

// インストール後に、 $SENNA_HOME ディレクトリを作成します。::

# mkdir /var/senna

// また、Sennaは $SENNA_HOME/log/senna.log というファイルにログを出力します。
// ログを取得したい場合は、ログフォルダを作成し、
// PostgreSQLサーバの実行ユーザが書き込みをできるように権限を設定してください。::

# mkdir /var/senna/log
# chown postgres:postgres /var/senna/log




Ludiaのインストール
-------------------

// アーカイブを展開し、以下の要領でビルドとインストールを行います。::

$ ./configure
$ make
$ su
# make install

// pg_configコマンド、senna-cfgコマンドのインストール先にPATHが設定されていない場合、
// 以下のようにそれぞれのpathをconfigureオプションで指定してください。::

$ ./configure --with-pg-config=/usr/local/pgsql/bin/pg_config \
--with-senna-cfg=/usr/local/bin/senna-cfg

---------------------
早速利用

設定をインストール
$ psql -f /usr/share/pgsql/pgsenna2.sql blackdb

# vi /var/lib/pgsql/data/postgresql.conf
#---------------------------------------------------------------------------
# CUSTOMIZED OPTIONS
#---------------------------------------------------------------------------

#custom_variable_classes = ''
# list of custom variable class names

custom_variable_classes = 'ludia'
ludia.max_n_sort_result = 10000
ludia.enable_seqscan = on
ludia.sen_index_flags = 31
ludia.max_n_index_cache = 16
ludia.initial_n_segments = 512


# /etc/rc.d/init.d/postgresql restart
postgresql サービスを停止中: [ OK ]
postgresql サービスを開始中: [ OK ]


CREATE INDEX index_title ON item_table USING fulltextb((title::text));

256168レコード
34,382.261 ミリ秒

でした。

検索してみます。

SELECT * FROM item_table WHERE title @@ 'てすと';

おぉ早い^-^。

322.017 ミリ秒

SELECT * FROM item_table WHERE title like '%てすと%';

1,450.610 ミリ秒

1/4くらいですね。とりあえず、満足です。


===========================================================================
セカンダリサーバにも 入れたのでデータを移してみる。

[A] のテーブルデータをダンプ
pg_dump bbtune -U postgres > /tmp/pg/bbtune

このデータをBへ入れる。一旦空にして。
[B]
dropdb bbtune
createdb bbtune
// まずは、ludiaを利用可能に
psql -f /usr/share/pgsql/pgsenna2.sql bbtune
次にデータを流し込む
/usr/bin/psql bbtune -U postgres < /tmp/pg/bbtune

OK!問題なく動きました!
pgpoolを通しても問題無さそうです。
2007-07-31 05:13:16

[pgpool]pgpool2を導入してみました!

画像登録にOIDを利用していたので失敗しました。。。

oid は使わないほうが良さそうです。

http://pgpool.sraoss.jp/
pgpool-IIのチュートリアルを読むとそのまま使えます。

・同期レプリケーション
・ロードバランス負荷分散(SELECT)

が出来るのでとてもいいですね。

インストールは簡単です。
が一箇所エラーが出たので
チュートリアルにも書いてありますが、postgresql-develを入れると大丈夫です。

$ ./configure

configure: error: libpq is not installed or libpq is old

libpq.so.4.1とかはあるけど?
ヘッダファイルやlibpq.aがないとダメっぽい。

# yum install postgresql-devel
# yum update postgresql-*

make
make install
で問題なく

設定も簡単でした。

pgpool.conf
listen_addresses = '*'
port = 9111
replication_mode = true
load_balance_mode = true

backend_hostname0 = '192.168.234.198'
backend_port0 = 5432
backend_weight0 = 1

backend_hostname1 = '192.168.234.199'
backend_port1 = 5432
backend_weight1 = 1

変えたのはこれだけです。

postgresql を外部からつなげる様に設定するだけです。

// data/pg_hba.conf

# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
host all all 192.168.234.0/24 trust

// data/postgresql.conf

listen_addresses = '*'

あとは、iptables で postgresql と pgpoolのポートを自分のネットワークでつなげるようにするだけ!

! 起動
# pgpool > /tmp/pg.log 2>&1
! 終了
# pgpool stop

問題ないです。

ひとまず、同期バックアップが出来るので落ちたとき安心?です。


-----A----- -----B-----
- httpd - (httpd)

- [A]pgpool -
↓ 同期・分散 ↓
- postgres - postgres
----------- -----------
こんな感じで[A]だけpgpoolが動いています。

まだhttp部分は分散されていないので、
httpdを[A]で動かした場合は、Bが落ちてもBのpostgresqlは無視するので大丈夫そうです。
[A]が落ちても大丈夫なように[B]でもpgpoolをすぐ動かせるようにしておきます。
[A]が落ちたら、[B]へhttpdとpgpoolを切り替えるだけでOKです。

データが同期しているというだけでも相当なことです。

次に、pound で httpdも分散してみたいと思います。




□問題あったのは・・・
OID と データ移行です。
元のデータをただコピーしても上手く行かないというか
OIDを使ってなければ特に問題ありませんが・・・
2007-07-26 08:00:15

pg_dump で スキーマ保存。

pg_dumpでバックアップも出来るのですが、


まずは、定義を保存してみます。

# /usr/local/pgsql/bin/pg_dump -s -u drdb > drdb_dump
User name: user
Password:

-s はスキーマ (定義)だけ抽出
-u はユーザ認証する。

データも全部SQLで取るには
-d

データのみは
-a

これでテーブルやビューなど、すべて保存できるので
簡単に複製できます。
2007-06-23 02:46:16

PNG ZLIB GD 入れなおし。

png を入れなおそうと
http://www.libpng.org/pub/png/libpng.html
libpng の 1.2.18を入れてみて

gd の最新版を入れて
http://www.libgd.org/Main_Page
GD-2.0.35RC4 released
ビルドしなおして、
さらにPHPもリビルドと思いconfigure したけど
GDからlibpng が読めていないというエラーが出て止まる。
(表示されるエラーはmysqlでもconfig.logにgdのエラーが出ている。
これは?と思い。

libgd.so: undefined reference to `png_get_IHDR@PNG12_0'
のようなPNGLIBの関数が読めないようなエラーが出ていた。

mysqlのところで止まったのはたまたまだそこでエラーが反映?されたのだと思う。


http://zlib.net/
1.2.3
を更新してみて
ついでに
libpng 1.0.26に変えようと思い。

で gd 、phpとビルドに成功したけど
libpngは1.2を読んでるみたいだから zlibが良かったのか?よくわからない。
けど。

今回のコンフィグオプション
php-5.2.3]# ./configure --with-apxs2 --enable-force-cgi-redirect --enable-zend-multibyte --enable-mbstring --enable-mbstring --enable-mbsrt-enc-trans --enable-mbregex --enable-trans-sid --with-dbx=shared --enable-sqlite-utf8 --with-sqlite=shared --with-pgsql=/usr/local/pgsql --with-mysql=/usr/local/lib/mysql --enable-pdo=shared --with-pdo-sqlite=shared --with-pdo-mysql=shared --with-pdo-pgsql=shared --with-openssl=/usr --with-soap=yes --with-zlib --with-gd --with-jpeg-dir --with-freetype-dir --with-ttf --with-png-dir --with-curl --enable-calendar
2007-06-06 04:01:22

OID ラージオブジェクト

PDO_PGSQL DSN
PDO:: pgsqlLOBCreate
PDO:: pgsqlLOBOpen
PDO:: pgsqlLOBUnlink

PDOでそのまま使えるのかと思ったら、pgsql 特有のLOB関数を使わないといけなかった。。。
2007-05-26 03:44:15

画像をデータベースに入れるべきか?

わかりません。。。
パフォーマンスが落ちなければ問題ないとは思いますが。

◎部分としては、管理のしやすさです。
バックアップ、りかばリをデータと一括でできると。

今までは別でやってきましたが試しに一緒に入れてみます。
ただ、キャッシュ機能的な使い方をするので、その分HDD領域は倍使うと考えられます。

どうなるでしょうか?

オラクルの解説。
データベースに画像を格納するメリット
http://otndnld.oracle.co.jp/products/database/orac・・・
まぁオラクルを使わないので、どれほどのパフォーマンスかはあれですが。
利点としては、これ以外にないといったところでしょうか
2007-05-26 02:53:35

PHP5 Class PDO

・クラス内のメンバーは、$this-> が付いていないとその関数ないの変数と判断されてしまう!

・PDOクラス、PDOStatment の errorInfo errorCode が取れない・・・
SQLが間違っていたんだけど、何が間違っているのか分からない。。。

Postgresql 用のDNS
pgsql:host=localhost port=5432 dbname=dash user=jun password=sure
こんな感じ。

MySQL
mysql:host=localhost,dbname=dash,
みたいな感じ。

違うので注意。
2007-05-16 18:48:05

Postgresql 新規ユーザ&パスワード設定

Postgresqlのコマンド群で
/usr/local/pgsql/bin

postgresになっておく
# su postgres

ユーザを作成
# createuser junx
Shall the new role be a superuser? (y/n) y


psql を利用して、パスワードを設定。
$ ./psql
Welcome to psql 8.2.3, the PostgreSQL interactive terminal.

Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit

postgres=# alter user junx password \'xxxx\';
ALTER ROLE
postgres=# \q
2007-05-16 16:51:48
引越
Google Android
S11HT emonster
windows mobile
silverlight
podcast
apple
ssh
Perl
samba ファイルサーバ
ludia
pound
High Availavility高可用性
pgpool
Google Maps API
Ruby
Postfix
プロバイダー
javascript
PostgreSQL
システム監査
HDD換装
時計
Felica
C#
携帯用サイト作成関連
ネットワーク
XML + XSLT
W-ZERO3 willcom
MySQL
さくらの専用サーバ
ブログ関連
Apache
サーバー管理
情報処理試験
データベース
PHP
Unix-Linux
動画関連メモ
人気商品情報
アマゾン関連
追加機能予定
システムメモ

PostgreSQL 記事一覧
ludia + postgresql で全文検索!
[pgpool]pgpool2を導入してみました!
pg_dump で スキーマ保存。
PNG ZLIB GD 入れなおし。
OID ラージオブジェクト
画像をデータベースに入れるべきか?
PHP5 Class PDO
Postgresql 新規ユーザ&パスワード設定