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 >