symfony propel:buildでのinsertエラー
symfony1.4とmysql5.1の環境でsymfony propel:build-allをしたらエラーで引っかかった
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corres ponds to your MySQL server version for the right syntax to use near '
data/sql/lib.model.schema.sqlを見てみる
`delete` TINYINT(1) default NOT NULL,
defaultの値がない?
schema.ymlで
defaultValue: ''
としたところが一部クオートがなくなっているようだ
大丈夫なところもあるのに・・・
lib.model.schema.sqlを書き換えて終わり
PHPでmemchacheを使う
peclのチャンネルアップデート
$ sudo pecl channel-update pecl.php.net
memcached-develインストール
$ sudo yum install -y memcached-devel
memcacheライブラリインストール
$ sudo yum install php-pecl-memcache
memcache.soを有効か
$ sudo vim /etc/php.d/memcache.ini extension=memcache.so
apacheを再起動
$ sudo /etc/rc.d/init.d/httpd restart
後はphp内でnew Memcacheして使っていく
【MySQLパフォーマンス実験1】ジョインしてソートする時は一旦IDにするとこんなに早い!
二つ以上のテーブルにまたがった検索条件などがあって、リレーションテーブルをジョインして
条件指定したりソートしたりすることは良くあると思う。
データ件数が多いとそのままジョインしたのではクソ重いので、IDだけ一旦取ってくるやり方をすると
各段にパフォーマンスが違うのでメモ。
前提
A〜Qの17項目のフィールドがあるテーブルαと
1〜5の5項目のフィールドがあるテーブルβとが有り
フィールドAは主キーとする
データ件数は
テーブルαが102,485件
テーブルβが514,455件
■方法1. テーブルαとテーブルβをジョイン&ソート後一回でデータを取得する
SELECT フィールドA, フィールドB, フィールドC, フィールドD, フィールドE, フィールドF, フィールドG, フィールドH, フィールドI, フィールドJ, フィールドK, フィールドL, フィールドM, フィールドN, フィールドO, フィールドP, フィールドQ FROM テーブルα, テーブルβ WHERE テーブルα.フィールドA = テーブルβ.フィールド2 ORDER BY テーブルβ.フィールド4;
結果取得にかかった時間は72.3212秒であった
■方法2. テーブルαとテーブルβをジョイン&ソート後、まずはプライマリーキーだけ取得して、個数分だけ単行セレクトする
① プライマリーキーだけ取得
SELECT フィールドA FROM テーブルα, テーブルβ WHERE テーブルα.フィールドA = テーブルβ.フィールド2 ORDER BY テーブルβ.フィールド4;
② ①で取得したプライマリーキーの個数分単行セレクトする
SELECT フィールドA, フィールドB, フィールドC, フィールドD, フィールドE, フィールドF, フィールドG, フィールドH, フィールドI, フィールドJ, フィールドK, フィールドL, フィールドM, フィールドN, フィールドO, フィールドP, フィールドQ FROM テーブルα WHERE フィールドA = (?で取得したプライマリーキーx);
結果取得にかかった時間は0.9342秒であった
比較をわかりやすくするためにインデックス等は考慮しないようにしたが、
それでも相当な差がつくことはわかった。
ニコ厨向けTwitterクライアント『つぶやきの舞』ベータ版リリースしました
「コメントがないと落ち着かない・・・」
そんなあなた!
お待たせしました。
Twitterのつぶやきがニコニコ動画のようにデスクトップ上に流れるTwitterクライアント「つぶやきの舞」ができました!
え?そんなのお前だけだって?
うっ・・・
とりあえず同意してくれる方が居たら使ってみてください・・・
■ダウンロード
つぶやきの舞 ダウンロード
■インストール
ダウンロードしたairファイルをダブルクリックで自動で入ります。
FlashPlayerやAdobeAIRが入ってないと動かないので、入ってなくて動かない場合は入れましょう。
■使い方
1.最初にTwitterの認証画面とパスコード入力画面と出ます。
2.認証画面で許可ボタンを押します。
3.表示されたパスコードを認証画面に入力します。
4.つぶやきが流れます。
5.終了するときは右下のアイコンを右クリックで「終了」を選んでください。
■動作環境
FlashPlayerとAdobeAIRがインストールされたWindowsマシン
FlashPlayerやAdobeAIRが動けばMacやLinuxでも動くかもしれません。
動作報告募集中!
■更新履歴
2012/09/03 var1.1 Twitterが重い時にフリーズするバグを修正
2012/08/31 var1.0 ベータリリース
CentOSでmemcachedを使ってみる
# リポジストリ追加
wget http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
rpm -Uvh rpmforge-release-0.3.6-1.el5.rf.i386.rpm
# memchacheインストール
yum -y --enablerepo=rpmforge install memcached
# 起動設定
/sbin/chkconfig memcached --list
/sbin/chkconfig memcached on
/sbin/chkconfig memcached --list
# memchachedスタート
/etc/init.d/memcached start
# memcachedサーバに接続
telnet localhost 11211
# データ登録
set foo 0 0 4
test
# キー一覧
stats items
STAT items:1:number 1
STAT items:1:age 1958
STAT items:1:evicted 0
STAT items:1:evicted_nonzero 0
STAT items:1:evicted_time 0
STAT items:1:outofmemory 0
STAT items:1:tailrepairs 0
STAT items:1:reclaimed 0
END
# データの確認
stats cachedump 1 10
ITEM foo [4 b; 1346143663 s]
END
※2012/10/16 追記
最新のCentOS6.3だとリポジストリを追加せずともそのままyum installできた
symfony1.2でsqliteを使う際のconfig周りの設定
SQLITE用の設定方法
若干詰まったのでメモ
database.yml
all: propel: class: sfPropelDatabase param: phptype: sqlite database: %SF_DATA_DIR%/hogehoge.db encoding: utf8 dsn: sqlite:///home/hogehoge/symfony/data/hogehoge.db
propel.ini
propel.targetPackage = lib.model propel.packageObjectModel = true propel.project = symfony propel.database = sqlite propel.database.driver = sqlite propel.database.createUrl = sqlite:///home/hogehoge/symfony/data/hogehoge.db propel.database.url = sqlite:///home/hogehoge/symfony/data/hogehoge.db propel.database.creole.url = ${propel.database.url} propel.database.encoding = utf8
database.ymlでdatabaseにdbファイルのパス設定してるから大丈夫だと思ったけどdsnの設定も必要なのね
参考
http://forum.symfony-project.org/viewtopic.php?t=25131&p=92519
http://symfony-jp.blogspot.jp/2007/12/symfonymysqloraclesql-server.html