Archive for MySQL

zenphotoのキャッシュを自動で作る

ZenPhotoのキャッシュ作成が遅い!
管理画面でキャッシュを作るためのページがあるけど、すごい遅いし、写真が大量にあるとブラウザが止まる。

ちょっと効率悪いけど、自動でキャッシュを作る方法。
↓以下のコマンドを打って、走らせておくだけ。

% wget --recursive http://www.tymy.net/~matsu/photo/ && rm -rf www.tymy.net

↓screen起動して放置中。

全ページをHTTPでアクセスして、Zenphotoにキャッシュを作らせる。
ローカルにファイルを保存したくないんだけど、そのオプションがわからなかったからとりあえず上記で。

MySQLで直前にinsertしたレコードの取得。

MySQL 直前に挿入されたレコードの検索

SELECT * FROM tbl_name WHERE auto_col IS NULL

http://dev.mysql.com/doc/refman/4.1/ja/comparison-operators.html

PHPから使う分には、PDOオブジェクトから取得できるからいらないけど。

mysql nullと0


MySQLにて、nullを数字として計算すると、数字側がダウンキャストされて結果がNULLとして返される。
NULLがアップキャストされて、0にならないことに注意。

mysql> select 100 - null;
+------------+
| 100 - null |
+------------+
|       NULL |
+------------+
1 row in set (0.01 sec)


version: 4.1.22-log

Senna インストールメモ

2007年3月4日時点で、最新の安定版のライブラリを使った場合のSennaのインストールメモ。

Sennaとは、MySQLのFULLTEXT INDEXを日本語でも行えるようにするMyISAMテーブルの拡張モジュール。

以下のコマンドをコピペすればインストールが完了することを目的で書いています。
====================================
cd /usr/local/src

# mecab
wget http://superb-west.dl.sourceforge.net/sourceforge/mecab/mecab-0.94.tar.gz
tar zxf mecab-0.94.tar.gz
cd mecab-0.94
./configure –prefix=/usr –with-charset=utf8
make
make install

cd ..

# mecab dic
wget http://easynews.dl.sourceforge.net/sourceforge/mecab/mecab-ipadic-2.7.0-20060707.tar.gz
tar zxf mecab-ipadic-2.7.0-20060707.tar.gz
cd mecab-ipadic-2.7.0-20060707
./configure –with-charset=utf8 –prefix=/usr
make
make install

cd ..

# senna
wget http://osdn.dl.sourceforge.jp/senna/24191/senna-1.0.1.tar.gz
tar senna-1.0.1.tar.gz
cd senna-1.0.1
./configure –prefix=/usr
make
make install
mkdir /var/senna
echo ’sjis’ > /var/senna/senna.conf

cd ..

#mysql
wget http://www.rootman.co.kr/NFS2/APM/mysql-5.0.24.tar.gz
tar zxf mysql-5.0.24.tar.gz
cd mysql-5.0.24
patch -p1 < ../senna-1.0.1/bindings/mysql/mysql-5.0.24a.senna.diff
patch -p1 < ../senna-1.0.1/bindings/mysql/mysql-5.0.24a.senna.2ind.diff

libtoolize -c -f
aclocal-1.9
autoheader
automake-1.9 -c -a -i
autoconf
touch sql/sql_yacc.yy

CFLAGS=”-O3 -mtune=nocona -I/usr/local/include” \
CXX=gcc CXXFLAGS=”-O3 -mtune=nocona \
-felide-constructors -fno-exceptions -fno-rtti -I/usr/local/include” \
LDFLAGS=”-L/usr/local/lib” \
./configure \
–prefix=/usr/local/mysql \
–with-charset=utf8 \
–with-extra-charsets=all \
–with-mysqld-user=mysql \
–with-senna \
–enable-thread-safe-client \
–enable-assembler \
–with-readline \
–with-mysqld-ldflags=-all-static \
–disable-shared

make
make install

MySQLPHPGridを使ってみた

MySQLPHPGridを使ってみたんだけど、日本語使えない。
http://www.drasticdata.nl/mysqlphpgrid.htm

MySQLPHPGridとは、Webから利用できるMySQLの編集スクリプト。PHPでかかれています。

MySQLPHPGridでは、いろいろなオプションを設定できるので日本語のカラムは非表示にしたり、編集できないようにすれば実用的にOKです。

