Archive for the ‘database’ Category

 

php zend Lucene pagination

1月 24th, 2012

http://framework.zend.com/manual/1.11/en/learning.lucene.pagination.html
なんとなくコメントが面白いので。
検索結果のidだけキャッシュしておいて
次ページのときは、idからデータを取得しろというだけですが
この結果のインスタンスのサイズが半端ないので、全部キャッシュするのは無理です。
とりあえず、速度だけ計ってみました。
getDocument 100回
0.10254192352295 sec
0.093567132949829
0.091049194335938
search + 100データ取得 + 1000idをcache
0.86610412597656 sec
0.6905689239502
0.69413304328918
ということで、検索は、キーワードやデータ量でかなり変わりますが、getdocument100回のほうが速いことは分かりました。
ページングとキャッシュを実装しました。
基本的には、ページング以外にキャッシュが利用されることは稀なので、memcachedのメモリは少なめに設定です。

Read full article | コメントは受け付けていません。

Redis + predis | memcachedの代わりにRedisを使ってみる。

1月 20th, 2012

http://redis.io
http://redis.io/clients
memcachedを利用していた表示データをredisにしてみます。
消えても良いのですが、データが出来るまで寂しいので。
daily rankingやpublic activityとか
*永続的なmemachedですが、メモリーサイズより大きいデータは扱えないので、あくまでもmemcachedの代替。Virtual Memory機能はあるが非推奨。
1. redis install

# yum list redis
redis.x86_64 2.0.3-2.el5 [...]

Read full article | コメントは受け付けていません。

tokyotyrant backup | tcrmgr copy

1月 12th, 2012

http://alpha.mixi.co.jp/blog/?p=147
# tcrmgr copy -port 1978 localhost /tmp/backup.tch
ホットコピーできるので、mysqldumpよりも楽です。
* ulogも入れておきましょう。
* 更新しない物は、コピーだけでOK
こんな感じで簡単なスクリプト

#!/bin/sh
copy_tt()
{
# 1 output_file 2 port
tcrmgr copy -port ${2} localhost ${1}
}

SRC_IP=’333.333.333.333′
SRC_DIR=”/home/bkup/data/bkup/tt/servicename”
TO_IP=’99.99.99.99′
TO_DIR=”/home/bkup/data/${SRC_IP}/tt/servicename”

mkdir -p ${SRC_DIR}
copy_tt “${SRC_DIR}/a.tch” 51101
copy_tt “${SRC_DIR}/b.tch” 51102

ssh ${TO_IP} mkdir -p ${TO_DIR}
rsync -auz ${SRC_DIR}/ ${TO_IP}:${TO_DIR}/

Read full article | コメントは受け付けていません。

mysql buckup | mysqlhotcopy or mysqldump

1月 12th, 2012

http://dev.mysql.com/doc/refman/5.5/en/backup-methods.html
http://dev.mysql.com/doc/refman/5.5/en/mysqlhotcopy.html
mysqlhotcopyしようと思ったらinnodbでは使えないとのこと。

#!/bin/sh

SRC_IP=’000.000.000.000′
SRC_DIR=”/home/bkup/data/bkup/mysql”
TO_IP=’1.1.1.1′
TO_DIR=”/home/bkup/data/${SRC_IP}/mysql”

DATESTR=`date ‘+%Y%m%d%H%M%S’`
MYSQL_NAME=’wordpress’

# test touch /home/bkup/data/bkup/mysql/db.$DATESTR
# touch /home/bkup/data/bkup/mysql/db.${DATESTR}

mkdir -p ${SRC_DIR}

# mysqldump -u root –all-databases > ${SRC_DIR}/${MYSQL_NAME}.${DATESTR}
# gzip ${SRC_DIR}/${MYSQL_NAME}.${DATESTR}

ssh ${TO_IP} mkdir -p ${TO_DIR}
CMD_STR=”rsync -auz ${SRC_DIR}/${MYSQL_NAME}.${DATESTR}.gz ${TO_IP}:${TO_DIR}/${MYSQL_NAME}.${DATESTR}”
$CMD_STR

