kabayan
kabay****@adlib*****
2008年 3月 19日 (水) 04:17:37 JST
加畑です。 はずかしーー!レポートありがとうございます。 記事のせいか、なんかどんどんいろいろな人が使い始めているようで、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 >