PHP + MySQL
■ このスレッドは過去ログ倉庫に格納されています
0001ECY
NGNG0002echo
NGNG0003初期不良
NGNG両方インストール済んでこれから試そうってところなんだけど。
0004初期不良
NGNG試してみたんですけど、重くて掲示板には向いてないと思ったので...
0005名無しさん@お腹いっぱい。
NGNG厨房くさくてかなわん。
0006名無しさん@お腹いっぱい。
NGNG0007union使えないの?
NGNG0008名無しさん
NGNG女の子と話していて、他の女の話をすると異常に機嫌が悪くなることがある。
「なんで他の女の話を持ち出すの?」とかって。
それと同じ感じで、PostgreSQL の話をしている時に、Oracle などとの比較を
持ち出されると過剰反応する女々しい人が多いので気をつけましょう。
0009名無しさん@お腹いっぱい。
NGNGDBの話をしているのに、なんで女の話を持ち出すの?
0011名無しさん@お腹いっぱい。
NGNG陰部陰部陰部陰部陰部陰部●部陰部陰部陰部陰部陰部陰部
陰部陰部陰部陰部陰部陰部●部陰部陰部陰部陰部陰部陰部
陰部陰●陰部陰部陰部陰部●部陰部陰部陰部陰●陰部陰部
陰部陰部●部陰部陰●●●●●●●陰部陰部●部陰部陰部
陰部陰部陰●陰●●部陰部●部陰部●●陰●陰部陰部陰部
陰部陰部陰部●部陰部陰部●部陰部陰●陰部陰部陰部陰部
陰部陰部陰●陰部陰部陰部●部陰部陰部●部陰部陰部陰部
陰部陰部陰●陰部陰部●●●●●部陰部陰●陰部陰部陰部
陰部陰部●部陰部陰●陰部●部陰●陰部陰部●部陰部陰部
陰部陰部●部陰部●部陰部●部陰部●部陰部●部陰部陰部
陰部陰部●部陰●陰部陰部●部陰部陰●陰部●部陰部陰部
陰部陰●陰部陰●陰部陰部●部陰部陰●陰部陰●●●陰部
陰●●●陰部陰●陰部陰部●部陰部陰●陰部陰●陰部陰部
陰部陰部●部陰●陰部陰部●部陰部陰●部陰●部陰部陰部
陰部陰部●部陰部●部陰部●部陰部●陰部陰●部陰部陰部
陰部陰部●部陰部陰●陰部●部陰●部陰部陰●部陰部陰部
陰部陰部陰●陰部陰部●●●●●陰部陰部●陰部陰部陰部
陰部陰部陰●陰部陰部陰部●部陰部陰部陰●陰部陰部陰部
陰部陰部陰部●部陰部陰部●部陰部陰部●部陰部陰部陰部
陰部陰部陰●陰●●部陰部●部陰部●●陰●陰部陰部陰部
陰部陰部●部陰部陰●●●●●●●陰部陰部●部陰部陰部
陰部陰●陰部陰部陰部陰部●部陰部陰部陰部陰●陰部陰部
陰部陰部陰部陰部陰部陰部●部陰部陰部陰部陰部陰部陰部
陰部陰部陰部陰部陰部陰部●部陰部陰部陰部陰部陰部陰部
陰部陰部陰部陰部陰部陰部陰部陰部陰部陰部陰部陰部陰部
0012名無しさん@お腹いっぱい。
NGNGhttp://www.mysql.gr.jp/
0013名無しさん@お蝮いっぱい。
NGNG買ったけど、なんかいまひとつでした。
「詳しくはマニュアル参照しろ」ばかりなんだもん。
だから今はマニュアル見てます。
0014名無しさん
NGNG多くのデータを検索したい時にはベストの選択だが、多くのユーザーが
一度に登録を行うような場合は、他のRDBMSが向いてる」とありました。
2chのような掲示板をMySQLで作るのは向いてないのでしょうか?
0016名無しさん
NGNG0017名無しさん@お腹いっぱい。
NGNGあとは考えて。
0018名無しさん@お腹いっぱい。
NGNG変数のサイズをチェックするところでこけるんだけど、
対処法知らない?
ちなみに、同じ現象がIRIXとFreeBSDで発生した。
0019初期不良
NGNGhttp://www.asakawa.ne.jp/doc/php/ja/sjis/ref.mysql.html
にも mysql_dbname() が載ってないの?
無いわけないだろうと思って検索かけてみて見つけたけど...
mysql_db_name() だったりして、まあどっちでも動くわけだけど
この辺ってどうなってるの?
0020電動ナナシ
NGNG>>19
本家のページに出てないから仕方が無いんじゃない?
http://www.php.net/manual/en/ref.mysql.php
0021名無しさん@お腹いっぱい。
NGNGわかりやすい一例ね。普通はさ
1.ロック
2.更新
3.アンロック
とやるわけでしょ。MySQLの場合は、このロックしてから放すまでの時間を最
小限に抑えないとダメ。あと、極力ロックしない努力も必要。
とりあえずロックしておけって方針だと、簡単に使い物にならなくなるよ
MySQLにはlast_insert_idとかreplaceとか、あるいはget_lockとかロック
しないための機能がいっぱいあるので、考えよう
002216
NGNGこれまで明示的?なロックは使ったことがないです。
持ってる本には書いてなかったし。
last_insert_id、replace、get_lock を調べてみます。
002321
NGNGおーい。だめじゃーん
MySQLはフツーのデータベースと違って明示的にロックしないと何もロックして
くれないよー
俺がさっき書いたget_lockとかは中級以上の知識だけれど、基本はちゃんと抑え
ないとダメ
基本はあくまで、更新されちゃ困るレコードはロックすることだよ。
MySQLの実際のロックはlock tablesで行うので、こいつを勉強しよう。
get_lockとは名前は似てても全然違うので注意。
それで、ロック中の処理をできるだけ短くするように心がけよう。よほど
アクセスの多い場合でなければ、これで対応できるはず。
002416
NGNGこれまで、insert や update などがそれほどないものしか作った
ことがなかったので、偶然うまくいってただけだったようですね。
このままいってたら今後やばかったです。
勉強になりました。
0025名無しさん@お腹いっぱい。
NGNG>俺がさっき書いたget_lockとかは中級以上の知識だけれど、基本はちゃんと抑え
>ないとダメ
別に煽るわけではないが、
ロックの知識なんて、基礎中の基礎だと思うが...
0026初期不良
NGNGこれが問題なのか?俺も MySQL 使い始めなり
0027初期不良
NGNGhttp://www.softagency.co.jp/mysql/Manual/html/manual.ja_Performance.html#Table_locking
002816
NGNG本に載ってたサンプルとかしか見てなかったわけです。
で、ロックなんて書いてなかったので、MySQLがロックしてくれるんだ
と勝手に思ってました。
とりあえず、lock tables xxx write;と
unlock tables;入れて確認してます。
間にsleep()してテストしてますが、いいんですよね。
私もマニュアルちゃんと読もうかと思います。
ためになる煽りは歓迎です。よろしゅう。
002921
NGNGそうなんだけれど、それを知らずに作っちまう奴もいる。俺が前に
あるサイトの運用を引き継いだときに、まるでロックのこと意識し
てないつくりになってて、データの不整合がおきまくりで、空いた
口が塞がらなかった。
>>26
問題としては、テーブルごとロックしか出来ないっていうのが第一
の問題。一人のユーザしか更新できないでしょ。
第二の問題がタイムアウトできないことだね。
mysql_pconnect()で接続して、ロックしている間に落ちるよう
なプログラムを書くとロックしっぱなし・・・これはPHP3の話だ
けどね。PHP4は使ってないのでわかんない
0030電動ナナシ
NGNGロックがタイムアウトしないのか・・・そりゃひどいねえ。
マニュアル読むと、
・接続が閉じられるか、当該プロセスが Lock を発行しない限り Lock は有効
・他のプロセスの Lock 要求はタイムアウトなしで待たされる
みたいだね。ううむ。
プログラムが落ちて httpd も一緒に落ちていれば問題ないけど、そうじゃない
場合(エラーによる異常終了)とかは問題だよねえ。
当面の回避策としては、
・pConnect は使わない
・適当な(アプリケーションから使わない)テーブルをいくつか用意して、
スクリプトの先頭で lock/unlock する(そうすれば直前のロックが解除される)
# httpd のプロセス数だけテーブルを用意して、互いに lock するテーブルが
重ならないようにランダムに割り当てる
という感じになるのかな。
0031名無しさん@お腹いっぱい。
NGNGただ、こいつは別にデータそのものをロックするわけじゃないという曲者
「こういうデータを更新するときには、こういう文字列でget_lock()を
かける」とかって、明確なルールを作る。
頻繁にかかる更新はget_lock()で、そうでない更新はlock tablesでなん
ていうのも面白いと思う
0032名無しさん
NGNG例えばどのようなものがありますか?
サイトの例などあります?
0033名無しさん@お腹いっぱい。
NGNGこれの本当の意味がわかる奴は少数だと思うけども、
わからない奴は1週間くらいじっくり考えてみな。
それでもわからない奴は、オラクル使った方がいいよ。金かかるけど。
0034名無しさん@お腹いっぱい。
NGNG0035名無しさん@お腹いっぱい。
NGNG0036名無しさんX
NGNGこれでぼくも中級?
0037名無しさん@お腹いっぱい。
NGNGWebに限った話をすると、頻繁にupdateと言うのは少ないかもね
例えば、会員サイトでの会員情報の更新とかはどう?
規模が大きければ、かなりの頻度だと思うが・・・
>>34
マニュアルにヒントっぽいことが書いてあったと思った
0038名無しさん@お腹いっぱい。
NGNG0039電動ナナシ
NGNGこれのこと?
http://www.mysql.gr.jp/jpdoc/3.23/manual.ja_Compatibility.html#Commit-rollback
今の MySQL には Transaction 機能あるから、ロックにこだわる必要性はあんまり
ないと思うんだけど、Transaction に何か問題があるの?
>>38
Transaction 機能 (begin/commit/rollback) 使えばよい。
0040名無しさん@お腹いっぱい。
NGNGMySQLてトランザクションを有効にするとパフォーマンスが落ちるって
小耳に挟んだけど、どうなんだろ。
0041名無しさん@お腹いっぱい。
NGNGトランザクションなしで作れって言われたら怖いなぁ。
あと、トランザクションがあってもロック関係の知識はいるでしょ。
DBMSによってまちまちだと思うけど。
0042名無しさん@お腹いっぱい。
NGNG0043名無しさん@お腹いっぱい。
NGNG0044anonymous
NGNG0045名無しさん@お腹いっぱい。
NGNGというか、もともと参照が中心だからテーブルロックしか
ないんじゃなかった?PostgreSQLは標準で行レベルロック
だから、頻繁に参照がある仕組みとかだと、意外と快適。
MySQLも最近トランザクションが取り入れられたみたいだけど、
やっぱり実績が無いのが不安だよね。
0046名無しさん@お腹いっぱい。
NGNGBegin Tran した時点のデータのみを参照してくれるって機能。
参照の一貫性というのかどうかは知らないのだが。。。
0047電動ナナシ
NGNGDirtyRead (Commit 前のデータが見えてしまう) や、Read Commited
(Commit 後のデータは見えるが、それ以前のは見えない) や、Serializable
(繰り返し Query をかけて同じ結果が得られる) といったやつだよね。
隔離度 (Degree of Isolation) というみたい。
『データベースチューニング 256 の鉄則・下巻』(日経 BP) p.335
http://bpstore.nikkeibp.co.jp/item/main/148222805860.html
『トランザクション処理システム入門』(日経 BP)
http://bpstore.nikkeibp.co.jp/item/main/148222802680.html
が参考になると思う。
0048電動ナナシ
NGNGMySQL の機能ってよりも、MySQL が依存している SleepyCat's Berkeley DB の
機能だよね。BerkeleyDB に Transaction 機能が入ったら MySQL で Transaction の
サポートが可能になったという表現のほうが正しいんじゃない?
http://www.sleepycat.com/docs/ref/txn/intro.html
以前 Zend か MySQL のサイトで MySQL のエンジンに Zend Engine 組み込んで
トランザクションとストアドプロシージャをサポートするってコメントを見たけど、
あれはどうなったんだろう。
0049名無しさん@お腹いっぱい。
NGNG細かい話だけれど、MySQLがBerkley DBを使うようになったのは
トランザクションを実装したかったからじゃないんだっけ?
もとからBerkley DBを使ってたわけじゃないよね?
0050名無しさん@お腹いっぱい。
NGNGええと、トランザクションを使うためにはテーブル作成のときにはBDBという形式
を選択しないといけないんだけれど、このテーブル形式っていろいろとダメなとこ
ろも多いみたい。
MyISAM(デフォルトテーブル形式)よりは遅いですとマニュアルにはっきり書いて
あるし、痛いのがvarcharとかTEXTなどのカラムにインデックスを作れないことかな?
ちなみにMyISAMでvarcharのカラムにインデックス作って検索するとめちゃめちゃ速
いよ
個人的にはMySQLを使うのならBDBを使うのはあんまり賢くないように思う。
トランザクションが欲しいのならOracleなりSybaseなりがいいのでは?
0051名無しさん@お腹いっぱい。
NGNGの結果の最後のほうの
max table row length (without blobs)
table row length with nulls (without blobs)
ってなんでしょう?
0052電動ナナシ
NGNGmax table row length ってのは、テーブルの各行(列数は任意)でサポート可能な
バイト長ってこと。例えば PostgreSQL 7.0 だと max table row length は
7949 ってなってるけど、これは例えば
CREATE TABLE hoge (aText VARCHAR(7950));
CREATE TABLE hoge (aText VARCHAR(4000), aText2 VARCHAR(3950));
というテーブルを定義して使えないということ。前者は一つのフィールドだけで
7949 バイト超えているし、後者は 2 つのフィールドを合計すると 7949 バイトを
超える。
CREATE TABLE hoge (aText TEXT);
ってのは作れるけど、いざ 7950 バイト以上のレコードを挿入しようとすると
エラーになる。
table row length with nulls ってのはよく分からん。
blob っては Binary Large Object のこと。画像とかファイルとかそういった
大きなものを想像して欲しい。通常 blob はレコード長の制限が大幅に緩和
されている。
0053名無しさん@お腹いっぱい。
NGNG0054電動ナナシ
NGNGと
CREATE TABLE (hoge TEXT);
でレコード長が変わる実装ってことなの?
それともそういう意味じゃないのかな?
分からない。鬱だし脳。かぜで朦朧とする・・・。
005546
NGNGそうそう。
電動ナナシさん、貴重な情報ありがとう。
■ このスレッドは過去ログ倉庫に格納されています