[過去ログ] SQLite Part.10 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
1
(7): 2012/08/16(木)21:54 ID:??? AAS
組み込み型データベース SQLite について語るスレッドです。

SQLite
http://www.sqlite.org/

・C/C++ API
 http://www.sqlite.org/c3ref/intro.html

・Syntax
 http://www.sqlite.org/lang.html

・Limits
 http://www.sqlite.org/limits.html
省2
2: 2012/08/16(木)21:54 ID:??? AAS
【過去スレッド】

・sqliteを語るスレ
 2chスレ:db
・SQLite 2
 2chスレ:db
・SQLite 3
 2chスレ:db
・SQLite 4
 2chスレ:db
・SQLite 5
省9
3: 2012/08/16(木)21:55 ID:??? AAS
【ツール】
 http://www.sqlite.org/cvstrac/wiki?p=ManagementTools

・TkSQLite
 http://reddog.s35.xrea.com/wiki/TkSQLite.html
・PupSQLite
 http://www.eonet.ne.jp/~pup/software.html
・SQLite Manager (Firefox add-on)
 http://code.google.com/p/sqlite-manager/
 https://addons.mozilla.org/ja/firefox/addon/5817

【ラッパ】
省11
4: 2012/08/16(木)21:56 ID:??? AAS
【ネタ】

・OS X ハッキング! SQLiteが広げるこれからのアプリケーション
 http://journal.mycom.co.jp/column/osx/236/

・SQLite Java Wrapperのコンパイル
 http://syo.cocolog-nifty.com/freely/2007/10/sqlite_java_wra_f79c.html

・生まれ変わるPHP - Zend Engine 2、SQLiteの実力は?
 http://news.mynavi.jp/special/2004/php5/007.html

・SQLite性能評価その1
 http://www.sutosoft.com/room/archives/000450.html
省14
5: 2012/08/16(木)21:56 ID:??? AAS
【書籍】

・SQLite入門 第2版 (西沢直木 著)
 http://www.amazon.co.jp/dp/479811944X
 入門用にはとりあえずこの一冊?

・新標準SQLite
 http://www.amazon.co.jp/dp/4797354739

・SQLite ポケットリファレンス
 http://www.amazon.co.jp/dp/4774143944

・Pocket詳解 SQL辞典 (堀江美彦 著)
 http://www.amazon.co.jp/dp/4798018619
省17
6: 2012/08/16(木)21:56 ID:??? AAS
テンプレここまで。
SQLiteスレもついにスレ番2桁目に突入です。
7
(5): 2012/08/17(金)00:25 ID:SazVH8Xb(1/2) AAS
SQLiteでの同時処理について質問です。
あるテーブルで値を+1する処理を行っています。

UPDATE sample_table SET count=count+1 WHERE num = $num

処理が呼ばれるとsample_tableのcountが1増えます。
ですがこが同時に100回行っても100増えません。
ゆっくりと100回行うと100増えます。

おそらく前の処理をしている最終に読み取った値に+1をしているのでうまく増えていないということだと思うんですがどのようにすれば行った回数分countを増やせるでしょうか。
8
(1): 2012/08/17(金)18:35 ID:??? AAS
>>7
前の処理のロック区間中にUPDATEしようとしてエラーになった分が更新されていない、とか
更新される前のcountの値を読み込んでインクリメントしたので前と同じ値を上書きしてしまっている、とか

いくつか原因は考えられるけど、情報が足りないので答えられないです。
・そもそも「同時処理」とは何を想定している?
・「同時に100回行う」ための手段(orコード)は?(SQL文だけ貼られても何がしたいのか分からない)
・「ゆっくり」とは何をどうしたの?
9
(2): 7 2012/08/17(金)20:59 ID:5J6i+lyv(1) AAS
>>8
回答ありがとうございます。

こちらのcount+1を行うものはWEBサイトにおいておりまして、特定のアクセスが行われると+1されるというものになります。
そのため不特定多数の場所からアクセスがある状況です。
アクセスカウンターのようなものをSQLite3で行っておりアクセス毎に+1されます。

同時処理についてですが、こちらはWEB上から処理を行うようになっております。
そのため複数の箇所から同時に多数の要求があった場合に処理が複数走ることを指します。

