ariari.jp
ariar****@gmail*****
2008年 3月 20日 (木) 00:23:13 JST
加畑さん
はじめまして。ariariです。
下記の件ですが、とりあえず、SQLログを出力してみてはいかがでしょうか。
問題のレコードが書き込まれる前後に、どのような操作がされていたのかがわか
れば、解決の手助けにはなるかと思います。
CI1.5.4で構築した手元のアプリケーション(RDBMSはMySQL5、CIのDBドライバは
mysqlを使用)で確認してみたところ、
system/database/drivers/mysql/mysql_driver.phpの_prep_queryメソッド内の
returnの直前に、
log_message('debug', $sql);
を挿入することで、実行直前のSQLがログ出力されることを確認しました。
log_messageの第1引数は、出力したいレベルに応じて、適宜書き換えてください。
system/application/config/config.phpのlog_thresholdの設定に依存すると思
うので、
SQLログのみ出力したい場合は、log_thresholdを1にして、errorにしてしまった
ほうがいいかもしれません。
2以上になるとログの量が増えますので。。
いろいろ書いてみましたが、CIのライブラリ部分を書き換えることになるので、
まずは開発環境で確認してみてはいかがでしょうか。
以上です。
kabayan さんは書きました:
> 加畑です。
>
> はずかしーー!レポートありがとうございます。
> 記事のせいか、なんかどんどんいろいろな人が使い始めているようで、DBの書き込み
> 速度が
> 間に合わず、妙なデータが書き込まれてしまっていました。
> とりあえずパッチをあてて修正しましたが、、、
>
> ※※※※※
> コードの書き方(と設計)が悪いかもしれませんが、DBに書き込んだデータがコミッ
> トされる
> タイミングが不安定?です。activerecordの使い方に問題があるのでしょうか?
> 具体的には下記のコードで-9999が検出されます。しかし毎回ではなく、タイミン
> グ、発生条件
> の再現性はありません。
> アドバイス等いただけるととても助かります!
> ------------
> Tabel sl_memoryにはautoinclimentの列、idがあるとします。
>
> ある連続したデータがsl_memoryに書き込まれるのですが、同時に複数が書き込むた
> め
> Owner_Nameで区別しています。
>
> //新しいデータが来たら、まず、同じOwner_Nameのデータの最後(最新)のstartid列
> を
> 取得しようとします。
> $this->db->where('Owner_Name', $req['Owner_Name']);
> //idが一番大きな行のstartidを探す。すなわち最後にinsertされた行を探
> しています。
> $this->db->orderby('id','desc');
> $res = $this->db_get('sl_memory',1,0);
> $row = $res->row();
> $startid = $row->startid;
> // ここで0ということはtableのデフォルト値のまま。すなわち後半のupdate(※1)
> が動作していない?判別用に-9999をセット
> if ($startid == 0) $startid = -9999;
> //最後のレコードidを保存
> $id = $row->id;
> //最新レコードを追加
> $this->db->insert('sl_memory', $req);
> //追加レコードしたレコードを検索してidを得る。複数のスレッドでinsertの可能性
> があるので、再検索しないとidが
> 正しくない。条件はstartid==0、すなわちinsertされた後、startidがセットされて
> いないものになる。
> $this->db->where('Owner_Name', $req['Owner_Name']);
> $this->db->where('startid',0);
> $res = $this->db_get('sl_memory',1,0);
> $row = $res->row();
> //追加したレコードのidを保存
> $nextid = $row->id;
>
> //一回前のレコードから現レコードヘのポインタを更新
> $this->db->set('nextid', $nextid);
> $this->db->where('id',$id);
> $this->db->update('sl_memory');
>
> //追加したレコードのstartidを更新
> //正しく更新できていればstartidに0が入る可能性はない。※1
> $this->db->set('startid', $startid);
> $this->db->where('id',$nextid);
> $this->db->update('sl_memory');
>
>
>
>> -----Original Message-----
>> From: codei****@lists*****
>> [mailto:codei****@lists*****] On
>> Behalf Of 木下 敏夫
>> Sent: Wednesday, March 19, 2008 1:08 AM
>> To: codei****@lists*****
>> Subject: Re: [Codeigniter-users] CIで構築したサイトでコンペ受賞しました
>>
>> 木下です。
>>
>> http://mementa.net/mementa/contact/
>> もちょっとおかしい見たいです。
>>
>> レスポンスは凄く良いですね。
>>
>>
>> Kenichi Ando さんは書きました:
>>
>>> 安藤です。
>>>
>>> 加畑さん、こんにちは。
>>> 受賞おめでとうございます。すばらしいサイトですね!
>>> 事例掲載の許可を頂きたいです。
>>>
>>> さっそくサイトに接続したところ、
>>> http://mementa.net
>>> エラーが出ているようです。(2008/0319 0:59現在)
>>>
>>> ご報告までに。
>>>
>>>
>>> 08/03/17 に kabayan<kabay****@adlib*****> さんは書きました:
>>>
>>>> 加畑@adlibです。
>>>>
>>>> 先日行われた日経アーキテクチャ主催のデザインコンペで
>>>> 佳作を受賞しました。
>>>>
>>>>
>>>>
>> http://trendy.nikkeibp.co.jp/article/special/20080313/1008076/?ST=as_
>>
>>>> slis
>>>> (次週にはもちっと詳しい解説が載るはずです)
>>>>
>>>> 応募したのはセカンドライフの人(アバター)の動きをリアルタイムで記録
>>>>
> し、それ
>
>>>> を再生する
>>>> ことができるメメンタというサービスを使ったものです。
>>>> http://mementa.net
>>>> このサイトはCIでデザインとセカンドライフ内のスクリプトを除き、約1週間
>>>>
> で製作
>
>>>> しました。
>>>> (デザインは結構苦労したんですけど^o^;)
>>>>
>>>> 私は元々はASP(.net)とかがメインだったので、PHP系で1から作るのは初めて
>>>>
> だった
>
>>>> のですが
>>>> CIのおかげでなんとかものになりました。
>>>>
>>>> どなたにお礼すべきかわかりませんが、もし事例の隅が空いていてフィラーに
>>>>
> でも
>
>>>> 使っていただければ
>>>> ちょっと恩返しになるかなと思います。
>>>>
>>>> 今後も改造していくつもり&わかる範囲でノウハウだしをするつもりなのでよ
>>>>
> ろしく
>
>>>> お願いします。
>>>>
>>>> _______________________________________________
>>>> Codeigniter-users mailing list
>>>> Codei****@lists*****
>>>> http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users
>>>>
>>>>
>>> _______________________________________________
>>> Codeigniter-users mailing list
>>> Codei****@lists*****
>>> http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users
>>>
>>>
>>>
>> --
>> 木下敏夫
>> mailto:kino****@tktoo*****
>> http://www.tktools.jp/
>> http://okusama-shop.com/
>> http://www.oidc.jp/bmb/index.php?topic=-m-D14
>> --------------------------------------------------------------
>> -----------
>> ビジネスマッチングブログ・キックオフセミナーにパネリストとして参加します。
>> http://www.oidc.jp/bmb/article.php/20080207143305526
>> --------------------------------------------------------------
>> -----------
>>
>> _______________________________________________
>> Codeigniter-users mailing list
>> Codei****@lists*****
>> http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users
>>
>>
>
> _______________________________________________
> Codeigniter-users mailing list
> Codei****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users
>