こんな感じで。dumpしてrsync

Read full article | コメントは受け付けていません。

sqlite backup .dump

1月 11th, 2012

3.3.6には.backupコマンドが無いようで
.dumpで取るのかな?
定期コピーと定期dumpでやってみようと思います。
コピーは普通にコピーするだけ
dumpはこんな感じ。

$ sqlite3 data/sqlite/def .dump > data/sqlite/def.bakcup

restoreしてみる。

$ sqlite3 data/sqlite/def.restore < data/sqlite/def.bakcup

簡単で良いですね。これで数日分バックアップしておきます。

Read full article | コメントは受け付けていません。

sqlite | id generator

1月 11th, 2012

他のデータは扱わず、ユーザーIDだけ管理するサービスは、sqliteのautoincrementを利用してID生成してみる。
sqlite使ったことが無いので、適当。。。
http://www.sqlite.org/sqlite.html

$ sqlite3 filename

これでデータベースできるみたい。

$ sqlite3 data/sqlite/def
SQLite version 3.3.6
Enter “.help” for instructions
sqlite> .databases
seq name file
— ————— ———————————————————-
0 main /home/opt/home/socialic.tarot/data/sqlite/def

* create table

sqlite> create table users(
[...]

Read full article | コメントは受け付けていません。

PDOのdsnにcharset が必要だった。|mysql php

12月 26th, 2011

mysql:host=slave.mysql.tranode.com;dbname=tranode;port=99999;charset=utf8;
みたいな。
charsetを指定しないと文字化けした。phpからだけ見てるとわからないけど
mysqlから直接見ると文字化けしてたので、文字コードが間違えて入ってるっぽい。

Read full article | コメントは受け付けていません。

skip slave sql error | mysql

12月 15th, 2011

slaveでsqlエラーが出ると
mysql > show slave status;

Slave_IO_Running: Yes
Slave_SQL_Running: No

Last_Errno:
Last_Error: Error ‘xxx’

となりました。
(原因はいろいろですが、単純な場合は、slave側でstart slaveの前に何かsqlを実行してそれが邪魔しているとか
飛ばしても良いエラーの場合は、

stop slave;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
start slave;

でスキップします。
====
データがある状態からstart slaveするときは。
master のポジションを確認

FLUSH TABLES WITH READ LOCK; // マスターの書き込みを停止。& dump & copy

show master status; // file positionを確認
+——————+———-+————–+——————+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+————–+——————+
| mysql-bin.000001 | [...]

Read full article | コメントは受け付けていません。

can not use current_timestamp on 2 timestamp columns | mysql

12月 14th, 2011

create table でこれがエラーになる。

`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

http://dev.mysql.com/doc/refman/5.5/en/timestamp.html
あってそうだけど、2個 timestamp型にCURRENT_TIMESTAMPを使えないらしい。

テーブル内の1つの TIMESTAMP カラムに対して、現在のタイムスタンプをデフォルト値と自動更新値として指定する事ができます。現在のタイムスタンプを、カラムを初期化するデフォルト値にする事、または自動更新のデフォルト値にする事、またはその両方にする事が可能です。現在のタイムスタンプを、1つのカラムを初期化するデフォルト値にし、別のカラムの自動更新のデフォルト値にする事は不可能です。

ということで。

`created_at` timestamp NOT NULL DEFAULT ‘0000-00-00 00:00:00′,
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

instert into で NOW() を入れてみる。

mysql> select * from users;
+———+——–+——+———-+———————+———————+
| id | authid | mail | [...]

Read full article | コメントは受け付けていません。

generate id by procedure | mysql

12月 14th, 2011

作成時は、delimiter // で ; を変えておく必要があります。
autoincrementのIDを作成して返します。

mysql > delimiter //
CREATE PROCEDURE check_user (IN s_id VARCHAR(255), OUT r_id INT(11))
BEGIN
SELECT id INTO r_id FROM users WHERE authid=s_id;
IF r_id is NULL THEN
INSERT INTO users( authid ) values( s_id );
SELECT id INTO r_id [...]

Read full article | コメントは受け付けていません。