100回行うコードというのはありません。
テストのためにApacheのabというツールで10アクセス10スレッドで100のアクセスを行いました。
その際に+100ほど数値が増えないといけないのですが、実際には30程度しか増えておりませんでした。
省5
10
(1): 2012/08/17(金)22:09 ID:??? AAS
ただの排他漏れだろ
アクセスカウンタ作ったことないの?
11: 2012/08/17(金)22:25 ID:??? AAS
>>9
質問する時はコードも貼ること。
もちろん、100回のクエリが全部成功してるかどうかは確認したんだよね?
12
(1): 7 2012/08/17(金)23:00 ID:SazVH8Xb(2/2) AAS
>>9
アクセスカウンタは作ったことあります
排他制御も知ってはおりますが、SQLiteではどのように排他制御を行うのでしょうか?

>>10
100回のアクセスが成功していることは確認しています。
アクセスのテストについては申し訳ないですがツールを使用しているためコードがありません。
カウントの部分については

$connect = count_db();
$countup = $connect ->prepare("UPDATE sample_table SET count=count+1 WHERE num = $num");
$countup ->execute();
省1
13
(1): 2012/08/18(土)01:21 ID:??? AAS
>>12
SQLiteはそこら辺のDBMSと同じで別に何もしなくても「排他制御」はされるよ。
「100回のアクセス」とやらが成功しているのをどうやって確認したのか知らないけど、どう考えてもSQLクエリの実行が失敗してる。

見たところPHP+PDOって感じだけど(質問する時は言語名くらい書くこと)、count_db()が何だか分からないし、
prepareなのにプレースホルダ使ってないし、クエリの実行結果が成功かどうか確認しているようにも見えないし、
とりあえずPHPとPDOとデータベースを先に勉強した方が良いと思うよ。

あと、テーブル構造とか変数が何だか分からないから、クエリ自体があってるのかすら確認できないけど、まあそれはいいや。
14
(1): 7 2012/08/18(土)01:37 ID:ZAlPZ/Vl(1/2) AAS
>>13
アクセスの成功に関しては負荷ツール側で全てのリクエストがHTTPステータス200で終了していることで確認しました。
ですのでSQLクエリの実行が失敗していると見てよいのかの判断がついておりませんでした。

排他制御は行われているとの事なのでカウントがプラスされていない時点でクエリが正常に実行されていないと見るべきでした。
申し訳ありません。

count_db()については
function count_db()
{
$connect = new PDO("sqlite:./sample_table.sql3");
return $connect ;
省13
15
(1): 2012/08/18(土)02:45 ID:??? AAS
>>14
ページアドレスがnum…。まあいいけど。

データベースにしてもPDO(と言うかPHP)にしても入門書は腐るほど出版されてるから、
とりあえず適当なのを買ってきて読めば一通りのことは出来るようになると思う。

あと、HTTPの仕組みとかも勉強した方がいいかもね。
SQLクエリの実行結果は [DBMS] → [PHP]
HTTPステータスは [PHP(と言うかWEBサーバ)]→[WEBブラウザ]

ちなみに、今回のは排他制御がかかってる時に同時にUPDATEしようとしてエラーになったらどうするか、の考慮が漏れてるのが問題。
おそらくロック待ちのタイムアウト値が設定されていないので、100回のうちエラーになった分はスルーされてる。

これだけレスしておいてあれだけど、微妙にスレ違い(今のところあんまりSQLite関係ない)だし、ヒントも書いたので、
省1
16: 7 2012/08/18(土)10:12 ID:ZAlPZ/Vl(2/2) AAS
>>15
ありがとうございます。
排他中の制御に関してはまったく考慮しておりませんでした。
前の処理が終わるまで順番に待っているだろう
くらいの認識でした。

amazonあたりで評価の高そうな本をいくつか見てみたいと思います。
ありがとうございました。
17: 2012/08/19(日)12:50 ID:??? AAS
外部結合しているテーブルの行をを一度に消す方法はないのでしょうか?
delete TBL_A from TBL_A left join TBL_B on TBL_A.keyid = TBL_B.id where TBL_B.keyid = 4;

delete from TBL_A from TBL_A left join TBL_B on TBL_A.keyid = TBL_B.id where TBL_B.keyid = 4;
など紹介されているものを色々試してみたのですが、どうしてもsyntaxerrorがdelete直後の単語ででてしまいます。
テーブルごとに削除するしかないのでしょうか…?
18
(1): 2012/08/19(日)12:58 ID:??? AAS
DELETEはFROM一つしか書けないよ。JOINも当然書けない。
メインのテーブルのレコードを削除したとき必ず従属テーブルのレコードを削除するならトリガーに書きなよ。
19: 2012/08/19(日)13:10 ID:??? AAS
>>18
回答ありがとうございました。
トリガー使ったことないのですが、挑戦してみます。
20: 2012/09/01(土)21:03 ID:??? AAS
ばか
1-
あと 982 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.261s*