■利点
超簡単にテーブル内容を編集できる
Basic認証で、アクセス制限をかけられる
enumタイプにも対応してる。
sortできる
信頼性は高いとおもう

■欠点
日本語未対応
テーブルごとにPHPスクリプトを作らなければならない。
(テーブルを選択するプログラムを書けば対応可能)
スクリプト自体がshort tagで始まっているPHPファイルなので、iniで設定してあげる必要がある。short tag openがOffの場合は画面に何も表示されないっす。

がんばれMySQLPHPGrid!

MySQLで郵便番号を保持するテーブルを作った。

いやはや避けて通れなくはなってしまったこと。
自社で郵便番号の最新情報を持つ。

なんといっても、一番いやなのが

月1回100件ほどの更新がある郵便番号データ。

そこで、運用は以下のようにする。
・月1回丸ごとデータを入れ替える
 ・時間はかかるけど、差分を積み重ねたときの不整合が出てしまうリスクを回避
 ・更新用のスクリプトを2つ書かなくてすむ。
・入れ替える際に、SQLクライアントから参照不可能になっては困るので、トランザクションをかけてデータを更新。
 ・重いけど、月1回だし、なにより楽。
・いらない情報も念のため持っておく。

ビジネスロジックでは、郵便番号から住所を検索する用途にしか利用しないため、indexは郵便番号だけ。
スキーマは以下の通り。

CREATE TABLE `postcode` (
`postcode_id` int(10) unsigned NOT NULL auto_increment,
`postcode_jis` varchar(5) NOT NULL default ”,
`postcode_old` varchar(5) NOT NULL default ”,
`postcode_new` varchar(7) NOT NULL default ”,
`postcode_prefecture_kana` varchar(255) NOT NULL default ”,
`postcode_city_kana` varchar(255) NOT NULL default ”,
`postcode_suburb_kana` varchar(255) default NULL,
`postcode_prefecture` varchar(255) NOT NULL default ”,
`postcode_city` varchar(255) NOT NULL default ”,
`postcode_suburb` varchar(255) default NULL,
`postcode_is_separated_suburb` tinyint(3) unsigned NOT NULL default ‘0′,
`postcode_is_koaza` tinyint(3) unsigned NOT NULL default ‘0′,
`postcode_is_chome` tinyint(3) unsigned NOT NULL default ‘0′,
`postcode_is_include_area` tinyint(3) unsigned NOT NULL default ‘0′,
`postcode_status` tinyint(3) unsigned NOT NULL default ‘0′,
`postcode_reason` tinyint(3) unsigned NOT NULL default ‘0′,
PRIMARY KEY (`postcode_id`),
KEY `postcode_new` (`postcode_new`(4))
) ENGINE=InnoDB DEFAULT CHARSET=ujis AUTO_INCREMENT=127481 ;

データをつっこむスクリプト要点(日本語のところは適宜置き換えてね)
トランザクションかけているので途中でデータの挿入に失敗しても、中途半端にならないはず。

ini_set(’max_execution_time’,600);

$handle = fopen(ふぁいる, ‘r’);

とらんざくしょんはじめ。

れこーどをけす (truncate table postcode)

while (!feof($handle)) {

$line = fgets($handle, 8192);
$line = trim($line);

if(!$line) continue;

// 文字列の処理
$line = str_replace(’以下に掲載がない場合’, ”,$line);

$field_array = explode(’,', $line);

// 文字列の処理
foreach($field_array as &$field){
$field = str_replace(’”‘,”,$field);
}

// 補足として書いてある括弧を消す
$field_array[5] = mb_ereg_replace(’(\([^\)]+\))’,”,$field_array[5]);
$field_array[8] = mb_ereg_replace(’(([^)]+))’,”,$field_array[8]);

えんてぃてぃ作る

てーぶるに いんさーと

}
fclose($handle);

とらんざくしょんこみっと。

あとは、月1回全国のデータをダウンロードして、上記のスクリプトを実行すればダウンタイムなしに、
しかも楽に更新ができる。

余裕があれば、
・上記のURLから自動でファイルをダウンロード
・解凍
・更新プログラム実行
をすれば、全自動で最新の郵便番号データを保持できる!
もっと詳しく >>

母校

僕の,懐かしい母校.ここで高校3年間を(寝て)過ごしました.
詳しくは’詳細’をごらんあれ.

場所はこちら.
もっと詳しく >>

 

リンク