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
>