スレッド表示 | フラット表示〕 全トピック 920 件中 871 番目 次≫ ≪前

PHP+データベースについて

created: 2003-04-30 22:21 | modified: 2003-05-03 08:32 | reply: 6

[298] PHP+データベースについて

user: yagi ホームページ | created: 2003-04-30 22:21
久しぶりの書き込みです。

最近、PHP+データベース(MySQL)によるスクリプトを開発中なのですが、ロックをかけるとするとDBテーブルにロックをかけるべきか、スクリプト側でロックをかけるべきか、それともそれともどちらでもロックをかけるべきか迷っています(^^;

ロック無しの状態でDBに同時多数のプロセスがアクセスすると簡単にレコードアクセスに問題が発生することがわかりました(あるレコードに問題が発生するとテーブル全体を検索することが不可能になる)。

データベースを扱っている方でロックをどのようにしているか参考までにご回答をお願いします。
reply: 299 返信 編集 削除

[299] 処理速度計測

user: yagi ホームページ | created: 2003-04-30 22:31
自前のログとDBのアクセス速度と検索速度を比較してみたところ、ログ件数が少ない場合はどうやら自前のログのほうが処理速度がはやい様子です。例えば、

条件なしでログを一気に展開する場合→自前ログの方が速い
ある条件を満たすログを検索し、展開する場合→DBの方が速い

(一気に展開するログ件数が少ない場合は明らかにDBの方が処理速度や使い勝手がいいように思われます)

とまぁ、全部がそうと言えるわけではありませんが、いろいろ試してみたところ上記のようなことがわかりました。となると、数万件もいかないと予想されるようなログを扱うスクリプトではあえてDBを使わなくてもいいような気がしますが、みなさんはどう思いますか?
Parent: 298  reply: 300 301 返信 編集 削除

[300] 同感!

user: ゆうじ | created: 2003-05-01 23:27
実際に測定したわけではありませんが、
私も同じような実感を持っています。

全国の書店の住所録DBをテキストログで
実装した知り合いがいて、これが
実用レベルの処理速度をしてました。

6000件くらいレコードを、
都道府県でディレクトリを分け、
さらに都市ごとにファイルを分割し収めてありました。

検索条件が、
主に都市を単位に抽出し並べ替え不要というものでしたので
テキストログで十分だったのだと思います。

抽出条件が複雑だったり、
抽出条件が変化に富んでいたり、
並べ替えが必要でない限りは、
大量にレコードがあってもテキストログで
実用的なものが作れると思っています。
Parent: 299  reply: 302 返信 編集 削除

[302] やはり!

user: yagi ホームページ | created: 2003-05-02 13:42
unadonさん、ゆうじさんさっそくお返事ありがとうございます。
やはり、ログ件数が巨大にならない限りはあえてDBを用いる必要性はないですね(^^)

>ゆうじさん

5000件ぐらいであれば、性能の低い(3年ぐらい前の)PCでも1秒以内で処理できることは確認しました。しかし、なぜPHP+DBにこだわる(こだわるというか、よく取り上げられている)人が多いのでしょうか?

>unadonさん

ロックについてですが、MySQLでselectやinsertでロックされるのですか?それだったら、プログラムがしやすいですけど、そうするとなぜDBにテーブルのロック用コマンドがあるのでしょうか。う?ん、不思議。。。
私もDBをはじめて日が浅いのでわからないことだらけですね(^^;
今のところ、PHPスクリプト側でmkdirを使ってロックをしています。
Parent: 300  reply: 303 返信 編集 削除

[303] Re.やはり!

user: unadon ホームページ | created: 2003-05-02 19:45
実際,どのくらい違うか興味が沸いたので同じロジックでテキスト版を作って見ました.(連休ならでは(^^;

テキスト版:http://u-u-club.ddo.jp/~unadon/treebbs/treebbs.php
実行時間:0.00554096698761

DB版:http://u-u-club.ddo.jp/~unadon/index.php?mode=bbs(PostgreSQL)
実行時間:0.0167719125748


DB版は左側のHTMLコンバートのオーバーヘッドがありますが,それでも速度差あります.
テキスト版のソートはusort(関数を作った)

> DBにテーブルのロック用コマンドがあるのでしょうか
ちょっと基本的に誤解があるようですが・・・
DBのロックは主にデーターの参照整合性を保つもので,ファイルロックと全く異質です.
Parent: 302  reply: 304 返信 編集 削除

[304] わざわざどうも(^^)

user: yagi ホームページ | created: 2003-05-03 08:32
やはり、DBのほうが展開速度が遅いですね。
以前、PerlのバークレーDBでテストしたときも
展開速度(検索せずに一気に展開)が異常なまでに遅かったのを覚えています。

>DBのロックは主にデーターの参照整合性を保つもので,ファイルロックと全く異質です

そうなのですか?なるほど…
MySQL関連の書籍では、

・指定のテーブルにロックをかける
・ロックにはreadとwriteがあり、writeロックをかけたプロセスのみがテーブルに対して更新・削除処理が行える…云々

とあったものですから、てっきりファイルロックと同質のものだと思ってました(^^;
Parent: 303  返信 編集 削除

[301] 展開速度

user: unadon ホームページ | created: 2003-05-01 23:51
>自前のログとDBのアクセス速度と検索速度を比較してみたところ、
これはどちらにしてもフラットファイルの方が断然早いです.DBほど無駄なコストありませんし.

> ある条件を満たすログを検索し、展開する場合→DBの方が速い
これも検索の実装方法によってはフラットファイルが高速です.(オンメモリで検索できる)
フラットファイルは「排他制御」の問題があって扱いが難しいと思っています.

「ロック」については,データーベースは最初から「トランザクション隔離」というので
SELECTでロック,INSERTでロックなどがあってあまり考える必要ないですね.
さらにロックするならBIGIN?ENDでトランザクション処理でしょうか.ロールバックできますし.
まぁ掲示板に応用する程度では必要ないと思いますけど.

MySQLはあまり詳しくない(データベースそのものにも(^^;;)ですが,このトランザクションをサポートしていないようなので
SELECTでロックされているのかどうか怪しいですが...
Parent: 299  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 871 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