乙です
おもちゃとして楽しむのがベスト。
どんどん遊びましょう。
>>8 こんなのあったのか。とりあえず買った。
技術書の英語なんて日本語と大差ないし。
SQLiteに解説書なんて必要ないだろ。
SQLiteのSQLで改行コードの置換ってできないんですか?
また口だけ神様か・・・
14 :
NAME IS NULL:2011/02/28(月) 13:43:30.75 ID:3radngHB
>>9 SQLiteなんかの解説書読んで何を学びたいの?
何か学べてるの?
日本語の解説書は、自分では読まず、布教用に使う。
せめてストアドがないと布教には使えません(><
節穴か?
誤爆すまん
>>16 自分では読む価値も無いって思ってる物を人に押し付けるなよw
ま、日本語ドキュメントが無いからな…とかいう軟弱は多いな
Decimalがない上に開発者が「他使えば」って言う環境じゃ不興には使えません(><
ま、日本語ドキュメントが無いからな
Decimalが必要な用途でSQLite使っちゃ駄目だろうw
弟子丸 忍忍でござるよ
SQLite.NETを入れてデザイナで外部キー制約を付けても、一向に反映されない
んですが、もしかしてSQLiteに外部キー制約が実装されていない?
>>26 3.6.19以降なら
PRAGMA foreign_keys = ON;
で有効になる。
SQLiteって同時にDBアクセスしたりした時の対応とかできないから昔のアクセスカウンターみたいに壊れることあるよ
って同僚から言われたんだがそうなの?
いくら軽量だからっていまどきのDBでそんな初歩的なことをしてないものはないと思うんだけど。
>>29 >SQLiteって同時にDBアクセスしたりした時の対応とかできないから昔のアクセスカウンターみたいに壊れることあるよ
>って同僚から言われたんだがそうなの?
んなわけない
31 :
29:2011/03/10(木) 00:10:53.57 ID:???
だよな
MySQLみたいなのはいいけど、SQLiteは軽量化するために機能を削ってるから複数の人が同時に書き込んだりするとダメになるとあまりにも真剣に言うもんだからよ。
何かと勘違いしてるのか、それとも昔の古いバージョンはそうだったとかだろうか。
アクセスカウンターが壊れるってどんな現象なんだろうか。
>>29 前スレにロック周りのことがガシガシ書かれているから、読んでみ。
>>32 今はないと思うけどカウンターの動きとして
1.ファイル開く
2.中の数字を拾う
3.数字に+1する
4.ファイルを綺麗にする
5.+1した数字を書き込む
って動作になるけど、ファイルのロックとかがない場合に「4」のときに他の人がファイルを開くと
何もないファイルを開いて、それに+1することになるわけ。
そうすっと0+1でアクセス数が1になってしまうってこと。
壊れるってのとはちょっと違うけどロックがないとタイミングによっては意図しないデータになってしまうというオチ。
ロックの無いファイルシステムなんてあるの?
読み取りタイミングでカウント漏れなら普通にあるけど
>>35 昔のカウンターはflock使ってないのが結構あったんだよ、KENTのとかね。Windows 98でflockが使えなかったのが原因だと思うけど。
39 :
NAME IS NULL:2011/03/11(金) 02:58:55.15 ID:h7V2p/UX
>>17 ストアドっていうのは、まとまった処理をサーバー側で実行させるので
いちいちクライアントから実行するよりも高パフォーマンスって話なんだが。
DBエンジンが同一プロセスで動作するSQLiteにストアドなんていらんよ。
プリペアドステートメントを必要な数だけ用意しておいて、
まとめて実行すればいいだけ。
>>22 適当にBLOBか何かでDecimalの内部データを格納しておいて、
変換関数を定義すればいいだけの話だろ。
検索やインデックスに使いたければ、カスタムコレーションシーケンスを
定義すればいい。
>>41 馬鹿ではなく最近の若者は布教とかお布施とか大好きみたいだぞ
今もファイルロック周りはあやしいよね
あやしいのはお前の頭だろうw
3の初期のころはひどいバグがいっぱいあったが
最近はかなりちゃんとしてる
なんかたまにロックしっぱなしになるな
どんなときにそうなるのか
検証していただくと
大変感謝されると思います。
検証用に insertしてselectしてdeleteする
だけのプログラムを書いて、100万回起動してみた。
シングルスレッド、シングルプロセスなのに、確かに
database is locked が発生するね・・・
前のプロセスが完全に終了する前に次のプロセスを起動してるとかじゃないよね
そのCソスを出して欲しいね
ソースコードと環境を示さない「検証」は大抵あてにならない
55 :
NAME IS NULL:2011/03/25(金) 21:46:03.23 ID:6VhxQ0vt
なんでこのスレって、ヒステリックなやつばかりなんだ??
ソースとテスト環境がわからんと何も言えんわな
>>55 「お手軽に扱える」といううたい文句に釣られたゴミクズの吹きだまりだから。
ヒューリスティック
ちょっとしたものならCSVで扱ってますが、DBとかを使う場合はみなさんはどういったことを基準に使いますか?
例えば想定ユーザーが1000を超える場合とか、アクセスが1000超える場合とかあれば教えてください。
むしろ、よっぽどの理由がない限りCSVなんて使いません。
基本的にすべてDBを使ってます。
>>59 検索をするかしないか、で判断します。
検索をしないならCSVファイルのままでいきます。
まぁ 速さ云々言わないなら、DBでいいのでわ?
「基本的にDBのが遅い」のか? なんか使い方次第なイメージがあるんだが。
工数も入れての事です。
ってCSVのハンドルも結構ややこしいか。
でもライブラリ作ってるだろうし。
>>59 データ量にかかわらずSQLite使った方が工数的にもパフォーマンス的にも上だから、
何かしらの要件がない限りそもそもCSV(やTSV)を使おうとなど思わない。
アクセス数がどうとかユーザー数がどうとかじゃない。
何かしらの要件、言い換えればCSVのメリットとは、例えば
マスターデータをエンドユーザがメンテする際にTkSQLiteとかの使い方をレクチャーしたくないからExcelで編集させたい場合とか、
自分でもテキストエディタでいじれた方がメンテが楽な場合とか。
>>61 更新するかというのも大きな要素だと思うね。
管理者のみが更新するマスターデータを読み込むだけならCSVでも全然面倒じゃない(CSVとの工数差が僅かしかない)けど、
更新も伴うと排他処理考えなきゃいけなくなるからSQLite使った方が断然楽になる。
例えば2chの板一覧みたいなデータはCSVやTSVでもいいけど、スレの書き込みの内容を保存するDATみたいなデータをCSVにする気は起きない。
他に考えられる、CSV等を選ぶシーンとしては、可搬性が重視される場合かな。
どの鯖でもSQLite使えるわけじゃないから。
ちょっと古い話だけどKENTのPerl CGIがレガシーなコードで非常に非効率なのにもかかわらず人気を得た理由の一つに、環境を選ばないということが挙げられるだろう。
「Perlが動く環境ならどこでも使える」シンプルさが受けたんだろう。あれがもしSQLiteを使ってたとしたらそこまでの人気は得られなかったはず。
tDiaryが非効率なテキストベースのデータストアを使い続けてる理由も「Rubyさえ動けば使えます」ということがウリの一つだからだろうね。
そういう意図のないスクラッチなアプリ書くならわざわざCSV選ぶ意味はない。
そういう意味では、標準ライブラリにSQLiteが組み込まれているPython最強
しかしSQLiteが組み込まれているのは2.5以降なのに、世の中は2.4以下のサーバが多かった
読み込みだけならCSVでもいいけど
書き込みはいやだなぁ
CSVより固定長の方がまだマシ
csvにする位ならtsvにするな
CSVとTSVって比べる意味が無い気がするんだが……せいぜいWindowsで規定されてるかどうかくらい?
タブが使えなくて困る場面は相対的に少ないのでタブ禁止TSVにするとエスケープを考えなくてもよくなる
エスケープ必須でちゃんとした仕様が必要ならばRFCのあるCSVのほうがいいかもしれない
1セルにタブや改行が含まれることがないならTSVがいいね。処理もCSVより断然軽いし。
CSVってRFCになってたのか。知らなかった。
読み書きに普通にSQLが思い浮かぶ人はSQLite
そうでない人はCSVになるんだと思う。
後者の人とは一緒に仕事したくないな…
SQLが現実的に使える限り、絶対にCSVは使わないでFA
>>76 SQLにこだわる理由は?
noSQLでいけるならそっちがいいし
ただのログならCSVでいいよね
ログの出力形式にCSVはないわー。
TSVならわかるけどね。
TSVやSQLiteで簡単に済む問題をわざわざ複雑なCSVにしたがる奴ってただCSVしか知らないだけだろ。
NoSQL(笑)
実際のところ、RDBMSよりKVSが適する用途ならどんどんKVS使えばいいんだけど、
>>59や
>>77はそういう次元でものを語ってないから論外だよねっていう。
>>78 ×CSVしか知らない
○CSVをろくに知らない
まともにCSVを扱おうとするとSQLより圧倒的にめんどくさく、最後に互換性問題でブチ切れる
好きな物をつかえよ
そこでBerkleyDBですよ、となるのか。
BDBみたいなKVSを選ぶのはあり
しかしCSVはまずないな、CSVが適するシーンはかなりのレアケース
そよね。
データん中にカンマあったらどうすんのとか。
まあたまに外からのデータ受け付けるのに対応することは
あるけどな、エクセルしか使えないような人がcsv出力して持ってくるとか。
でもまあそれでもインポートまでだけどな。
CSVで今時自作想定な事に驚いた
それほどめんどくさいと言いたいのか?
>>85 RFCに則ってつくるだけでいいじゃん
ていうか、テキストなKVSってあんの?
CSV扱うのに枯れたライブラリとかあるんだっけ?
>>87 何かしらのライブラリを選べる環境で敢えてCSVを選ぶメリットをkwsk
>>92 それは仕様と呼ぶものであってメリットとは呼ばないわな。
複数の選択肢がある中で敢えてCSVを選ぶメリットをkwsk
データ永続性
各種データベース形式 20年
CSV形式 1000年
紙 10000年
テキストで見れる ってのがでかいかな
DBへインポートもしやすいし
エクスポートも結局CSVだったりするし
TSVは人に説明するのが面倒
いや、ないならないと言ってくれればそれでいいんだけど。
紙と墨は2000年の検証に耐えた
との事。
まあ話を元に戻すと、
>>59のような文脈でのデータ保存形式でCSVを選ぶのはただのアホだよねってことでFA
>>92 あほすぎるファクターを持ち込まないでくれ
ただのコーディングマシンにとってはゴールかもな
104 :
NAME IS NULL:2011/04/25(月) 00:09:22.10 ID:bEXHKNc/
複数ヒットするはずなんですが以下のコマンドを打つと最初の1個だけ結果が返ってきます。
SELECT * FROM test WHERE hogehoge = examplehoge
ヒットしたのでそれ以降は検索してないということでしょうか?
DB内のhogehogeカラムにはexamplehogeが10箇所ほどあるので10個ほど結果が返ってくるのを期待したのですが。
環境はSQL3でPHP5.3とPDOを使ってやってます。
念のため結果をvar_dumpしてみましたが1個しか入ってませんでした。
SELECT COUNT(*) FROM ...
PDOのとこで一個だけ返すメソッド使ってるとか
>>106に1票
俺も SQL の問題ではないと見る
108 :
104:2011/04/25(月) 07:57:18.87 ID:bEXHKNc/
実際のリクエストは
$sql = "SELECT * FROM test WHERE hogehoge = examplehoge";
$conn = new PDO("sqlite:/test.sql3");
$stmt = $conn->prepare($sql);
$stmt->execute();
$row = $stmt->fetch();
となってます。
複数の環境に入れる可能性があったのでPDOを初めて使っています。
試してないけど、こんな感じにすればできるはず
while ($row = $conn->fetch()) {
$result[] = $row;
}
>>108 ループさせてなきゃ最初の1行しか取れないのは当然だろう。
SQLite 関係ない。
>>111がごっちゃにしてるようにしか見えない件について
既存のテーブルのカラムの順番を入れ替えるのはどうやるんですか?
ALTER TABLE じゃねえの?
つうかスレ違い
そんなもん色々だろ
入れ替えなければいけないケースはあり得ないとでも?
だって意味ないじゃない
>>119 無計画にカラム追加したテーブルは開発がし辛いからだろ
なんで?
設計書が見づらくなる程度で、プログラム上はなんも変わらないだろ
>>121 自動生成物が見づらくなるっつってんの
もう黙って
>>121 「見づらい」だけで十分変更理由になると思うが?
つうかスレ違いっつってんだろ
見づらいくらいなら全部作りなおすだろう。
>自動生成物が見づらくなる
ワロスwww
ただ ALTER TABLE するだけでお手軽にメンテナンスしやすくなるものをなんでそんなに必死に変更させまいとするのか意味がわからない
RDBMSのスレで初心者がよくする質問の一つだからだよw
何がそんなに面白いのか分らない
バックアップ取って再createする発想もなかったか
ADO.NETだと一回作ると気楽に変更できないんだわな
ネットワークフォルダにdbファイルおいて、小規模(数人〜十数人)で使うようなの考えているんだけど、
そんなに高頻度で書き換えなければ、トランザクションで書き換えとけば無問題な感じですか?
基本的なことわかってないので、
そういうロック周りのこと解説してあるところありませんかね?
Access使えって話だけど、2007使えんし、VBAだとイロイロキツいのだす。
>>131 なんでこういうバカってSQLiteでやろうとすんだろ?
134はたぶん131と同一人物
>>133 バカに何でだめか、バカでもわかるよう教えてやれw
SQLiteのドキュメント読めよ
そういう問いにたいしてちゃんと説明しているぜ
結論から言えば更新頻度が少ないならよっぽど大規模サイトでも無い限り問題ないがな
>>137 NFSならな。
>>131はどう考えてもWinだぞ。SMBでdbファイル共有なんて
考えたくもないわ。
>>138 おんなじように、ネットワークフォルダでAccess使うのと、リスク同じくらいじゃないの?
そりゃ避けた方がより良いのは当然だけど。
>>138 大丈夫だよ
sambaもファイルロックはサポートしてます
素直にPostgreSQLなりMySQLなりSQL Serverなり使えよ…
たかがWebサービスがそんなに難しいことなのだろうかと思ってしまうんだが・・・
俺もたまにあるが、入れたくても入れられない事情でもあるんじゃないの?
自分で好きなようにサーバーや、クライアントに入れるソフトを設定できない事もある。
融通が全然きかないと。
>>137 更新頻度が少ないなんて理由にもならん理由で問題ないとか言える糞脳みそを持ってると人生楽そうで羨ましい
>>144 馬鹿には理解できないからなw
恥さらすなよww
146 :
131:2011/05/18(水) 00:50:23.23 ID:???
thxです!
どうせ 数回/分 の書き換えなので、ファイルバックアップしながら使ってみることにします。
サーバにRDBMS入れて動かす権限も能力もないのよ… バカでスマヌ
そーいや、昔は毎日のようにファイル壊れてたAccessも、最近はてんで壊れなくなったなァ…
いや、Accessが良くなった訳じゃないけど。
スレチ杉スマソ
ならACCESSでやれよ無能
>>147 要はAccessが使いにくいから、SQLiteで代用できんかって質問だろw
>>149 そう思ってたら輪をかけてSQLiteがひどいことが判明した
ってとこですよね。
なにをいってるだ
馬鹿じゃないのか?
/ : : : : : : : : : /: : : : : :` : : : : : ヽ:\
// : : : : : : : : : /\ : : \: : : : : : : : v:ハ、 な…何なのこの雰囲気…
: : : : : : : /: : / 丶: : : : : : : : : : : ハ|V{ハ このままじゃあ皆…
ii : : : : : : : : : / }: : : : : : : : : : i:i:|ivi:リ
|i : : : i : : i : :, ー=-‐':|`ヽ:i: : : : : : じじハ
|i : : : | : :ハ:i| j| jハ : : : : |: |i i|ハ, . ヘ、
ハ : : :iiハi:{ 八 '"芹示 |: : : : ハ: じj/: : : : : ヽ
V :ハ从,茫ミ、 v:ツ | : : ,/,ハ: V: : : : : : : :/}
i爪: :\ vリ ....::::::: ノ : :/r' У: : : : : ,ィ彡' ,. ヘ、
` ミ;ゝ.:: , `ー彡|_/: : : : : :/ _/ : : : : :ヽ
丶 、..:::) / |Y: : : : : :/_,ィ勿' : : : : : ,ィ刋
,. :'" > . _ . r: ´ / 丶: : : : i三彡': : : : : :ムィ'"
/ : : : : : :_:_:_:_,≪r‐一 ´ / ̄ ̄ ̄`'く: : : : : :/
ヽ : r<´ ̄ ̄i i| ,ィー…< / \: : / /
円環さんは理に還ってくれ
SQLiteファイルを分割保存して、一つのSQLとして処理する方法はないでしょうか?
158 :
NAME IS NULL:2011/06/05(日) 07:56:33.34 ID:zgB9UHdm
ほしゅ
a
160 :
NAME IS NULL:2011/06/07(火) 15:30:44.24 ID:js37uI9c
環境
MacOSX
sqlite3
apache2
perlでCGI
DBD::sqlite
というDBにコネクトしてる状態で
my $insert = "insert into space(hoge) values ('hoge');";
$dbh->do($insert);
などinsert文を実行しようとしたらエラーがでます、select文などは問題ないのですがいったい何が原因なんでしょうか?
アクセス権とか?
>>160 エラーが出ますって
エラーメッセージって出ないの?
>>162 エラーメッセージは出てないんじゃないかな、たぶん
エラーメッセージの出し方から教えてあげるといいよ
$dbh->do($insert) or die $dbh->errstr;
でerrorlogをチェックするとか、
$dbh->trace(1, 'trace.log');
でログを吐くとか。
環境
sqlite3
Android2.2
アンドロイドで作ったアプリでCSV1からDB1を作成しました。
その後、CSV1の更新ファイルであるCSV2から同じ手順でDB2を作成しました。
CSV2はCSV1のデータをすべて含んでおり、かつ、4行分登録されるデータが多いです。
ところが、作成したDB1とDB2を比べると、データ数の少ないDB1の方がDB2より9k程大きいのです。
データが欠けていないかと、DBファイルをダンプして比較しましたが、
データ自体に欠けはなく、DB2はきちんとCSVの差分だけDB1より多くデータを持っていました。
こういったことが起こる原因について、ご教示願えないでしょうか?
>>165 データ量にあわせてDBも大きくなるけど、小さくはならない
アプリがどうやってるかしらんけど、なんか本来のデータとは
別に裏でデータを追加したり削除してるから大きくなった。
167 :
NAME IS NULL:2011/06/08(水) 12:48:00.72 ID:yzo9cLWq
エラーメッセージは
[error] [client ::1] DBD::SQLite::st execute failed: unable to open database file(14) at dbdimp.c line 403 at ***.cgi
です
どういう意味でしょうか?
「***.cgiの403行目の処理の時点で指定されてるデータベースファイルが開けねーよボケ」
見たまんまなわけだが。
169 :
NAME IS NULL:2011/06/08(水) 13:03:26.83 ID:yzo9cLWq
すいません line 14 が抜けてました
[error] [client ::1] DBD::SQLite::st execute failed: unable to open database file(14) at dbdimp.c line 403 at ***.cgi line 14
170 :
NAME IS NULL:2011/06/08(水) 13:05:33.32 ID:yzo9cLWq
そして14行目です
my $insert = "insert into space(hoge) values ('hoge');";
$dbh->do($insert);
自分でデバッグする気はないようだなw
いや、そこだけ見せられてもw
DBIで宣言したsqliteのDBファイルが存在しないんじゃないの?
Google翻訳:
失敗し、実行:*** cgiの14行でdbdimp.c403行でデータベースファイル(14)を開くことができません
ちょっと教えてください
phpで@sqlite_openで作ったファイルをPupSQLiteで開こうとすると
暗号化されたファイルです。とか出て開くことができませんが、sqlitecc3jだと普通に開けます。
で、PupSQLiteでファイルを作成して、@sqlite_openで読もうとするとエラーになってしまいます。
これはPupSQLiteがあんまり良くなくて、読み込みや保存がうまくできないということでしょうか?
とりあえずそのPupSQLiteとやらの作者に聞いてみれば?
>>174 PHPは詳しくないんだが、確かPHPでのSQLite接続方法は2つあるはず
片方がSQLite2形式でもう片方がSQLite3形式
でPHP製のSQLiteManagerのソースを検索してみたらsqlite_open関数はSQLite2用らしい
SQLiteCC3JはSQLite2とSQLite3に対応していて
PupSQLiteはSQLite3のみに対応しているからそのせいだね
調べてみた所、その通りでした。
しかし、phpの関数を変えてもロリポップはsql3が使えなかったんでsql3使えるレンタルサーバー探してみます。
PupSQLiteは使い勝手がいいんで、こっちに問題がなくて良かったです。
ありがとうございます。
SQLiteを複数プロセスから扱う場合、
トランザクションの前後でflockすればいいのか?
>>178 そんな必要はない
自動的にロックされる
180 :
NAME IS NULL:2011/06/19(日) 20:53:01.04 ID:8vVW7TIm
自作アプリケーションで使用する独自ファイル内の一部分にsqliteのデータベースを
内包させることを検討しているのですが、何か方法はありませんでしょうか?
ファイルの該当部分をメモリ上に読み込み、それをsqliteのAPIから利用できる形に
することが出来れば良いと思うのですが、具体的な手段が思いつかず…。
(イメージとしては、インメモリDBとして展開/保存、メモリ上のsqliteデータをopen/close、等々...)
なお、ファイルフォーマットは、以下のようなものを考えています。
[独自ファイルヘッダ][独自ファイルデータA][SQLiteデータ][独自ファイルデータB][独自ファイルフッダ]
言語はC、OSはLinuxを考えていますが、将来的にWindowsも視野に入れるかもしれません。
RAMディスク作ってコピんのが一番楽だろ
>>180 起動時にSqliteをiin-memoryとして接続し、shema作ってやればいいんじゃないの?
183 :
180:2011/06/20(月) 19:25:23.30 ID:fmQ7dwYy
>>181 ありがとうございます。
RAMディスク上に展開したものを普通にsqlite3_open、ということでしょうか。
対象がRAMディスクが使える環境ばかりでは無いので、別の方法を検討します…。
>>182 ありがとうございます。
アプリケーションでschemaを決め打ちにしておいてインメモリDBを作成し、
ファイルから読み込んだデータをインメモリDBへ流し込む、というイメージでよろしいでしょうか?
ファイルにあるデータをインメモリDBへ展開する手段が想像できないので、
お手数ですが、もう少し詳しく説明していただけると助かります。
そんなんファイルの形式次第だからkwsk言われてもな
185 :
180:2011/06/20(月) 21:03:52.34 ID:fmQ7dwYy
言葉足らずですみません。
私の理解力不足で、
>>182氏の言っている内容から、
>起動時にSqliteをiin-memoryとして接続し、shema作って
何を「やれば」良いのかが読みとれなかったため、質問させていただきました。
なお、SQLiteデータ格納部分のファイル形式は、何か詳細なイメージがあるわけではなく、
アプリケーションから読み込み、最終的にsqliteのAPIから使用できれば何でも良いと考えています。
わざわざ内包する意味は?
どうしても内包したいんだったら、起動時に/tmpにでもコピっとけよ
>>185 Sqlite dbをキャッシュとして使用する発想です。
ファイルの内容をin-memory dbに取り込む。
データの更新は、SqliteのAPIは基本SQLの実行以上のことはできなかったと思う(もしかしたら、ユーザー定義関数を使用すればできるかもしれない)ので、このin-memory dbに対してSQLを発行(insert, update, delete)して行う。
最終的にファイルに保存する際、in-memory dbの内容をselect文で抽出し書き込む。
in-memory dbの作成(接続)は、openする時にファイルパスの代わりにmemoryって文字列を渡せばよかったはず(うろ覚えなのでドキュメントで確かめてね)
188 :
187:2011/06/20(月) 21:57:32.48 ID:???
ちなみに、ここまでするメリットがあるかどうか分かりません。
なせわざわさsqliteに取り込むのか?そこを説明してもらえれば、別の解決策を提示できるかもしれません。
189 :
187:2011/06/20(月) 22:01:52.68 ID:???
例えば、初めからSqliteのdbファイルに保存しておき、元のファイルへは、exportするよう作りをかえるとか....
今までDB未使用で自分でファイルに書き出してた人でしょ?
まぁ、一回騙されたと思ってサンプルどおりに実装してみなよ
191 :
180:2011/06/21(火) 19:19:51.52 ID:???
>>186-189 皆様ありがとうございます。
ファイル内に取り込みたい最大の理由はファイルの互換性です。
過去に作成したアプリケーションにおいて、以下のようなファイルフォーマットを使用しているのですが、
[独自ファイルヘッダ][独自ファイルデータA][独自ファイルデータB][独自ファイルフッダ]
アプリケーションの新バージョンを作るにあたって、内部でSQLiteの使用を検討しており、
データ保存の際にはSQLiteのDBも含めて書き出したいため、以下のようなフォーマットを思いついた次第です。
[独自ファイルヘッダ][独自ファイルデータA][SQLiteデータ][独自ファイルデータB][独自ファイルフッダ]
※過去バージョンの仕様上、新バージョンで書き出したファイルを開く場合は、SQLiteのDB部分を無視し、
その他のデータ部分のみ参照/編集することが可能、保存の際はSQLiteのDB部(というより未定義部分)はそのまま書き出す。
別ファイル展開も選択肢の一つとして考えていないわけでは無いのですが、そこにデータがあるのに同じ物を展開して
再オープン、というのはどうもスマートではない気がするので、直接読み込む方法を模索している、といった状況です。
>>190 過去スレにそういう人がいたとしたら(いたっけ…?)人違いです。すいません。
サンプルとは…?
192 :
NAME IS NULL:2011/06/21(火) 22:28:50.32 ID:fvG5wZhx
>>191 センス無いね
そもそも[SQLiteデータ]って何よ?
それに過去バージョンでSQLiteデータとやらを読み飛ばして作業したら、整合が取れないじゃないか
ここでsqliteネタをウゼーウゼー言ってるとまたaccess厨が沸くぞw
>>191読んでやりたい事は分かったが俺には思いつかねえw
本体に手を入れてまんまダンプする関数を増やす、とか... orz
>>193 2chでセンスを求めちゃイカンw
>アプリケーションから読み込み、最終的にsqliteのAPIから使用できれば何でも良い
ってあるから、そういうデータなんじゃね?w
例えばsqliteファイルをtar玉ごとメモリに読み込んでdbハンドラに繋げるようなイメージをエスパーしてるが正解かは知らんw
>>194補足
↑のイメージならin-memory dbをそのままダンプしてやってファイルに収める仕掛けを実装すれば
いけるんじゃネーノ?とか思ってるけどsqlite.cを読んだことがないヘタレだから出来るのかはワカランorz
>>194-195 昔DRHが近いネタをsqlite-usersに書いてたような気がする。
記憶違いだったらすまん。
>>191 DBサイズが固定なら出来る
サイズが変更されるなら当然無理
プログラムの改造無しでやる方法を思いついた
Linux限定だけど
開発環境 VS2008で
アタッチってできますか?
アタッチはできたみたい(リターン:0)
ですが いざSELECTすると no such table
になってしまいます。。。。
cmd = New SQLiteCommand("ATTACH '" & strdbname & "' AS '" & strname & "'", Me.conn)
cmd.CommandType = CommandType.Text
'SQL実行
intResult = cmd.ExecuteNonQuery()
cmd = New SQLiteCommand
cmd = Me.conn.CreateCommand
cmd.CommandText = "SELECT tablename FROM PDA.tblInfo"
'SQL実行結果をデータセットに格納
Dim adp As SQLiteDataAdapter
adp = New SQLiteDataAdapter(cmd)
エラー→ adp.Fill(ds)
osのファイルキャッシュに載せるんだろ?
ん、何かちんぷんかんぷんなこと言ってるな俺
>>197 ヘッダフッタがあるから問題なくね?
普通にできると思うけど全体で見たら遅すぎて話にならない
その部分だけinmemoryDBに載せられるんなら速度は気にするほどでもないような?
どうしても独自フォーマットのファイルを使いたいなら
SQLをdumpして保存したらいいよ。圧縮くらいはしたほうがいいかもな
使うときは、:memoryにimportね
>>191 普通に独自ファイルデータとやらをSQLiteDBに突っ込めよ糞ウンコちゃん
独自データのファイルサイズにもよるから一概に言えないど、
ひとつの方法ではあると思うぞ。
頭悪そうと思った理由書いてくれないかな。
>>210 俺は209ではないが、
・スレをちゃんと読んでいる場合
→日本語の理解能力が足りない。頭悪そう。
・スレをちゃんと読んでいない
→常識のない人間。頭悪そう。
・いずれの場合でも
→言葉遣いが明らかに頭悪そう。
っていうことだと思うよ。
>>211 要するに「頭悪そう」って書きたかっただけなのか。
それこそ頭悪そうだなw
3.7.7.0 ビルドでけた
214 :
180:2011/06/26(日) 00:22:51.21 ID:???
>>194-196 近いネタですかー。mail-archiveあたりで探してみようと思います。
ありがとうございます。
>>205-206 DBのサイズが大きい場合の速度は確かに気になりそうですが、
shell.cのdump_*関数を流用するだけで済みそうなので実装は簡単そうですね。
ありがとうございます。
>>207 それが簡単なのは認識しているのですが、前述の通り互換性の問題から
(前バージョンで開けないファイルになる)選択肢には入れていないのです…。
ありがとうございます。
センスと初期設計がまずいのは自覚しております…。
ヒントを沢山いただいたので、この先は自力で頑張ってみます。
皆様色々とありがとうございました。
ぶっちゃけアプリ側のデータ提供部分で吸収してしまえばいいだけだと思うんだが・・・
なぜデータまでまとめようとするのか
旧ver→独自ファイルのみ、新ver→独自ファイル+DB
それだけの話じゃねーの?
データファイルを単一にしたいと言うことなんだろうとエスパーしてみる。
>>214 意味不明な前方互換にこだわるな
ほんの少し調べりゃdumpが真っ先に見つかるだろボケ
その汚物の様なセンスを人前にさらすな
まあ案件によっては前方互換が必須とか結構あるけどね。
そういう話なのかは知らないけどw
>>216 言いたい事はわかるが・・・それはどうしても外せない要件ではないだろうし
初期設計どうこう言えないクソ設計としか言いようがない
> センスと初期設計がまずいのは自覚しております…。
と言ってるんだから別に顧客からの要求じゃなくて自己満足によるものだろ
顧客が絡んでるかどうかはわからんし、前方互換がどこまで必須かもわからない。
でも、他人がとやかく言う話じゃないと思う。
変態行為をやろうとしてる奴に動機を聞いてるだけで、とやかく言ってるわけじゃないんだが
>>223 動機を聞く ってのがまず余計なお世話なんだよな
「お前のためだから」 って態度がむかつくわ
YouTubeやニコ動などのヘビーなサイトでもSQLiteって平気ですか?
1ファイル1テーブル
1ファイル1データベース
運用方法としては後者が正しいと思いますが、
やたらdbファイルができるシステムを組んでる人がいて、
中身みてみたら1ファイル1テーブルになっていました。
なんか1ファイル1テーブルにする理由とかあるんでしょうか?
>>226 >やたらdbファイルができるシステムを組んでる人がいて、
>中身みてみたら1ファイル1テーブルになっていました。
>なんか1ファイル1テーブルにする理由とかあるんでしょうか?
その人に聞いてみたらいいんじゃね。
>>225 あまり平気ではない。
DBが壊れてたりとかは無いけど、パフォーマンスは悪い。
>>228 >あまり平気ではない。
>DBが壊れてたりとかは無いけど、パフォーマンスは悪い。
ん?「YouTubeやニコ動などのヘビーなサイト」を SQLite
で運用したことあるってことか?
マジなら漢だと思う。
>>226 あれ?SQLiteってファイル単位で排他制御が行われるんじゃなかったっけ?
>>229 もしかしてSQLiteがファイルロックってことすら知らないの?
なにいってんだーw
SQLiteのロックって割と信用できないからな・・・
シングルユーザーシングルスレッドで使えば問題ない?
マルチでも問題ねえよ
3.7.7.1
ネットワーク越し、Winの共有フォルダとかNFSとか
だと状況によっては・・・
238 :
NAME IS NULL:2011/06/30(木) 18:02:52.64 ID:/Ojq8+Ij
MacのターミナルでDBのテーブルにcsv形式のファイルとインポートするときに、
「expected 32 columns of data but found 40」というエラーが出ます。
どうすればインポート出来ますでしょうか。
ご教授願います。
カラム数があっていないと書いてある
ネタかと思うほどのあほ
ちんこ
SQLコマンドを毎回ターミナルから入力しているのですが
楽をする方法はありませんか?
SQLコマンドーはファイルに書いておいて
コマンドーラインからリダイレクトで流してもいい。
映画見とる場合かーっ
リダイレクトで流してもいいと言ったな。あれは嘘だ。
SQLiteってデッドロック起きるんですか?
MySQLからの移行を考えています。
test.sqliteというファイルを作ったら、
これはrootでcreate database testをしたということでいいんでしょうか?
それでtest.sqliteに、テーブルを作っていくわけですが、
create table a (
) encoding=utf8 collate utf8_unicode_ci;
みたいのはどうしたらいいんでしょうか?
pragma encoding="UTF-8";
create table a (
);
create table b (
);
のようにやっていき、
SELECT時にも最初に、
pragma encoding="UTF-8";
と入れればいいのでしょうか?
varchar(10)とやっても11文字でも普通にinsertできてしまうんですが、
プログラム側でしっかりチェックしろっていうことでしょうか?
check(length(col<=10))とか制約いれてもエラーにはならないようですが
11文字以上でも普通に入ってしまいます
>>251 varcharだのintだのってのはただの飾りですから
intカラムに'ABC'INSERTしてもOKな仕様だから無問題
NULLじゃなくて'NULL'を入れても問題なし
男性カラミにSTICKをINSERTしても無問題?
256 :
忍法帖【Lv=17,xxxPT】 :2011/07/08(金) 07:59:29.78 ID:CxszCXG9
FirefoxのアドオンでSQLite Manager開きながらそっちで使えるクエリー試したり
ブラウザから取り出して表示してみたりしてたところ
ブラウザからの書き込みで延々と処理が先に進まない事態がおきました
これはいわゆるデッドロックってやつかもしれませんがどうやって調べるのでしょうか?
MySQLだとSHOW INNODB STATUSなんかで調べれるみたいですけど
SQLiteではどうするのでしょう?
というかDBレベルのロックだからデッドロック発生しないって書いてたのに・・・
257 :
256:2011/07/08(金) 13:59:37.74 ID:CxszCXG9
うーん・・・
ChromeとOperaはinsertできるのに
FirefoxとIEはなぜかできないorz
何か情報ないでしょうか?
258 :
256:2011/07/08(金) 14:58:49.76 ID:CxszCXG9
ごめんなさい
ヘッダ見ながら作業してたら根本的にinsertプログラムへのPOSTができていませんでした
原因はボタン複数回おすのを防止するJavaScriptの挙動がおかしくて
先の画面へいかないことが原因でした
お恥ずかしい・・・
リクエストされたSQLを見れるデバッグ処理くらいは付けようず。
携帯ゲームをつくるのにSQLiteを使おうと思ってるのですが、
同時書き込みができないのを考えるとSQLiteは向いてませんかね?
書き込むプロセスが1つなら問題ないだろ?
スクリプト言語ほど動作が遅くて、多重アクセスがある場合は良い。
C言語が使えるなら、データベースはそれより遅い。
携帯にSqliteは組み込まれているのか?
オープンソースだから梱包すれば良いのか
携帯ゲームといっても、GREEみたいなブラウザゲームです
サーバーでSqliteを使ってモバイルからアクセス来るようなケースか?
マルチ・同時アクセスも処理できるだろ。
1日数万ページビューだと、不具合出るらしいぞ。
http://ziddy.japan.zdnet.com/qa4310712.html PHP5.0+SQLite2.8でユーザー投稿型のサイトを個人運営しています。
1日数万ページビューほどの規模で、
データベースのテーブルのレコード数は数万件、1レコードあたりのカラム数は数十件ほどあり、そのテーブルに1日数百件の投稿があります。
それらのデータは随時更新・削除・検索されます。
データベースファイルへのINSERT、UPDATE、DELETE、SELECTなどが重なると「database is locked」とのエラーメッセージが表示され、
それからもずっとユーザーによるデータベースへのアクセスが続くため、データベースへのアクセスがしづらい、もしくはまったくできない状態が延々と続いてしまいます。
他のDBならサーバー側が自前で実装してるところを、OSやFSにまかせてるからな。
やっぱそれくらいが限界なのかな?
一日数万ビューって多いのか普通なのかわからんが。
1日は86400秒なんだから、数万ビュー/日ってことは数秒に1回か。
こういうのは瞬間最大風速しらべないと意味ないよな
vacuumしたらサイズが小さくなるって書いてたのでやってみたら35kbぐらいだったのが300kbになったんですが
だまされたでー
んなことあるわけないだろ
35KBのファイルをVACUUMする必要があるのか?
select distinct sid from tableはうまくいくんですが、
select distinct sid, unameみたいに複数指定して取り出そうとすると消えてくれません。
たぶんこの場合sidとuname両方が重複してれば削除ということになるんでしょうが、
sidのみの重複を削除してその他のカラムも一緒に取りたい場合どう書けばいいんですか?
削除?
277 :
187:2011/07/14(木) 08:26:28.47 ID:???
>>275 sidの重複を排除した際、どのunameを取得するんだい?
278 :
275:2011/07/14(木) 13:25:33.51 ID:???
>>277 order byで一番上にきてるものを取得できないかな?と思ってます
無理ですかね?
uname以外に無ければ、
select sid,min(uname) from table group by sid
とかできるけど、、、
あとはサブクエリかな
280 :
NAME IS NULL:2011/07/16(土) 16:10:35.52 ID:yPv+Kx9j
みなさんはdb作る時、文字コードは何を利用してますか?
unicode
UTF8
作ったデータベースがunicodeだったからそのまんま使ってるわ
プログラムで使用してるのはutf8でデータベースに入れてるのもutf8だけど不都合は今のところ生じてない
284 :
>>280:2011/07/17(日) 04:31:36.46 ID:???
みなさんトンクス。
>>283 その場合、例えば sqlite3_column_text16() 呼んだ後に、アプリ側でutf8に変換してるって事ですかね。
あれ? もしかしてsqlite3_column_text()使えば変換してくれるのかな?
sqlite3_prepare系は引数のsql文の文字コードにあわせて読んでやれば、勝手にdbに適した文字コードに変換される?
メモリも8GBで4000円を切るようになって、これからは、UTF-32の時代だな
文字ごとに長さがころころ変わるUTF-8は問題外、サロゲートだの何だの無理やり感満点のUNICODEももう役割を終える時期
プログラム側でループさせてSELECTの処理速度計測してるのですが、
1レコード増えるだけでだいぶ時間が遅くなってきます。
SQLiteの組み込み関数を使ったり、150レコードと50レコードほどのものをUNIONしたものを、
さらにSELECTしている感じですが、
1件レコードを増やしたら1回のセレクトが5/100000秒増えます。
適切なインデックスは貼ってるつもりで、トランザクション処理も行っています。
単純計算でレコードが1万あったら0.5秒、10万件あったら5秒もかかります。
データベース使うのは始めてなんですが、こういうものなんでしょうか?
それとも僕の設計が悪いんでしょうか?
いらないレコードはどんどん削除したほうがいいんでしょうか?
質問だらけですみませんが、よろしくお願いします。
インデックスが適切じゃないんだろうな
初心者ほどツールや環境のせいにしたがるよな
290 :
286:2011/07/17(日) 23:39:14.03 ID:???
>>287 こんなかんじになります。
member
id integer pk nn
name text nn
callender
id integer pk nn
uid integer nn --member.id
date integer nn --日付を表すunixtime
todo text nn
unique(uid, date)
default_callender
id integer pk nn
uid integer nn --member.id
week integer nn --曜日を表す数字0〜6
todo text nn
unique(uid, week)
インデックスはcallender.dateに貼っています
これでcallenderとdefault_callenderの曜日を
strftimeでY-m-d形式に変換したものをunionしています。
291 :
286:2011/07/17(日) 23:50:37.10 ID:???
追記です。
callender.dateに貼っているのは、
callender側の条件で1週間以内を指定するからです。
where `date` < strftime('%s', 'now')-(3600*24*7)
default_callenderは月曜日にピアノの稽古みたいなのが入っていて、
callenderは7/18(のunixtime)に◯◯さんと食事みたいのが入ります。
unionすると7/18は◯◯さんと食事とピアノの稽古といった具合になります。
インデックスが適切じゃない
294 :
286:2011/07/18(月) 00:10:05.64 ID:???
>>292 週間カレンダーのSELECTでして、whereはdateしか指定ないですし、
uidにも貼ってみたんですが、こちらはやはり効果がありませんでした。
default_callender.weekについてもやはり効果はありません。
callender.dateはやはり効果がありました。
他にインデックス貼るものはない気がしますが、
そうなると設計自体に問題があるんですかね・・・
strftimeとか使ってるところもマイナス要素なんでしょうか。
>>293 idはpkなのでたぶん最初から貼られてます。
strftime('%s', 'now')-(3600*24*7)
これをwhereに書くな
って言うかどっかで見た
マルチだな
296 :
286:2011/07/18(月) 00:35:51.99 ID:???
where `date` < strftime('%s', 'now')-(3600*24*7)
を、
where `date` < (select strftime('%s', 'now')-(3600*24*7))
に変えたら1%ほど早くなりました。
>>295 マルチはしていません。
教えていただければそのやりとりを見たいです。
297 :
286:2011/07/18(月) 00:54:46.66 ID:???
見直したら不必要なorder byが入ってました。
取り除いたところ30%以上早くなりました。
他にも無駄がおおそうなので後はなんとか頑張ってみます。
お騒がせしました。
nn って何だよとしばらく考え込んだが NOT NULL のことか。
人に説明するのに中途半端なオレオレ用語使うなよ…
nnは俺のイニシャルだろ
オレオレ用語じゃないような
DB設計ツールでよく見るぞ
いや、それでも nn を見て not null だと判断できる人間が何人居ると思ってるんだよ
わりといるだろ。
知らないなら覚えときな。
PK = PRIMARY KEY
FK = FOREIGN KEY
UNN = UNIQUE NOT NULL
NN = NOT NULL
UNNよりNN,Uだな
まぁ略語は察せるようにはなったほうがいいよ
あまり変なものだとキレたくなるけどNNは一般的だから
ちょっと勉強になったと思う
PK FK はサッカーでは有名ですよ。
うんうん。
プライマリーキックと
フォーリンキックな
FWがFireWallの略だと知ったときはかなりショックだった
フレームワークじゃないのか
WAF っていうと Firewall のことだったり Framework のことだったり分脈で2分されるよな
WAF>ω<
VBがウイルスバスターの略だと聞くとイラッと来る
Netscape Navigator
sqliteって文字数の固定長ないよね
VARCHAR(255)とかTEXT(255)があったほうがFileIOの効率いいと思うし
他のRDBはみんなあると思うがなんでないの?
>>315 なのに速いんだよな。
なんでなんだろうな。
排他処理無いから
お前は喋んなくていいぞ
違う人物が似たよなものつくればもっと速いはず
言い出しっぺの法則
>>315 そんなことでFileIOの効率なんざ変わらないから
馬鹿なお前の場合、HDDは4KB単位でしか読み書きできないと覚えておくと良い
セクタ単位なら 512 バイトから可能
クラスタサイズとブロックサイズの違いもわかってないアホは放置で。
HDDもSSDも読み込みたいのはたった1byteだろうと、物理的には前後数十KB〜数百KB読み込んでんだよ
512バイトから可能とか寝ぼけた事言わんように
ほら、やっぱり理解できてないだろ。(w
半角wを使う奴って馬鹿ばかりなのは何故?
>>326 頭悪そうな煽りばかりでなく正解を示したら?
仲良くしてね
やっぱ頭悪いだけだったね
秋に基本情報技術者試験受けに行かないとな
今年は競争率低いから受かる鴨試練ぞ
競争率て
定員はないから基準点超えれば何人でも合格する
つまり合格率はあるが競争率は無いな
>>331 どこが間違ってるか具体的に指摘してやったほうがいい。
正論でガツンと凹ませてやれ。
>>331 > やっぱ頭悪いだけだったね
頭悪そうな煽りばかりでなく正解を示したら? (w
オレは
>>331が正しい解説をしてくれると信じてるよ
たまにはそっちを苛めないとね
苛めてるつもりだったんだ...
ファームウェアが512bytes単位のアクセスを提供してるからって
物理的に512bytesぴったりで読み書きしてると思うなんてクサレ脳みそ過ぎるだろ
一体何のために何十MBもキャッシュ積んでると思ってんだ
馬鹿すぎる
あ、もしかして「固定長をサポートしてなかろうとIO効率は大して変わらない」という主張をしてる俺に
「HDDは1sector(512bytes)単位の読み書きをサポートしている」と繰り返してたって事か?
んなこと知ってるから安心してくれ
>>342 >物理的に512bytesぴったりで読み書きしてると思うなんてクサレ脳みそ過ぎるだろ
「HDDは4KB単位でしか読み書きできないと覚えておくと良い」とかほざいてた奴が
いたようだが? (w
「馬鹿なお前の場合」を抜かすなよ馬鹿…
>>345 >「馬鹿なお前の場合」を抜かすなよ馬鹿…
馬鹿に嘘教えてドヤ顔?
どんどん深みにはまってるぞ。(w
>>346 そんなに悔しかったの?
反論するなら 4KB がどこから来たのか説明してからにしてくれよな。
ブロックサイズのMS語がクラスタサイズってだけやんw
他に何が違うのか教えてほしいわwww
このスレID出ないのか
ID無くても馬鹿臭は隠せない
問題は馬鹿が一人か複数かということ
どちらにしろ馬鹿なんだから問題ない
複数ならもうこのスレに用は無いが
一人なら全力で追い出す
クラスタサイズとブロックサイズの違いとは一体なんだったのか
これ一人が書いてんのか?なんでここまでスレ違いな話を数ヶ月もダラダラやれるんだ
精神異常か
なに言ってんだこいつw
いつの間に数ヶ月の月日が・・・
時空を超えて数ヶ月未来から書き込んでるつもりなんだろう
精神異常だな
viewを作ってWebアプリケーション経由でブラウザからアクセスしてベンチマークをとっていました。
どのSQLがいいかを見極めるためにいくつかviewを作ったり改良したりしながら、
F5を連打して秒数を測っていたのですが、あるタイミングから(たぶんF5を抑えつけたとき)
viewを作成できなくなり、select以外の他の操作も受け付けなくなりました。
トランザクション開始→select * from viewを1000回測って平均を出す→コミット
という感じでやってたのですが、何が原因でどう対処したらいいのでしょうか?
データベースファイルが壊れてしまったんでしょうか?
361 :
360:2011/07/26(火) 08:16:51.24 ID:???
ブラウザも閉じて他から参照もされてないと思ったのですが、
削除も移動もできないため、Apacheを止めてみたら削除できるようになりました。
本番環境で同じことが起きたら非常に困るのですが、これデッドロックですかね?
F5押しっぱなしによるApacheの処理が終わらない段階で、
クライアント側で(Apacheとは関係ない所で)ビューを作成してしまったから起きたのでしょうか?
ログもないし原因がわからず困ってます。
けんかになってるということは両方同レベル
>>360 ロック中にapacheのスレッド状態とか見てなかったの?
Apacheじゃなくて
コンソールプログラムから
同じトランザクション、同じクエリをforループでおくりまくってみたら?
人力でF5押すより再現性があると思うし、Apacheが関係しているかもわかるはず。
365 :
361:2011/07/26(火) 11:02:16.74 ID:???
>>363-364 レスありがとうございます。
>ロック中にapacheのスレッド状態とか見てなかったの?
Apacheはあまり詳しくなく、見ていませんでした。
エラーログも見てみましたが、さすがになさそうです。
>コンソールプログラムから
>同じトランザクション、同じクエリをforループでおくりまくってみたら?
>人力でF5押すより再現性があると思うし、Apacheが関係しているかもわかるはず。
再現しようと思ってなかなかできなかったので試してみます。
どうだった?
よかったよ
復帰test
369 :
NAME IS NULL:2011/09/09(金) 19:18:35.78 ID:aXxL9ygv
ログイン情報を格納したいのですが、
ログイン後に操作するデータベースとファイルを分けたほうがいいでしょうか?
それとも同じファイルでテーブルだけ分ければいいでしょうか?
なぜ分けた方が良いと思ったのか、それ次第だな
MySQLとかでユーザにつき1つのデータベース付与するのと同じイメージでいいんじゃない?
1つしかデータベース付与されないから全部それでやるしかないでしょ?
$sqlite3 -version
すると
>SQLite header and source version mismatch
とメッセージが出て対処法が分かりません。教えてください
初心者スレがあったら誘導してください
そんなもんとっくに調べたわボケ
そのメッセージでググればいくらでもヒットするが、英語が読めないのか?
>>372 自分で貼ってるメッセージに書いてある通りでしょ。
mismatchだと言ってるんだから同じにしてやればいいんじゃないの?
>>375 小学生に何を求めているの?
>>376
その手段が分からない
>>377 何でそんなに偉そうに質問してるんだよ。
答えて欲しかったらまず自分の環境とやりたいことくらいは最初に書け。
OSは?OSのバージョンは?SQLiteのインストール手順は?
SQLiteのバージョンは?ヘッダファイルのバージョンは?
利用はコマンドラインから?それとも何かのプログラム言語から?
ちなみに、開発者サイト[
http://www.sqlite.org/]からたどれば大抵のことは解決するよ。
mail-archiveへのリンクとかもあるし。
偉そうにするとムカついて正論返してくれるじゃん
Ubuntu11.04
インストール手順
公式からsqlite-autoconf-3070701.tar.gzをDL
$tar zxvf sqlite-autoconf-3070701.tar.gz
$cd sqlite-autoconf-3070701
$./configure
$make
$sudo make install
バージョンは不明
利用はコマンドラインから
ちなみに自己解決した。sqlite関連全部消してみて
/usr/local/bin/sqltie3がコマンドで消しても残ってたので管理者権限で消した
$sudo apt-get install sqlite3
したら思った通りに動いた。色んなものが消えたけど
それで何時間無駄にしてるんだろう
ヒントを全部与えられているんだから自己解決とは言わないだろ・・・w
お前らオッサンの癖して揚げ足取りなんて大人気ないな
だいにんきと読んでしまったw
おとなげないか?
3.7.8
387 :
NAME IS NULL:2011/10/20(木) 06:33:47.96 ID:fKz8HpBa
よろしくです
SQLiteでこのようなフォーマットのテーブルに
datetime,real,real,real,real
↓この形式のcsvファイルをインポートするのですが
2008-01-02 18:01:00,64.30,64.30,64.30,64.30
↓このように、時間が記録できません
2008-01-02 64.30 64.30 64.30 64.30
アドバイスおながいします
>>388 インポートのやり方が間違っているか
取得の方法が間違っているか のどちらかです。
バージョンとやったこと全部書かないとな
うーむ軽量ねぇ
392 :
NAME IS NULL:2011/10/23(日) 18:47:26.89 ID:4TwsFYCq
自作アプリで
5万件のデータに対して抽出処理を行ったけど
勿論、ロジックは同じ
DB接続は数種類切り替えれるような設計になっている
・sqliteは検索結果画面を出すのに数秒かかる
・Oracleに接続を切り替えると、一瞬で検索結果画面が出る
扱う件数が万を超えるような処理になると
実用に値しない
>>392 インデックスの張り方間違えてね?
5万件程度なら一瞬だぞ
Oracle側はそれなりに最適に動作するよう調整してるんだろうから
SQLite側も同じくらいには高速動作するよう調整しなきゃダメだろ。
395 :
NAME IS NULL:2011/10/23(日) 19:12:22.88 ID:4TwsFYCq
>>393 インデックスも何も主キーで問い合わせてるんだがw
同じSQLと処理でこうも違うと致命的だな
不思議な話もあるもんだな
うちも10万件程度のを扱ってるけど主キーで取るのに
数秒なんてありえない。それこそ一瞬だわ。
画面に出力するロジックが悪いんじゃないか?
397 :
NAME IS NULL:2011/10/23(日) 20:02:42.35 ID:4TwsFYCq
既出の文章ぐらい読め
>>392 で
「oracleでは一瞬で画面まで出ている」
と書いてるだろう
ロジックは同じで
sqliteの場合だけ異常に遅い
どう考えてもsqliteに問題があるとしか思えん
ちなみにアプリはjava
使用しているJDBCドライバは
sqlite-jdbc-3.6.20.jar
これに不具合があるのかも知れんが、そこまでは知らん
ソース見ないと何とも言えない。
399 :
NAME IS NULL:2011/10/23(日) 20:50:54.44 ID:4TwsFYCq
同じコードで
同じ条件で処理させて
sqliteの場合だけ異常に遅い
原因はsqlite側に在るのは明らかだ
あとは、sqlite側のドライバの問題なのか?本体の問題なのか?
どっちかだ
仮に
最新版のドライバに更新したら改善されたのならJDBCドライバの問題だろう
それでも解決しなければsqlite本体の問題だろう
>最新版のドライバに更新したら改善されたのならJDBCドライバの問題だろう
まず試してから質問しろよ
401 :
NAME IS NULL:2011/10/23(日) 22:25:57.75 ID:4TwsFYCq
質問だと?w
何を勘違いしてるんだ?
ドライバの問題だったとしても
sqlite が糞であることには変わりない
そもそも
何で更新しなきゃならんのだ?
sqlite-jdbc-3.6.20.jar
は実用に耐えれるから、当時配布したんじゃなかったのか?
それを普通に使って
数万件程度の問い合わせで、異常に遅くなるようなシロモノだったのか?
いずれにせよ実用には値しない
うんこ
>>401 >sqlite-jdbc-3.6.20.jar
>は実用に耐えれるから、当時配布したんじゃなかったのか?
誰もそんなの検証してないよ。
sqlite作者とは関係ない、ただの個人が作って配布してるだけだし。
そんなjdbcドライバとoracleを比べてる時点で間違い。
何を怒ってるのか知らないが、コマンドラインで試してみたか?
それでも数秒かかるならSQLiteが悪いんだろうがそうでなきゃ
JDBCがヘボいだけかと。
主観で遅い遅い言ってないで
マならクエリやスキーマの一つでも張れよ
具体的なスキーマと問い合わせ文見ないと何とも言えないけど、
とにかく何かOracleでだけインデックスが効くような使い方してるんだろうな。
例えば count(*) は SQLite ではフルスキャンになるからクソ遅くなるけど、Oracle は一瞬で出る、とかね。
とにかく具体的なスキーマと問い合わせ文出してくれないことにはまともな議論にならんよ
>>399
407 :
NAME IS NULL:2011/10/24(月) 02:55:42.31 ID:0tWsNn64
信者ががんばってるなw
主キーで書いてるのに虫かよw
あ、おとなしくなった
いや、純粋に主キーだけが条件ならあり得ないから。
さっさとスキーマと問い合わせ文晒してみ。
まともな話する気がないなら巣にお帰り。
410 :
NAME IS NULL:2011/10/24(月) 18:04:48.57 ID:0tWsNn64
検索でコレかよ
使えん糞DBだな
412 :
NAME IS NULL:2011/10/24(月) 19:06:46.47 ID:0tWsNn64
なんで糞なの?
主キーで検索かけて遅延するってどういうこと?
いくらなんでも我慢できん
ほかのDB探すわ
まぁ無理に使わんでも
414 :
NAME IS NULL:2011/10/24(月) 19:43:51.59 ID:0tWsNn64
糞すぎるDB使っても
いい事なんか無いことわかった
>414
再現できるようにするのがフェアじゃないかな
信者じゃないけど
プロトタイプとか簡単なテストはSQLiteで済ませているから糞でも構わない
まぁ、体感的に遅い気はするけど、自分で*DBMS/KVSを書くよりましだろうし
416 :
NAME IS NULL:2011/10/24(月) 20:14:43.40 ID:0tWsNn64
> 例えば count(*) は SQLite ではフルスキャンになるからクソ遅くなるけど、Oracle は一瞬で出る、とかね。
おまえ基本知らないだろw
417 :
NAME IS NULL:2011/10/24(月) 21:06:32.18 ID:09cja/xi
過疎だから回答ないだけかと思ってたのに
人一杯いるじゃん!
>>387 おせーてよ!
他の探すとか言いつつまだ粘着しているのかよ。
419 :
NAME IS NULL:2011/10/24(月) 21:18:07.72 ID:0tWsNn64
どんだけ糞なのか
ハkッキリとわかった
まさか主キーで検索してこの座mあとか・・・
使え根ー
>>417 よく知らんが、いくつか検索した結果をまとめると
テーブル定義の時点では他のプログラマのために
カラムの文字数や数値の範囲を明示するために使用するようだ。
これはSQLiteで型指定が大雑把すぎることが起因する。
422 :
NAME IS NULL:2011/10/24(月) 23:14:54.77 ID:0tWsNn64
件数が万単位になると急激に劣化するとか
糞すぎて使い物にならんね
さっさとほかのDBの検討したほうがマシだ
424 :
NAME IS NULL:2011/10/24(月) 23:20:32.48 ID:0tWsNn64
しかし件数が万単位になると急激に劣化するとか
どうなってるんだろうな?
驚くばかりだ
他のDBと比較すると歴然とする
実用に耐えれん
425 :
NAME IS NULL:2011/10/24(月) 23:25:17.82 ID:09cja/xi
>>420 >>421 はーなるほど
サンクス
それならと、探してみたら明記されてました。
http://www.sqlite.org/datatype3.html の 2.2 Affinity Name Examples
Note that numeric arguments in parentheses that following the type name
(ex: "VARCHAR(255)") are ignored by SQLite - SQLite does not impose
any length restrictions (other than the large global SQLITE_MAX_LENGTH limit)
on the length of strings, BLOBs or numeric values.
(数字)つけても意味ない、と。
>・型名が複数続くケース
UNSIGNED BIG INT
DOUBLE PRECISION
VARYING CHARACTER
NATIVE CHARACTER
こういう奴ですね。
結局、こっちも内部の型に変換されるだけで意味はないようですが
>>424 サードパーティ製の怪しいJDBCドライバを使っておきながら、原因の切り分けもしないで
SQLiteが糞すぎるの何のアホなこと言うから、主キー云々のアホな回答しか帰ってこなくなる。
そもそも組み込みDBのSQLiteと、Oracle DBを比較している時点で目的が意味不明。
Oracleを使える環境で、Oracleが良いなら、黙ってOracleを使えば良いだけ。
そうじゃなくて組み込みDBを使いたいなら、SQLiteは標準ではC言語用のAPIしかサポートしてないから、
同じJavaで書かれているDerbyなりH2DBなりを使った方が幸せになれるよ。
もう相手するなよ
429 :
NAME IS NULL:2011/10/25(火) 07:37:32.19 ID:gceqE9iT
いまどき正規のドライバを配布してないとか
どんだけマイナーなんだよw
アプリから使う想定してないDBなんか使えるかw
430 :
NAME IS NULL:2011/10/25(火) 08:09:28.07 ID:gceqE9iT
最新にバージョンアップしたが
sqlite-jdbc-3.7.2.jar
特に改善傾向なし
これは本体DBの問題に間違いないな・・・
そもそも正規のJDBCドライバを配布してないとか
どんだけ糞なんだよ
DBなんてアプリから使われるから存在するんだろ
まさかコマンドラインのみの使用を想定してるのか?w
どんだけ間口が狭いんだよw
この分じゃあ・NET系統ドライバも怪しいな・・・
431 :
NAME IS NULL:2011/10/25(火) 08:15:26.05 ID:gceqE9iT
あまりにも糞すぎてワロタ
いや失望した
と言った方がいいな
まさかjavaからの接続に正規サポートすらしてないとか・・・
今の主流言語さえも対応してないのか?
この糞DBは
一体、どういう使われ方を想定してんだ?w
まさかコンソールからのコマンド入力しか想定してねーのか?w
どうせ、・NET系統ドライバも正規対応してねーんだろ?
アプリからは接続非推奨です!キリッ
って書いとけよw
何か根本から勘違いしてる気がする
おれタダシイ
世界中バカばっか
と思えるところがすごい
普通じぶんがどこか違ってるんじゃないかって思うよね
次に環境も症状も書き込まずに延々内容のないグチしかないのがすごい
インターネットは双方向のコミュニケーションなのに、ググッてなんでも調べられるからオレ、インターネット得意とかいっちゃうタイプ
434 :
NAME IS NULL:2011/10/25(火) 09:00:22.17 ID:gceqE9iT
根本的に使えないな・・・
435 :
NAME IS NULL:2011/10/25(火) 09:09:50.41 ID:gceqE9iT
これで10万件とか
増やしたらとまるんじゃね?
と懸念してしまうほど糞すぎる
何なら他のdbでも試みてもよい
たとえばh2、あるいはmYsqlなども候補だが
しかし、まさか10万件程度で異常なほど遅いことにはなるまい
437 :
NAME IS NULL:2011/10/25(火) 10:23:25.90 ID:gceqE9iT
信者が必死だな
事実が糞なんだから仕方ない
438 :
NAME IS NULL:2011/10/25(火) 10:26:53.34 ID:gceqE9iT
論理的に反論さえも出来ないカス信者ども
なぁ、アプリ用途に正規ドライバさえも出さないような
糞dbをどうやって使えばいいんだ?
教えてくれよwwww
アプリ用途にSQLite使うとか正気とは思えない
プロトタイプとテスト用途に使ってください
どれくらい遅いのか数値なりグラフなり再現可能なデータセットを示してから議論をお願いしますね
使わなきゃいい
441 :
NAME IS NULL:2011/10/25(火) 11:03:10.02 ID:gceqE9iT
>>439 おらくる---一瞬
糞db---5秒
このデータ突きつけられて
まだ言い訳するのか?
おらくる最強
そして糞dbは使えない、いくらフリーだからって、もっと良いdbあるだろ?
442 :
NAME IS NULL:2011/10/25(火) 11:04:24.07 ID:gceqE9iT
> プロトタイプとテスト用途に使ってください
はぁ?W
そのテスト用とさえも使えないんだよ!
何しろアプリと接続したらボトルネックが凄いんだからW
もう実用に耐えれるレベルじゃねーだろ・・・
いつまで無駄な時間使ってるの?
>441
君のマシンが糞だったんだろうな、FS見直したらどうだろうか
再現性の無いデータに意味はあるのでしょうか
だから反応するなって言ってるだろ、糞ども
446 :
NAME IS NULL:2011/10/25(火) 13:49:57.26 ID:gceqE9iT
どうしてこんなに糞なんだろうか?
最初使ってた時は軽量で使いやすいと思ってた
気軽にアプリと接続できたし
特に設定いらなかった
型とか、文字数の厳密な定義なしに自動的に拡張してくれる仕組みも
お手軽さは好感していた
しかし、データが万を超えると
急激にレスが悪化するとは・・・
これは予想してなかった・・・
こんな糞DBを使い続けろというのか?
それは勘弁してくれ
447 :
NAME IS NULL:2011/10/25(火) 13:51:10.81 ID:gceqE9iT
>>444 再現性もなにも
毎回異常にレスポンスが遅いんだが
つまり再現率100パーセントだ!
こんな糞DBは使いたくないよ・・・
じゃあ使うなって。
お前はここに何を求めて書き込んでるんだ。
餌を与えちゃダメだよ
おねだりの芸を始めるようになるから
450 :
NAME IS NULL:2011/10/25(火) 15:32:56.98 ID:gceqE9iT
おらくると比べるのは
確かに酷だが
それにしても
たった数万件の問い合わせ如きで異常な遅延が」発生するって
もう絶句だわ・・・
どうやって
こんな糞dbを使えばいいんだ?
ここまで粘着されると逆に興味湧かない?w
単なる荒らしって面白くもなんとないし自分に得られる事も何一つとして無い無駄な時間じゃん。
何か目的があるんだろうけど、具体的な構成や問い合わせ方法を聞いても答えが返ってこないのを
見ると、煽って問題無い実例を引き出そうとしてんのかな?
既に俺は哀れんですらいるよ。
余程の糞案件にぶち当たって鬱憤晴らしたいんだろうな、とか。
いや、性能も何もみんなネタだろ
454 :
NAME IS NULL:2011/10/25(火) 19:24:47.54 ID:gceqE9iT
ネタならどんだけいいか
期待していた分、コレだよ・・・
455 :
NAME IS NULL:2011/10/25(火) 19:30:46.17 ID:gceqE9iT
どうしてだろうな?
「主キーで検索してるだけ」なんだが
こんなにレスが遅い理由がわからんよ
単純に件数が多いから?
つまり糞dbでFA?
>>454 ネタじゃないならマジレスしてやるが、どうしてもSQLiteを使わないといけない案件を抱えていて、
遅くて困ってるなら相談に乗るから、その「主キーで検索してるだけなのに遅い」現象の再現ソースを全部貼れ。
出来ないなら、糞DBかどうかFAを出す材料が無い(最新版とやらのJDBCドライバだって怪しい)し、
遅いと言っているのが本当かどうか証明にもならないから、他の組み込みDBに乗り換えろ。さようなら。
上でも書かれてるけど、SQLiteはC言語用の組み込みDBだからC言語のAPIしか提供していないし、
DerbyはJava言語用の組み込みDBだからJava言語のAPI(JDBC)しか提供してない。組み込みDBってのはそういうもの。
特に理由も無いのに、正規にサポートされてない言語のAPIを使って文句を言うのはただの馬鹿。
あと、速くて素敵なOracle社はSQLiteのスポンサーなので、遅いのが本当ならOracleにも文句言っとけば?
457 :
NAME IS NULL:2011/10/25(火) 20:23:51.56 ID:gceqE9iT
> 上でも書かれてるけど、SQLiteはC言語用の組み込みDBだからC言語のAPIしか提供していないし、
この書き方だとCからの呼び出しなら
ちゃんと遅延なく結果が返ってくるように読み取れるんだが
どうせCでも遅いんだろ?
一回試してみるから
そのCのライブラリとやらを教えてくれ
取得部分だけCで書いてみる
そして、それをJAVAから呼び出す
>>456 100%ネタなんだからマジレスするなっつってるだろ
>>457 知識不足乙。「SQLite」が、C言語で書かれたライブラリの名前。
SQLiteというDBMSがあって、それに接続するためのC言語のライブラリが配布されているわけじゃない。
お前が使っているJDBCドライバも含めて、色んな人が趣味で書いて公開しているSQLiteのJDBCドライバは、
まさにその「取得部分だけC」で書いて、インターフェースをJavaのJNIで叩く、ということをやってるだけ。
その怪しいJDBCドライバの中によほど余分な処理が詰め込まれてるなら別だが、基本的にJNIでもJNAでも
速度を求めるには使い物にならないほど遅いから、わざわざ同じものを自作しても結果が変わらずに時間を無駄にするだけ。
そもそもJavaからCは色々無理がある。別のプロセスを呼び出しなんてやったら更に遅いしね。
まあ、自作して少しでも速度が改善するようなら、JDBCドライバの作者がアホだったことの証明にはなるかもしれんが…。
マジレスついでに聞くけど、そこまでしてSQLiteを使わないといけない理由は?
使い物にならないなら使わなけりゃ良いだけだし、再現ソースも貼らずに文句垂れてるだけだから、ネタにしか見えない。
「SQLiteじゃないと駄目な理由」が言えないなら、ネタは終わりにしてOracle DBを使え。
>>458 マジレスしたいお年頃だったんだ。ごめんね。
460 :
NAME IS NULL:2011/10/25(火) 22:26:35.84 ID:gceqE9iT
> その怪しいJDBCドライバの中に
最新にバージョンアップしたが
sqlite-jdbc-3.7.2.jar
これが怪しいのか?
一般に公開されていて、他のサイトでも紹介されてるようだが
何でお前如きが「怪しい」と断言できるんだ?
それなりに定評あるドライバじゃないのか?
まぁ糞dbであることには間違いないがねw
461 :
NAME IS NULL:2011/10/25(火) 22:28:52.34 ID:gceqE9iT
>>459 そもそも「公式のドライバ」が無い時点でおかしいだろ!
アプリから接続を想定してないのか?
一体、どんなアプリだったら「公式」の接続が想定されてるんだ?w
お前なら知ってるだろ?w
それともコマンドラインしか使えない糞dbでFAか?
462 :
NAME IS NULL:2011/10/25(火) 22:35:11.61 ID:gceqE9iT
> まさにその「取得部分だけC」で書いて、インターフェースをJavaのJNIで叩く、ということをやってるだけ。
sqlitejdbc.dll
まさにコレのようだが
コイツが糞と言いたいのか?
まぁ実際に糞ロジックなんだろうがw
それとも取得部分のsqliteパッケージのコードも糞と言いたいのか?
まぁ実際に糞ロジックなんだろうがw
dbも含めて全部糞なのは間違いない
そこだけは意見は一致するw
463 :
NAME IS NULL:2011/10/25(火) 22:36:26.14 ID:gceqE9iT
まぁソースがあるから
どこがボトルネックになってるか
追跡も可能だが
どうせ本体も糞なんだからなぁw
朝から晩までご苦労様です
ふと思うんだが、Oracleってまだ結構使われてるの?
金融系でもMySQLとか増えてるし、KVSにも流れてるし
>>460 本当に朝から晩まで中身の無いレス乙。
ますます文章が支離滅裂になってきたな。
一般に公開されていて、他のサイトで紹介されていても、
「怪しくない」ことの証明にも「それなりに定評がある」ことの証明にはならねえよ。
それとも、怪しくなくて、それなりに定評があったら速度も速いのか?
「SQLiteはCライブラリの名前」だと言っているだろう。「SQLite」という、C言語で使うdllファイルが配布されているだけ。
「公式()笑にJavaから利用できるドライバ」の時点で意味が通じない。Javaの勉強をし直してこい。
馬鹿に分かりやすく説明するなら、「access.dllは公式のドライバが無い時点でおかしい!」と言ってるのと同じ。
あと、馬鹿だから理解できてないみたいだけど、
SQLite本体 + 「取得部分だけC」 = sqlitejdbc.dll で、
sqlitejdbc.dll + 「それ用のJDBCドライバ」 = sqlite-jdbc-3.7.2.jar
だから、ネックはSQLite本体だけじゃなくて、sqlitejdbc.dllにある可能性も、JDBCドライバにある可能性もあるぞ。
もちろん、お前が書いたソースやSQLクエリにネックがある可能性もあるが、
再現ソースが無いなら、そこに問題が無いことの証明と、ネタじゃないことの確認ができないから、やっぱりネタ乙。
何かを質問したりする気が無いなら板違いだから、馴れ合い板か、自分のブログにでも書いてろ。
>>465 使うところでは結構使われてるよ。
流れているとは言っても、そう簡単には減らないと思う。
OracleはOracleでSQLiteのAPIをBerkeley DBに載せてみたりして
KVSや、それ以外の可能性も色々試しているように見えるけど…w
他のDBが少し増えた、という程度で、Oracle自体が減ったというほどじゃないような。
469 :
NAME IS NULL:2011/10/25(火) 23:57:13.43 ID:gceqE9iT
>>466 お前って馬鹿だろ?w
どうしようもない馬鹿だな
一回視ねよw
oracleで一瞬で帰ってくるクエリが
同じくそのまま糞DBで使ってるだけなんだが
何度もそういってるのに理解できないのか?
脳みそ入ってますか?w
確実に糞dbのせいだぞw
解釈のオプティマイザが糞なのか
ドライバの問題なのか
dllも糞なのか知らんが
あぁ全部糞の可能性も高いなw
それとも糞dbには糞SQLを専用に書き直さないとならんのかね?w
470 :
NAME IS NULL:2011/10/26(水) 00:00:10.28 ID:UVgFZr+f
> SQLite本体 + 「取得部分だけC」 = sqlitejdbc.dll で、
何いってるんだ?コイツw
脳みそあるのか?
「sqlitejdbc.dll」 自体が糞dbの本体だろ!
それさえも知らんのか?w
一回視ね
この糞dll自体がとてつもなく極悪なつくりになってるんだろうなぁw
マジで使えないわ
まだH2の方が遥かに使えるんだが
何とかしろよ
糞dllを書き直すなりしろよ糞PG
いくら吠えても、自分でJavaへのコネクタをC言語で書けない時点で負け犬だろjk
>>472 日付が変わってIDが違うだけで、
>>470は荒らし本体と思ふ。
吠えてると言っても、自分に都合の悪い正論は全部読み飛ばしているだけの遠吠え。
>>465 あんまり詳しくないんだけど、金融系でKVSって、例えば何を使うんだろう?
再現ソースを貼らない限り、それが「oracleで一瞬で帰ってくる」かどうかすら証明できてない。口では何とでも言える。
476 :
NAME IS NULL:2011/10/26(水) 00:22:15.58 ID:UVgFZr+f
sqlに特殊性なんてあると思ってるのか?w
他のDBでも試しても良いが
間違いなく
糞db以外は一瞬で帰ってくるだろうよ
MYSQLが良いか?それともH2でさえ一瞬で返してくれるさ
たった数万件だぜ!
この程度の問い合わせで一瞬で返してくれない糞仕様dbを体験したのは初めてだぜ・・・
俺が使ってるsqliteのdbもたった数万件だけど、oracleと同じクエリ投げて一瞬で帰ってくるから
>>476のsqliteが遅くても正直どうでもいい。
俺が使ってるSQLiteもたった数百万行のDBだが一瞬でSELECT返ってくるから他の奴がいくら遅くてもどうでもいい
なんでSQLiteのdllで検証しないのか
なんで朝から晩まで粘着しているのか
データベースのスキーマは?
480 :
NAME IS NULL:2011/10/26(水) 01:49:43.42 ID:UVgFZr+f
しかし糞DBは
何という遅さなんだ?
マジで使う気がしないわ
どうやったら数万程度の問い合わせでこうなるんだ?
データが10万件超えたらどうなるんだ?
もうすぐ増えると思うが
考えただけでも怖いわ・・・・
481 :
NAME IS NULL:2011/10/26(水) 01:51:14.74 ID:rCz++wh/
俺が使ってるのは200万件くらいのSQLite DBだが、リレーションの親子関係も含んだ
それなりに複雑なクエリーでも 20ms くらいで結果が取得できてる。
どうせ
>>476 が作った DB は「主キー」とやらがただのカラムで、
インデックスなんか1個も作ってないんだろう。
>>467 > OracleはOracleでSQLiteのAPIをBerkeley DBに載せてみたりして
kwsk
483 :
NAME IS NULL:2011/10/26(水) 01:57:06.56 ID:UVgFZr+f
馬鹿がいるなぁ
明確にPRIMARI KEYでテーブル作成して
そして主キーで検索かけてるんだが
これでも現実を否定するのか?
信者はツライなぁww
お前の言う複雑なクエリってのが
どうせwhere句に条件チョット入れただけのお子様SQLだろうがw
月別、日別などにして、肥大化させないと速い。
485 :
NAME IS NULL:2011/10/26(水) 01:58:47.73 ID:UVgFZr+f
ひょっとして糞dbってに
PRIMARI KEY
と指定しても
アホだからインデックス構造すらないのかな?www
どうりで検索アホなわけだよwww
なーんだ基本のにPRIMARI KEY構造さえも無かったのかよww
そりゃ使えんわwww
起動時、チェック時が時間くう。サイズが小さいと速い。
487 :
NAME IS NULL:2011/10/26(水) 02:00:03.68 ID:UVgFZr+f
俺が間違ってたよ
万を超えるデータになってしまったのが悪かった
糞dbに万以上の問い合わせなんて土台無理だったんだよ・・・
すまんな糞dbと糞信者ども
ざまぁwww
>>483 いえいえ、自称PRIMARY KEY(笑)だけで検索するような
赤ちゃんSQLよりは遥かに複雑でございますよ
で、CREATE TABLE と SELECT 文はいつになったら
見せてくれるんですかね?
489 :
NAME IS NULL:2011/10/26(水) 02:03:47.05 ID:UVgFZr+f
>>488 明確にPRIMARI KEYでテーブル作成して
そして主キーで検索かけてるんだが
それでも
たった数万件で超絶遅延が起こるワケだが
これでも現実を否定するのか?
信者はツライなぁww
ないてるのか?ww
>>489 そりゃぁ PRIMARI KEY (爆笑) じゃぁ主キーにはならないよなぁw
491 :
NAME IS NULL:2011/10/26(水) 02:08:24.03 ID:UVgFZr+f
はぁ・・・
しかし、こんな糞dbは今まで見たことも聞いたことも無いわ
普通は主キーで問い合わせるのが一番高速なのだが
この糞dbには主キーの概念すらないのか?
どうせ
テーブル作成時の指定なんて、ただの飾りなんだろwww
そりゃサーバーとして動いてないような糞dbなんだから
マジでお子様db以下だよ
こんな糞dbに大事なデータなんて預けられんわ
だんだん面白くなってきた。
このままずっと続けていって欲しい。
なんか開発してるみたいだけど
その生産力の無さに驚くわ
というかoracleとsqliteの二択ってどんな案件
pure java のファイルDBってなかったっけ?
oracleは別立ての鯖で動いてるってオチじゃなかろうな。
20万件ほどのデータに対して、主キーに条件を入れて検索したら、瞬殺だよ。
ちなみに、ODBC経由。
javaは知らん。
どうせvacuumやreindexとかやってないんだろ。
500 :
NAME IS NULL:2011/10/27(木) 11:12:09.78 ID:VqqPO7vL
H2
3万ほどデータ突っ込んでみた
問い合わせ一瞬
501 :
NAME IS NULL:2011/10/27(木) 11:13:28.88 ID:VqqPO7vL
おらくる
H2
一瞬だった
さて糞dbは?数万件のデータで糞遅延・・・
使い門にならんよ
502 :
NAME IS NULL:2011/10/27(木) 11:21:50.87 ID:VqqPO7vL
javaで書かれた
H2さえ一瞬だぞ
Cで書かれたという糞db様は?
えっ?遅延だと?
使い物にならんね・・・
503 :
NAME IS NULL:2011/10/27(木) 11:22:59.78 ID:VqqPO7vL
間違いなく
sqlliteは糞dbである
ことが証明されました!
この糞dbを使いこなすには
特殊な技術がいるんかね?
特殊技能認定受けてるのかね?ww
>>498 だよね。 sqliteでも数万件程度なら一瞬で検索が終わる。
上のほうで遅い遅いと騒いでる人がいたけど、問題解析能力が
無いのかな。
むむ、レス番が飛んでるぞ。
例の荒らしがNGパターンに引っかかったのか
506 :
NAME IS NULL:2011/10/27(木) 16:56:36.88 ID:VqqPO7vL
H2
5万件データ
初回問い合わせ 0.5秒
次回からはキャッシュが利いてるようだ
一瞬
どっちにしても一瞬の出来事だ
507 :
NAME IS NULL:2011/10/27(木) 16:57:09.01 ID:VqqPO7vL
さて
糞dbは?
数秒もかかるんだけど、それも毎回
なんで、こんなに糞なの?
508 :
NAME IS NULL:2011/10/27(木) 16:58:05.37 ID:VqqPO7vL
全くロジックは同じ
・Oracle さすがの一瞬
・H2意外に高速
・糞db、やっぱり糞は糞ですね・・・
もう糞dbを使うのは疲れるよ・・・
509 :
NAME IS NULL:2011/10/27(木) 17:03:55.59 ID:VqqPO7vL
おらくるに勝てないのは
仕方ない
だがH2でも一瞬で出来ることが
なんで糞dbになると出来ないの?
糞だから?
それを言っちゃあおしまいだよ
>>509 何度も自分でいっとるやん。議論おわっとるやん。議論する気無いやん。
前も聞いたんだが、ここに何を求めて来てるの?
問題を解決する手段が欲しいのなら状況をきちんと晒せと言われてるし、貴方以外の環境での反論も出てるわけだが、それへ反証する気も無いの?
>>510 荒らしてれば、同じ環境でこれだけ速いみたいな反証が出てくると思ってるんじゃない?
512 :
NAME IS NULL:2011/10/27(木) 21:28:59.08 ID:VqqPO7vL
>>510 > 状況をきちんと
俺のレスをちゃんと読んだ?
これ以上
どう説明しようがあるんだ?
主キーで検索して、このザマだぞ・・・
こんな糞db使いたくないよ
/: : : : : __: :/: : ::/: : ://: : :/l::|: : :i: :l: : :ヽ: : :丶: : 丶ヾ ___
/;,, : : : //::/: : 7l,;:≠-::/: : / .l::|: : :l: :|;,,;!: : :!l: : :i: : : :|: : ::、 / ヽ
/ヽヽ: ://: :!:,X~::|: /;,,;,/: :/ リ!: ::/ノ l`ヽl !: : |: : : :l: :l: リ / そ そ お \
/: : ヽヾ/: : l/::l |/|||llllヾ,、 / |: :/ , -==、 l\:::|: : : :|i: | / う う 前 |
. /: : : //ヾ ; :|!: イ、||ll|||||::|| ノノ イ|||||||ヾ、 |: ::|!: : イ: ::|/ な 思 が
/: : ://: : :ヽソ::ヽl |{ i||ll"ン ´ i| l|||l"l `|: /|: : /'!/l ん う
∠: : : ~: : : : : : : :丶ゝ-―- , ー=z_ソ |/ ハメ;, :: ::|. だ ん
i|::ハ: : : : : : : : : : : 、ヘヘヘヘ 、 ヘヘヘヘヘ /: : : : : \,|. ろ な
|!l |: : : : : : : : :、: ::\ 、-―-, / : : :丶;,,;,:ミヽ う ら
丶: :ハ、lヽ: :ヽ: : ::\__ `~ " /: : ト; lヽ) ゝ
レ `| `、l`、>=ニ´ , _´ : :} ` /
,,、r"^~´"''''"t-`r、 _ -、 ´ヽノ \ノ / お ・
,;'~ _r-- 、__ ~f、_>'、_ | で 前 ・
f~ ,;" ~"t___ ミ、 ^'t | は ん ・
," ,~ ヾ~'-、__ ミ_ξ丶 | な 中 ・
;' ,イ .. ヽ_ ヾ、0ヽ丶 l /
( ;":: |: :: .. .`, ヾ 丶 ! \____/
;;;; :: 入:: :: :: l`ー-、 )l ヾ 丶
"~、ソ:: :い:: : \_ ノ , ヾ 丶
おい・・・
まさか延々とつぶやいていたのは状況を説明していたつもりだったのか・・・
糞なら使うなよ。いつまでも、未練がましい。
だからネタにマジレスするなよ。それこそ荒らしの思う壷。
道具も使う側次第ってのはITいりゃすぐわかると思うんだがな〜
適材適所
SQLiteはどの環境でもすぐ使える手軽さだけで十分
中規模以下のアプリケーションにしか使わないし問題ない
他に話す事もないんだよな
大抵の疑問点は本家で解決するから
そんな物にも躓ける ID:VqqPO7vL がうらやましい
520 :
NAME IS NULL:2011/10/28(金) 08:31:43.42 ID:rXEAeOdb
使いこなす?w
主キー検索で問い合わせてるのに
マトモに返してくれない
遅延糞dbをどうやって使いこなせば良いんだ?w
裏技でもあるんか?w
主キー主キーと連呼する様を見てると
覚えたての専門用語を縦に、詳しい人たちの中に割って入ろうとする馬鹿みたいで
ほほえましいな
522 :
NAME IS NULL:2011/10/28(金) 16:00:11.78 ID:rXEAeOdb
一応おらくるのPなんだがw
oracleのP持ち様がsqlite如きにこんな時間割いて構ってくださるなんて
通常ありえないことだよな。ありがてぇありがてぇ。
524 :
NAME IS NULL:2011/10/28(金) 18:32:42.40 ID:rXEAeOdb
ほぅ、その存在を知っているのかね君は
もちろん
糞dbには無い資格なのだよ
ちなみにP取ったら
バッチと賞状が貰えるの知ってたかね?
525 :
NAME IS NULL:2011/10/28(金) 18:33:31.48 ID:rXEAeOdb
ついでに
嬉しくてクリアケースも買っちゃったw
商売上手なおらくるだよw
おっさんがついていけなくて拒否反応出してんのかと思ってたらPです(キリッってガキじゃねーかよw
527 :
NAME IS NULL:2011/10/28(金) 19:40:55.91 ID:rXEAeOdb
驚いたか?
お前らと素養が違うんだよ
底辺の諸君、どうだね?w
糞dbは楽しいかね?w
俺もoracle p持ちだけどsqliteに主キー検索で問い合わせて高速に帰ってくるから、もっと素養が高いわ。
529 :
NAME IS NULL:2011/10/28(金) 20:06:14.12 ID:rXEAeOdb
羨ましいか?w
ここの馬鹿住民に
スーパーマンの俺が登場したのも何かの縁だ
糞dbの無力さと
信者の馬鹿さ加減を思い知るが良い
糞
>>529の無力さと、オラクル信者の馬鹿さ加減を思い知ることができた。
ありがとう。
531 :
NAME IS NULL:2011/10/28(金) 20:16:31.50 ID:rXEAeOdb
どういたしましてw
さて酒気ーでさえ糞遅いのならんとかならんかね?
催促の
インデックスなんだが
データ的にはこのインデックスで最適なんだがねぇ
データが重複が多いのなら、別のインデックスを考慮するが
ユニークなデータだからな
勿論他のDBではH2も高速だった
つまり結論は糞dbは劇主ということだ
五時変換は許せ
治すのメン土井w
おrくるのPより
PってPinkってことでいいんだよね?
533 :
NAME IS NULL:2011/10/28(金) 20:28:43.05 ID:rXEAeOdb
好きに解釈してくれ
うわ1分で返ってきた。気持ち悪い。
535 :
NAME IS NULL:2011/10/28(金) 20:52:10.83 ID:rXEAeOdb
糞dbを使いながら
楽しいか?
全く使えんし使う気にも慣れん
歩優れ・マイ、いるんなdb使ってきたが
これほど糞dbははじめた
糞すぎるな信者も糞だ
全角英数は馬鹿しかいない定説の好例をありがとう
Enterを押す手の震えが激しくなってるようですが
アルコールが切れてませんか?
538 :
NAME IS NULL:2011/10/28(金) 21:01:26.39 ID:rXEAeOdb
さて糞db信者の諸君
そろそろ糞dbなんて
見切りつけていいかね?
馬鹿馬鹿しいよ
使う気になれんのだ
そうですか
540 :
NAME IS NULL:2011/10/28(金) 21:20:30.30 ID:rXEAeOdb
そろそろ
こんな糞dbは見切りつけようと思う
だって糞なんだもん
主キーで問い合わせてこんなレスだよ
壊れてるんじゃね?設計段階からw
文章がおかしいと思ったら日本人じゃないのか。納得。
542 :
NAME IS NULL:2011/10/28(金) 22:10:14.30 ID:rXEAeOdb
残念だが
おらくるPtosite
もう・・・
ああ、なんちう糞dbなんだよ
主キーで検索かけてるのに
このザマですか?
糞dbすぎるんだが
無駄な改行といいずいぶん若い奴だな
厨房かも知れん
いい年したおっさんがやってたら
痛いを通り越して哀れみを感じる
ちょっとビックリしたね
546 :
NAME IS NULL:2011/10/28(金) 23:40:11.84 ID:rXEAeOdb
驚くなよ
おれがPだからと言って
そりゃマスタだからね
俺は君の、おまいらの一億倍のスキルもってんだよ
それでも糞dbには手を焼いてるけどね
驚いた。俺と同じPなのに、俺が高速で出来る「SQLiteで主キーで検索」が出来ないなんて…。
きっと、君は俺の一億分の一くらいのスキルしか無いんだろうな。
548 :
NAME IS NULL:2011/10/28(金) 23:51:37.13 ID:rXEAeOdb
糞dbは知らんのだよぉ
おらくる様なら
どのインデックスで検索するとか
統計情報で分析するんだがねぇ
なんせ糞dbだから、たちが悪いんだよねぇ・・・
困ったなぁ
自分の使えないものはダメなもの
こんな考えを持つゆとりさんが増えているようです
553 :
NAME IS NULL:2011/10/29(土) 10:23:39.42 ID:bPqXvzbh
s2とすぷりんぐマスターの俺
おらくるPの俺
でも糞dbだけは解析する気せんせん
時間の無駄だよ
こんな糞db
おはようございます。今日精が出ますね。
555 :
NAME IS NULL:2011/10/29(土) 11:44:55.06 ID:bPqXvzbh
糞db
きらいだぁ
人の話を聞く気無し、問題解決をする気無し、挙句の果てに架空の資格取得自慢話。
プラチナ持ってる奴って、こんなに頭悪いわけないよね?
むかつく上司が持ってるけど仕事はできる。
尊敬する上司も持ってるけど、こっちも当然仕事できる人。
単なる荒らしと思わざるを得ないんだが、
こうゆう荒らしって、そんなに面白いもんなのか?純粋に不思議だわ。
昔のプラチナは大したことないらしいよ
>>555 毎日楽しみにしてます
これからももっと長文いっぱいお願いします
559 :
NAME IS NULL:2011/10/29(土) 14:05:14.46 ID:bPqXvzbh
>>557 。。。。
それ言うか世w
板ww
ぐさっときたぞぉ
これがエアー資格ってやつなのか
561 :
NAME IS NULL:2011/10/29(土) 15:55:16.63 ID:bPqXvzbh
Phaほんとだよぉ
嘘いうりゆうないじゃん
562 :
NAME IS NULL:2011/10/29(土) 20:31:50.51 ID:bPqXvzbh
実はじゃヴぁとおらくるの達人なのdれすよ
ふぁふぁふぁ
なんでもきいてよ
今日はおらくるPさん来ないのかな
毎日楽しみにしてるんだけど
564 :
NAME IS NULL:2011/10/30(日) 13:44:50.73 ID:VHdVZn4y
pですお
もっと、僕のSQLiteをもっといっぱいdisってくださいハァハァ
お前のものじゃねえよ
567 :
NAME IS NULL:2011/10/30(日) 16:24:26.73 ID:VHdVZn4y
糞db
全く使えん
どうして・・・
酒気ーでkんさくしてろのに
このザマかよ
糞すぎてつかうきなくしたわ
笑いが止まらなくなった。
なんかに似てるよな〜と思ったらバイオの日記じゃんw
「やと ねつ ひいた も とてもかゆい 」
569 :
NAME IS NULL:2011/10/30(日) 16:37:46.97 ID:VHdVZn4y
使えないdb
誰が何とかしてくるのか
立ち尽くすような絶望の日歩
さぁ立ち上がろう、
でも糞dbのせいsで経ちあがっれないよぉ・・・
なんでこんなに糞なの?
なんで主きでアクセスsちえるのに治安するの?
誰か教えて
かゆい うま
同じ事を何度も何度も繰り返し書き込むのは、なんて病気だっけ?
むしろ、これbotか?
572 :
NAME IS NULL:2011/10/30(日) 17:14:06.90 ID:VHdVZn4y
同じdbをしつこく使うあば
馬鹿って誰?
信者?それとも病気?W
もっと、もっと罵ってくださいハァハァ
574 :
NAME IS NULL:2011/10/30(日) 17:39:54.62 ID:VHdVZn4y
信者って
きもい
信者ってのがよく分からんけど、このスレに書いてる奴はSQLiteしか使わないとでも思ってるのか?
576 :
NAME IS NULL:2011/10/30(日) 19:28:21.90 ID:VHdVZn4y
うん
なんだ。ただの馬鹿だったのか。
578 :
NAME IS NULL:2011/10/30(日) 19:37:20.91 ID:VHdVZn4y
信者って
どうして阿呆なんだ?
こんな糞dbを後生大事にしてどーなるwww
なるほど。ここ数日間で一番スレに書き込んでるに違いない
>>576は、素晴らしすぎるSQLiteをもっと広めるために頑張ってる、と。
すげぇな。高度すぎて分からなかったわ。
糞dbってだけじゃなくてもっと酷く罵ってくださいハァハァ
581 :
NAME IS NULL:2011/10/30(日) 20:02:27.39 ID:VHdVZn4y
素晴らしいdbですよ
本当に層思います
僕らの忍耐力を鍛えてくれる
いつ帰ってくるかもわからんほど
待たされる
そのいらいらを我慢しなきゅならん
そういう意味では最高の精神鍛錬のdbですよww
582 :
NAME IS NULL:2011/10/30(日) 20:03:21.75 ID:VHdVZn4y
このdbは
僕らに我慢の大切さをおしえてくれましたwww
主キで問い合わせても
糞遅いこともあるんだ
だから我慢しなきゃ
そう教えてくれる最高のdbですよwww
全然我慢できてねえじゃん。
584 :
NAME IS NULL:2011/10/30(日) 22:56:09.90 ID:VHdVZn4y
何でkんな糞使い続けなきゃならんの?
もう限界だわ
見切りつけていいかな?
我慢の限界だわ
別に誰も強要してないんだから、使いたくなければ使わなければいいだろ。
587 :
NAME IS NULL:2011/10/31(月) 00:21:11.03 ID:y87CNCpL
しかし、主キーで検索かけてうのに
何で糞なんだろうな
遅延にもほどがあるんだが
いい加減にしないと
もう二度と使う気が起こらんよ
だってH2でさえ一瞬なんだが
今日の分のNGIDをこんなに早く提供してくれるとは
589 :
NAME IS NULL:2011/10/31(月) 00:41:11.45 ID:y87CNCpL
糞dbなんて嫌いだからね
俺をNGにしたら
一日たりともスレが伸びてないだろw
俺に反応するスレもNGにしてるんお?
まぁ糞信者どもは阿呆だなw
おらくるPさん今日もいっぱい罵ってくださいハァハァ
今日は忙しいのかな?
なんてたってPだからな・・・引っ張りだこなんでしょw
593 :
NAME IS NULL:2011/10/31(月) 20:26:20.52 ID:y87CNCpL
P持ちは本当ですお
経験もそれなりにある
ノウハウも持ってる
だが糞dbだけは使えませんな
提案できませんわ、こんな糞db
>>593 おい、何サボってんだよ。引っ張りだこなのはわかるが書き込み少なすぎだろ。
おらくるPさんもっと…ハァハァ
くるくるPさん…
597 :
NAME IS NULL:2011/10/31(月) 23:44:20.87 ID:y87CNCpL
羨ましいか?
好きこそものの上手なれだ
勿論、金はかかったが
充分元が取れるよ
598 :
NAME IS NULL:2011/10/31(月) 23:44:49.82 ID:y87CNCpL
懐かしいなぁ
試験受けた
今は昔
しかし受験料高いんだよなぁw
高いけど会社持ちだったから別に・・・。
600 :
NAME IS NULL:2011/10/31(月) 23:57:22.52 ID:y87CNCpL
良い会社だねぇ
俺は自費だったわ・・・
いつ取ったの? 9i?
おらくるPさんはもう僕のSQLiteたん罵ってくれないの?
くるくるPさん…ハァハァ
おらおらPさん…ハァハァ
おくらるPさん…ハァハァ
おらくるサボんなよ!
僕のSQLiteたんのこと相手してくれないおらくるPさんなんかもうキライだ!
きらいきらい!
2011 November 1
3.7.9
まあ、DB知らないやつなんだから、何ほざいても、負け犬Pは仕方が無い。
DBってな〜に
2万件くらい入ってるテーブルをselectして100〜200件位を取得しているのですが、
iPhone3GSで大体0.05〜0.1秒かかっています。
これをせめて0.01秒くらいまでチューニングしたい。
create table TBL_A (
COL_A INTEGER NOT NULL
, COL_B INTEGER NOT NULL
, COL_C INTEGER NOT NULL
, COL_D INTEGER NOT NULL
, COL_E INTEGER NOT NULL
, COL_F INTEGER NOT NULL
);
create index IDX_A on TBL_A(COL_A, COL_C, COL_B, COL_D);
select COL_A, COL_B, COL_C, COL_D, COL_E
from TBL_A
where COL_A <= 200
and COL_B >= 100
and COL_C <= 4000
and COL_D >= 3000
;
explain で確認すると
6 OpenRead 0 49 0 9 00
7 OpenRead 1 1323 0 keyinfo(4,BINARY,BINARY) 00
とあるので、キー読みは出来ているのではないかと思うのですが、
そもそも読み方が良く理解出来ていないのかもしれません。
インデックスを COL_A, COL_B, COL_C, COL_D や COL_C, COL_D, COL_A, COL_B、
それぞれ1列ずつ4つ作ってみたりしてみましたが今より遅くなってしまいました。
あと、何か検討出来ることはあるかしら?
>>613 条件式の並べ替えかな。
結果が少なくなりそうな順序がわかれば少し高速化できるはず。
たとえば、COL_D >= 3000 でばっさり300件くらいに絞れるとか
そんな都合のいい条件があれば、それを最初にするといい。
616 :
613:2011/11/08(火) 00:43:27.53 ID:???
>>614さん、レスありがとう御座います。
COL_A〜COL_Dはそれぞれ均等に分布していて、条件の数字は可変なんです。
なので COL_D >= 3000 では確かに300件くらいになるかもしれないのですが、
他のタイミングでは COL_D >= 300 とかになってしまうので、あまり効果が無さそうです。
後だし情報で申し訳ないです。
やっぱり2万件ってのと範囲指定で複数条件ってのが厳しいのかなぁ。
ハードウェア的にはどれくらいの速度が期待できるの?
まさかそれも分からずに0.01秒くらいにならないかなぁーとか言ってるわけじゃないよね
>>617 0.01秒くらいは普通に見込める。
ていうかiPhone3GSって書いてあんだし手元で試せるだろ。
手元にないけど、手元で試せるなら速度でてるってことで万々歳じゃね?
データベースの物理サイズを数メガに分割すると速い。
kwsk
>>618が試してくれりゃあいいんだけどな。
てか、回答もしてやれよと思うわ
623 :
NAME IS NULL:2011/11/10(木) 02:28:33.49 ID:soAweL/z
最近のsqlite3のコマンドプロンプトでは、UTF-8の文字を入力してもビット落ちしてしまうんですけど、この問題に遭遇して解決された方はいませんか?
BASE64エンコードなど
おらくるPさん…ハァハァ
TEXT型のフィールドに0001と入れると1になってしまいます。
仕様ですか?
0001を入れたのか"0001"を入れたのかどっちなんだ
>>627 Navicat for SQLiteでテーブルを開いた状態で入れました
どっちになるんでしょう
630 :
NAME IS NULL:2011/11/15(火) 08:31:49.33 ID:bVKL53qp
メインスレッドでINSERT発行し続けて、
別スレッドでたまにCOMMITするとどうなりますか?
つまりメインで
BEGIN TRANSACTION
INSERT
INSERT
...
BEGIN TRANSACTION
INSERT
INSERT
...
をやっていて、
あるトランザクションでINSERTが出揃った時点で
別スレッドでCOMMITすると、次のトランザクションが(メインで)開始してしまいますが、
ロックされてINSERTできない、みたいなことになりますか?
自分で試せ
632 :
NAME IS NULL:2011/11/15(火) 19:34:21.82 ID:3Q3XMG+/
BEGIN TRANSACTION tran1
処理a
BEGIN TRANSACTION tran2
処理b
COMMIT TRANSACTION tran2
COMMIT TRANSACTION tran1
↑こーゆー感じで実行すると、
COMMIT TRANSACTION tran2 の時点で処理aと処理bがCOMMITされちゃうんですが、
処理bだけCOMMITしたいときはどうすればいいんでしょうか??
ここの荒らしさんも報告したら規制対象にいれてくれるの?
>>632 begin;
savepoint tran2;
release tran2;
commit;
話題無い時は本当に無いな。
一応の保守。
637 :
NAME IS NULL:2011/11/28(月) 03:26:17.05 ID:c+RTLTZb
あったああ
638 :
NAME IS NULL:2011/11/29(火) 06:03:53.66 ID:PoYxGkxU
10万件男の話なんだけど、これ本当に起こっているなら、原因はサイズです。
データベースが一つのファイルで構成されている関係上、性能が劣化しやすいんです。
ここら辺はベンチとればすぐわかります。
プラットフォームの性能で変わるので一概に言えないのですが、個人的に10GBを
一つの目安としています。
64ビットのOSでは制限が緩くなる可能性があります。
ファイルサイズとメモリーの関係について文書が用意されていたはずです。
BLOBに写真を突っ込むような使い方をする場合、設計をよく考えなければなりません。
ネタにマジレスすんなよ
データ型TEXTのフィールドに、改行を含んだ文字列を書き込みたい場合、
SQL文はどのように書けば良いのでしょうか?
どなたかアドバイスを頂けると助かります。
よろしくお願いいたします。
念のために聞くが、SQLiteの話だよな?
何が聞きたいのかさっぱり分からん。
SQLiteは改行を含む文字列がTEXT型フィールドに入れられるか、という質問?
→だとしたらYES。普通のinsert文でOK。
TEXT型フィールドに改行を含んだ文字列を入れたらエラーになったが、どうすればいいか、という質問?
→だとしたら問題のSQL文を書くこと。
SQLiteに限らず、SQL文全般の質問
→だとしたらスレ違い。
sqliteのコマンドラインツールから操作するときの話じゃね?
自演っぽい
っぽいというか。
テーブルで初期に設定したフォーマットを出力するにはどうしたら良いですか。
648 :
647:2011/11/30(水) 21:32:13.02 ID:???
自己解決しました
>>633 >>644 そうそのコマンドラインツールでの話です(^_^;)
コマンドラインでテキストを挿入する際、
改行コードを入れるにはどうするのでしょうか?
650 :
649:2011/11/30(水) 23:14:04.33 ID:???
>>650 普通に改行すれば改行コードごと入るけど馬鹿なの?
皆様にはくだらない質問でしょうが聞いてください。
あるテーブルのある列を集めて別のテーブル(ビュー)を作るのがリレーショナルデータベースだと分かりました。
では、そのビュー(テーブル)自体を一つのレコードとして集めたテーブルを作るのはリレーショナルデータベース
ではどうするのでしょうか?
例えば、十月売上品テーブルを作るのにメーカーテーブルや色テーブルから列を集めたのですが、
その売上品テーブル自体を一レコードとする年間売り上げ品テーブルを作るには
どうしたら良いのでしょうか?
group byしてsumする
以下のような状態でprimary keyに対してlike演算子を使用したのですが
検索が非常に遅くなっています
これをはやくする方法はないでしょうか
create table dictionary(spell text primary key, content text);
select * from dictionary where spell like 'run%'
656 :
647:2011/12/02(金) 22:24:04.54 ID:???
>>656 それ SQL Server の記事みたいだけど SQLite でも使えんの?
662 :
NAME IS NULL:2011/12/12(月) 12:58:12.11 ID:yToQ1TQG
ためになったよ
pysqlite3 いいね
sqliteのDBが壊れたので修復を試みています。
具体的には壊れたDBをdumpして、DB新しく作り直しています。
殆どデータは修復出来ましたが、データの一部が消失しているようで
、なんとか修復したいのですが、何か良い方法はありませんでしょうか?
よろしくお願いします。
無理
>>664 > データの一部が消失しているようで
何をもってそう判断したのか知らないけど、"消失している"なら修復できないだろ。
SQLiteは魔法ではありません。
>>666 了解です。
dumpして修復できない場合は、もう無理と言うことですね。
ありがとう御座いました。
壊れたってどういうことだろう。
間違えて(またはバグで)レコードを消したことを指してる気がしなくもない
どうやったら壊れたのか知りたいところ
>>669 androidアプリを作っているんですが、sqliteを使ってデータを保存しています。
複数のスレッドで排他制御せずに同時にアクセスすると、dbが壊れる事があるようです。
>>670 sqliteは排他制御してても壊れるから心配するな
>>671 排他制御してても壊れるんですか?
それはどんな状況で発生するのかな。
書き込み中に電源切ってみれば分かるだろ.
ほかのRDBMSだとそれをしても大丈夫なんですか.
そんなのどうすりゃいいんだ。
一セッション毎のバックアップは必須だな。
て言うか排他制御関係ないだろ。
SQLiteってログ無いだろ
ログが欲しかったら出せばいいだろw
tksqliteって表示するテーブルの容量に制限あるんでしょうか
ある程度大きいサイズだと致命的エラーが出ます
あるとしたら何バイトでしょうか
>>684 700MB程度のテーブルもひらけないですね
メモリの使用状況見ると、70MBのテーブル開くのにも210MBくらいメモリ食っていたので
単純にメモリ不足で開けなかったっぽいです
まさか3倍も使うとは思ってませんでしたorz
Pup's Sqliteでも同じくらいメモリ食って開けないので
自分の環境向けにテーブルを小分けにするしかなさそうです
全件開こうとしてんの?
名前からするとGUIのツールっぽいが、もしかしてそのツールでテーブルを「開く」と
全件表示しようとするんじゃないだろうか。
いずれにしても、使うツールのためにスキーマ変更するというのはバカらしいが。
両方ともおそらく使用ライブラリがSystem.Data.SQLite
非同期型にアプリ側で実装されてると
一旦メモリに全部読み込むんだが
UTF16で文字列はロードするので
DBファイルがUTF8だったとき
ANSI文字がまず2倍
あとダーティフラグなんかもつくんで
三倍くらいいってもおかしくない気がする
sqlteで検索したい文字のなかに「:」とか「;」などがあるときはどうすればいいでしょうか
ふつうに’’で囲えば良いんじゃないの?
select * from foo where bar like '%;%';
>>691 すいません
なんか勘違いしていたみたいで普通に出来ました
sqlite3でひとつのテーブルに100万件のレコード管理するのって無謀ですか?
平気
かな?
一気に読み込むときは10万行はきつかった
しかし別に俺が疲れるわけでもないしな
>>693 1000万件ぐらいならやったことあるけど。
AutoCommit さえオフにすれば全然おk
3.7.10
SQLiteをCGIで使う場合、マルチプロセスで同一ファイルに同時アクセスすることになりますが、
問題ないでしょうか。
たぶん問題ないと思いますが、念のため聞いてみました。
またマルチプロセスで同時にデータベースファイルを開く時に、なにか気をつける点があればおしえてください。
>>700 なにが「問題ない」のか、その質問だけじゃ読み取れないので答えようがない。
>>700 lockingはファイルロック=DBロックになるので、用途によっては使いものにならない。
素直にPostgreSQLやMySQLみたいなものを使ったほうが幸せになりやすい。
>>701 マルチプロセスで同じデータファイルを操作しても、データベースが壊れたり不整合が発生しないかどうかという意味です。
>>702 それはロックの粒度が荒いので、性能がでないという意味でしょうか。
性能はひとまずおいておくとして、今は不整合が発生したりファイルが壊れたりしないかどうか、教えて下さい。
別プロセスだろうがちゃんとロックされるから安心しな
親切なことにw SELECT発行するだけでもDB全体がロックされる
読み込みだけの操作でもCOMMITするまでロックしっ放しの親切設計だ
つかそんなに心配ならDB使わなきゃいいんじゃないの、と。
>>702 1行目には賛同するが2行目には同意できない。
んなもん「用途による」としか。
>>706 >>700がCGIで使う場合って書いているでそ。そんな用途では「素直にPostgreSQLやMySQLみたいな
ものを使ったほうが幸せになりやすい」のは確かでそ。
なんでそうなるかなぁ。
全ての Web がガンガンアクセスされてるわけじゃないでしょ?
うちの自宅サーバーみたいに1リクエスト/日かも知れないよ。
それでもアクセスが重なる可能性は 0 じゃないから、
ロックしててもいいから不整合は避けたいって言うことなら、
簡単な SQLite の方がいいと思うけどね。
>>704 >別プロセスだろうがちゃんとロックされるから安心しな
了解しました。その答えが欲しかった。ありがとうございます。
>親切なことにw SELECT発行するだけでもDB全体がロックされる
>読み込みだけの操作でもCOMMITするまでロックしっ放しの親切設計だ
たしかに同時接続が多い場合は困るでしょうね。
>>708 >それでもアクセスが重なる可能性は 0 じゃないから、
>ロックしててもいいから不整合は避けたい
まさにこの通りです。703に書いたように、性能はひとまず置いてて構わないので、
データの破損や不整合は何としても避けたいという事情です。
普通にMovable Typeとかでも選択できるDBなんだから心配する必要なくね?
>>710 MovableTypeって基本的にhtmlを静的生成だし、用途的に書き込みアクセスは
極端に少ないから、あんまり参考にはならないと思う。
だから用途次第ってことだろ。
715 :
NAME IS NULL:2012/03/07(水) 01:07:14.99 ID:dQiolw7D
PupSQLiteってビューは編集できないんでしょうか?
テーブルは編集できるけど。
そもそもSQLiteってビューの編集に対応してるの?
え、ALTER VIEWないの?( ゚Д゚)ポカーン
UPDATEのことでしょ
え、ビューの定義編集の話だったの?スレの空気を読めずにごめんね
こちらこそ説明不足ですみません。ALTER VIEWのことでした。
そもそもSQLiteにそのコマンドがないんですね・・・それは思いつかなかったw
DROPしてCREATEし直すしかないんですね。
SQLite Consortiumのメンバーが増えてる。
どちらにしてもなかったのね。
お騒がせしました
System.Data.SQLiteってもしかしてAndroidじゃうごかんの?
>>723 C#のライブラリはJavaでは使えません
>>724 full-managedなら、monodroidで動くかもね。
SQLiteのは、ネイティブとの混合だから無理そう。
ビューって定義のときに
テーブル名.カラム名 AS 新カラム名
をちゃんと定義しないとダメなの?(カラム名と新カラム名が同じでも)
PupSQLiteとかWindowsのPHP(pdo)だとエラーにならないんだけど
レン鯖のPHPからだと「そんなカラムねーよ!」っていうエラーになる(´д`;)
実行環境の情報を隠す悪い子には教えてあげますん
>>727 あ、すんません。んと、何の情報晒せばいいのかよくわかってないけど
レン鯖はこんなかんじ↓
PHP Version 5.2.17
pdo_sqlite
PDO Driver for SQLite 3.x enabled
PECL Module version (bundled) 1.0.1 $Id: pdo_sqlite.c 293036 2010-01-03 09:23:27Z sebastian $
SQLite Library 3.3.7
で。エラーメッセージと再現コードは…?
小数点ありの数字をINSERTしてSELECTするとマイナスとか付いた文字列に変換されるのだけど仕様ですか?
>>731 REAL型? 普通に使えてるけどなぁ。プログラムの中で変なキャストしてるとか・・・
どもです。
REALも試したけれど、コールバックのchar **columnValuesにマイナスとか付いたのが返される。
ORDER BYで降順にならない
ソース見たらすべて解決するだろ
再現する最小のソースでいいから出してみ
ありがと
事故解決できました。
あまりにも恥ずかしいミスをしてた、、、orz
ここにどんなミスだったか書いてくれると、今後同じバグを出した人の参考になる。かもしれない。
仕方ない、あまりにも初歩的なミスで恥ずかしいけど
//#define INSERT_TABLE "INSERT INTO average (id, numbaer) values (%d, %d)" <-- ミスです
#define INSERT_TABLE "INSERT INTO average (id, numbaer) values (%d, %f)"
イシンバエワ思い出した
どんまいw このスレに人がいるだけで嬉しい( ´∀`)
740 :
NAME IS NULL:2012/03/21(水) 19:48:56.37 ID:Ny2BPNOP
例えば
●高校 ×学年 ■組 みたいなのを主キーで表すと1となるんでしょうか?
では外部キーとは何ですか?
よくわかりません
741 :
NAME IS NULL:2012/03/21(水) 19:53:03.95 ID:Ny2BPNOP
主キーと外部キーの違いがよくわかりません。ご教授お願いします。
おいおい迷える子羊は今どこにいるんだ
あなたのお腹にいますよ
中に誰もいませんよ
>>741 よし分かった。わかりやすく俺に御教示してくれ
あー、教授と教示の違いね、それ恥かくだけだからやめておいたほうがいいよ。
2chだからネタで、言ってみただけ。
普段はそんな揚げ足取りはしないよ。
揚げ足の取り方を間違えておいて何を。
むしろ2chのほうが普通のとこよりも
そういうのするのダサい場所だよな
>>746 教授でも意味は通じるよ。
よりずうずうしいけど。
BLOBがORDER BYできないんだけど、バグ?
753 :
NAME IS NULL:2012/03/29(木) 16:23:33.66 ID:bq4KjbwI
sqlite3_clear_bindings() ってみんな使ってる?
おれはつかっていない。
>>753 使ってないっす
CREATE TABLE table (a INTEGER UNIQUE, b INTEGER) したデータベースから
SELECT * FROM table WHERE a = %d した時に b の降順(ORDER BY b DESC)で並べ替えた順番を知る方法ってありますか
いまはORDER BY b DESCした全データを使って新しくデータベースを作って
そこからSELECTしてます。
?
SELECT * FROM table WHERE a = %d ORDER BY b DESC
じゃだめなん?
説明不足な質問に答えていただきありがとう。
そーなんだけど
見つかった a が b の並び順の何番目になっているかってのが知りたいのです。
SQL質疑応答スレ向きだな
select a, (select count(*) from table as t2 where t2.b > t1.b) from table as t1 where a = %d
そー言うスレがあったのか、、、
ありがとです。
で、つらつらと眺めてみたけどなかなか馴染みにくいわぁ >SQL
select a, (select count(*) from table as t2 where t1.a = t2.a and t2.b > t1.b) from table as t1 where a = %d
じゃないかな
こんなSQL文を読み込んで処理しているプログラムの中身に興味が沸いてきた。。。
763 :
754:2012/04/14(土) 20:46:31.36 ID:???
>>759 >>761 プログラムの方向転換があって今は必要なくなってしまいました。
時間があれば試してみます。m(_ _)m
方向転換・・・
設計の方向性の違いにより解散
すみませんSQLiteはVALUESをまとめて使えますか?
INSERT INTO TABLE_NAME1 ('COLUMN_A', 'COLUMN_B')
VALUES
(VALUE_A11, VALUE_B12),
(VALUE_A21, VALUE_B22);
むう個別にINSERTするようにしたら動いたんで対応してないのかな・・
通常はprepared使うもんじゃないだろうか
>>768 てっきりBEGIN〜COMMITで囲めばいいと思ってました
preparedってこういう時に使うんですね。勉強になります
>>769 むぅ、最近だとまだ共用サーバーでは使えないですね > <
ありがとうこざいましたm(__)m
sqlite3_mprintf をもっとガンガン使おうぜ
有効でなければANDやNOTとORの組み合わせができないだろ
ですよね。
まさかまさか無いのかと思ってどうやってand or not組み合わせればいいのか頭をひねってました。
ありがとうございます
>>772 質問する前に試せ。
手間じゃないんだから。
英語は読みたくないんだろうなぁ
SQLiteの日本語の本は良いものがないからなあ。
lemonの使い方を教えて
梶井基次郎を読めばわかる
まだ上げそめし前髪の
林檎のもとに見えしとき...
それ違う
それにしても心といふ奴は何といふ不可思議な奴だらう。
その檸檬の冷たさはたとへやうもなく良かった。
select load_extension('xxx.so');
したときに改行が出力されてしまうのですが、何も出力しない方法はありますか?
具体的にはコマンドラインから
> sqlite3 -list aaa.db 'select load_extension("xxx.so"); select * from tbl;'
という使い方をしています。
よく分からんのだけど、改行されると困る理由は…?
>>786 シェルの標準IOでそういうコマンドがあるんですか?
¥rのことならダメです。
見た目の問題ではないので。
改行されると困る理由は?と、
>>785と同じ疑問をぶつけてみるよ
>>789 その出力を使う別のプログラムが居て、空白行を期待していない、というだけ。
>>788 外部でsed挟むか・・・
SQLite内ではムリ、ということでよろしいですか?
SQLiteのライブラリを直接叩くんじゃダメなの?
.loadとか.outputとかは?
>333
応用まで対応できるか分からないけど、SQLのリファレンスの本買ってきて、
SQLiteってDBをいじると感覚的にSQLとDBが分かると思うよ。
SQLiteの参考サイト多いし、フリーのツールも多くある。
手軽で勉強にもピッタリよねsqlite
sqlの強化を少しして欲しいかな
cteとwindow関数が使えるようになってくれたら申し分ない。
cteは嫌い
嫌いだったら使わなければ良いだけじゃん。
標準化されてて(SQL99)主要DBが実装してる機能を
嫌いだからって実装しないのは違うと思うぞ。
・実装済み
Oracle
DB2
SQLServer
Sybase
PostgreSQL
Firebird
window関数は正直sqliteクラスじゃ必要ないと思うが
withは便利だと思う。
797 :
NAME IS NULL:2012/06/08(金) 22:42:10.65 ID:XSSaqzr4
1つのDBに4つテーブルを作ったんですが
SELECT * FROM sqlite_master WHERE type='table' order by name
で取得できるテーブル名が1つです。
別アプリでファイルを見るとちゃんとテーブルは出来ているのですが、複数テーブルがある
場合にテーブル名を取得する方法ってまた別にあるんでしょうか?
どうせアプリにそのクエリ埋め込んだはいいものの
一行しかとってきてないってオチ
コマンドラインから試してみな
>>798が正解ならSQLite云々とかじゃなくてコーディングのレベルが低すぎる…。
800 :
797:2012/06/09(土) 10:19:10.60 ID:ucCrRTp2
>>798-799 こんな感じです。
$conn = new PDO("sqlite:" . $dir . "" . $file);
$sql = "SELECT * FROM sqlite_master WHERE type='table' order by name ";
$stmt = $conn->prepare($sql);
$stmt->execute();
while($row = $stmt->fetch())
{
echo $row['tbl_name'];
}
コマンドラインで出来ればいいのですが、制約多くてコマンドラインが試せない環境だったもので。
2回目のfetchは?
まず、SELECT COUNT(*) で取得件数をチェックして問題切り分け
3.7.13
804 :
NAME IS NULL:2012/06/12(火) 18:06:25.53 ID:WjdPxXde
sqlite3でInsertした際のinsertid取得がうまくいきません。
$result = $connect->prepare($sql);
$result->execute();
$id = $result->{mysql_insertid};
var_dump( $id );
結果はNULLなんですがデータは正常に追加されています。
MySQLしか使ったことがないので、この使い方自体があっているかどうかが不明なんですが
間違いあればおしえてもらえないでしょうか。
>>804 何の釣りか知らないけど質問する時は実行環境も書くこと。その質問じゃ何言語かすら分からん。
で、貴方が書いたコードには「mysql_insertid」とかいう、MySQLを連想させるワードが入っているけど、これは正しいの?
800は解決したのか?
807 :
sage:2012/06/12(火) 21:51:06.19 ID:???
sqliteの場合はlast_insert_rowidだったと思う
$sql = "select テーブル名 last_insert_rowid";
だったかな。今sqliteの環境ないからわからんけど間違ってたらこれでもかってくらい激しい突っ込みあると思う
たぶん"select last_insert_rowid() from table;"かな。テーブル名は必要ないかもしれん。
と言うか環境云々の前に
>>807はSQL構文的にアウトっぽい…。
既出かもしれないけど、SQLiteは"integer primary key"な列がある場合には、
それをrowidとして扱い、それ以外なら別にrowidが振られる、という仕様だったと思うので、
前者なら上の関数で返るのは最後に挿入したプライマリキーの値になるはず。
# その場合に"mysql_insertid"ってのと同等機能になるのかは知らんよ!
詳細は公式ドキュメントを。
インデックス生成が遅くてかなわん
整数値3列 x 1億行程度のインデックス生成になぜ3日もかかる
質問なら再現コードと実行環境を貼ること。
独り言ならチラシの裏に書くこと。
命令なら嫁に言うこと。
確かにインデックス作成はPgやMySQLと比べて糞遅いよな。
値に偏りがある場合は特に酷い。
SQLiteの悪口は言わないこと。
2chで何を言ってるんだw
うむ 確かに
816 :
sage:2012/06/20(水) 17:05:03.14 ID:???
db-journalというファイルがたまに生成される時があるんですが、
特に作成を指示するようなコマンドは出していません。
これは何か作成される条件があるんでしょうか。
環境はSQLite3 / PHP5.3 / CentOS6.2
たまにじゃないだろ
819 :
sage:2012/06/20(水) 20:45:10.86 ID:???
>>818 文字とおりたま〜に出来ます。
なのでなぜ出来るのか不思議で。
たしかにたまにできるな
>>816 トランザクション有効化した場合にコミットするまでの間作られる、というようなことがたぶん
>>817のリンク先に書いてある
トランザクション中に鯖が落ちてjournalファイルがゴミとして残ることがたまにある
ゴミが残ったままのせいで新たにトランザクション開始出来なくなるっていう
もともとSQLiteのトランザクション制御は信用してはいけないので
なるべく自前でやるようにしたほうがいい
827 :
sage:2012/06/23(土) 10:23:32.06 ID:???
ひとつの接続でselectやuploadやinsertが出来ないとかあります?
それぞれ単体ではちゃんとできるんですが、1個の接続でやろうとすると失敗します。
selectで検索した結果をinsertしたりupdateしたいのですが。
>>827 質問する時は人に分かるように書くこと。
1行目 → 「ひとつの接続」の意味が分からない。
2行目 → 「それぞれ単体」「1個の接続」の意味が分からない。「ちゃんとできる」「失敗します」がそれぞれどういう状態なのかも分からない。
3行目 → 普通にできる。
829 :
NAME IS NULL:2012/06/24(日) 10:00:13.15 ID:ECwSEUIK
「ひとつの接続」
「一個の接続」
要は「一回データベースを開いてそのコネクション内で複数のコマンドを動かすことはてきるのか」ということではないかと。
「それぞれ単体」
操作毎にコネクションを張り直す、ということかと。
つまりインサートのためにコネクションを張り、完了したらコネクションを切り、
セレクトのためにまたコネクションを張る、とか。
まあ、
>>829 ぐらいは想像付くけど、「「失敗します」がどういう状態なのかも分からない」から
誰も答えようとしないんだろ。
要するに、答えが欲しけりゃ「質問する時は人に分かるように書くこと。」を実践しろってこった。
それぐらいエスパーでなくてもわかるだろ。
834 :
sage:2012/06/25(月) 11:23:26.69 ID:???
sqliteはDB全体を暗号化するような関数あったりしますか?
sqlite 暗号化 でググればわかるよ
836 :
sage:2012/06/25(月) 17:23:16.30 ID:???
SQLiteを使い始めたものです。
selectについて質問させてください。
部分一致検索をしたいのですが対象となるワードを%で囲むと一致しなくなります。
SQLiteでの検索では%による曖昧検索は使えないのでしょうか。
使えないか使えるかで言うと「使える」
君ができないからって「できないのでしょうか?」って言い方は
sqliteを見下しているように聞こえる
あなたの場合、環境を書いた上で
「曖昧検索のやり方がわかりません。どのようにするのでしょうか?」が正しい
like検索?
ftsでのmatch検索?
もわからん。。
ていうか環境はおろか、クエリも書かないってどないじゃ。
知らない間にエスケープされてたと推測
explainの読み方がさっぱりわかりません。
公式は英語だし・・・
なんか視覚的にわかるツールとかないでしょうか?
難しい情報はみてもわからないので
そのクエリが早かったか遅かったかだけを知りたいので
何msで結果が返ってきたとかそういう単純な情報がほしいです
>>840 そのクエリが何msで返ってきたかを計測すればいいと思うよ。
難しい情報を見て分からないなら、見て分かるようになるまで勉強しましょう。
あと、英語だから分かりませんは、たぶん通用しないよ。
cpu使用時間でいいのであれば
.timer on
実際の時間となると
>>841だなぁ。
アプリで計測するか、シェルでtimeコマンド使うとか。
ただ、explainの結果くらいわかるようにならないと、
実行時間だけで見てると、クエリの潜在的な問題を見落とすことになるぞ。
ていうか、
意図したように実行させるクエリが書ければ、
explainの結果も自然と読めるようになると思う。
現在のRDB製品ではどうしても物理パスを意識しなければならないという、
SQL仕様自体の欠点だな。
>>841-842 ツールの類はないってことですね?
アプリケーションじゃ純粋な実行時間はわかりませんが
どちらが早いかの目安にはなるのでそれでいこうと思います
ていうかすごいですね
みんな読めるのが普通なのか・・・
僕にはアセンブラコードと変わらないよorz
自分がチューニングするしかない立場にいるのであれば、読めるようになるのは必須だけど、
英語きついお;;ってことは、そういう立場でもなさそうだし。
自分がやるしかないけど、勉強中なんだってことなら、ほかに優先すべき学習内容があるならそちらを優先してもいいと思う。
読めるのが〜、ってexplainの結果の話だと思った。
英語は俺も苦手だが、アメリカ人が作ってアメリカ人が保守しているものを使おうとしているんだから読む覚悟は必要。
え、explainの話でしょ?
847 :
842:2012/06/25(月) 20:37:38.20 ID:???
あ、俺何か勘違いしてたかも。
explainててっきりexplain query planのことだと思ってたけど(これくらいなら誰でも分かりそうなのになぁと)
そっちのexplainのほうか。
確かに内部のopcodeとかここまではそうそう必要なさそうな気がする。
>>836 聞きたいのは部分一致検索?曖昧検索?
%による「部分一致」検索なら当然できるけど。
>>836 部分一致をしたいときは like を使うよ
ドリームジャーニーの種付けは何頭ぐらい終わったの?
すまん誤爆した。
LIKEに似たGLOBっていう演算子もあるね。
他のDBとは互換性ないけどね。
カラム列の中に含まれる文字データの文字数の最大文字数を取得剃る方法ないですか?
854 :
NAME IS NULL:2012/06/29(金) 20:07:57.15 ID:TKFPaofb
時間の比較をして今の時間より前の時間であればDELETEしたいと思っています。
$now_time = date('Y-m-d H:i:s');
$sql_delete = "DELETE from test_tbl WHERE limit < $now_time";
WHEREで一致したものを削除したいのですが、これではダメなようです。
SQLiteで時間の比較はどのように行えばよいでしょうか。
>>853 select max(length(カラム列)) from テーブル
だとダメなの?
>>854 delete from test_tbl where limit < datetime('now');
だとダメなの?
>>854 limit 列に入ってる文字列の書式
date 関数が返す文字列の書式
が示されないことにはねえ…
それ以前に、$sql_delete の内容確認した方がいいと思うぞ。
くぉーとしてないからってだけじゃないの?
ぶぉーとしていたんだな
>>854 LIMIT は予約語
日時の比較はjulianday()でepoch秒にしてから
CREATE TABLE tc (n TEXT, t DATE);
INSERT INTO tc VALUES('A', date('2021-12-21'));
INSERT INTO tc VALUES('W', 'now');
DELETE FROM tc WHERE julianday(t) < julianday('now');
SELECT count(n) FROM tc;
>>853です。
遅くなったけどありがとう。できました。
>>860 日付の文字列書式が合ってれば、わざわざ epoch 秒に変換しなくても文字列比較で良くね?
国が違うと面倒くさい
perl5.8.8でCGI作ってて不思議なことが起きたので知ってる人がいたら教えてください。
ビューからデータをSELECTする時、WHEREを使うとSQLite3.3.7でno such columnとか言われます。
CREATE TABLE test(a TEXT, b TEXT, c TEXT);
INSERT INTO test VALUES('123', '456', '789');
CREATE VIEW testview AS SELECT test.a, test.b, test.c FROM test;
SELECT * FROM testview WHERE a='123'; #←WHEREを入れるとaがno such columnって言われる
SELECT * FROM testview; #←WHEREを入れなければ問題ない
これはSQLiteのバグ?俺の頭のバグ?
自宅鯖(3.6.13)だと起きないんだけどレンタル鯖(coreserver.jp)が3.3.7だから困る…
867 :
865:2012/07/03(火) 08:18:18.34 ID:???
>>866 どうもありがとうです。
CREATE VIEW testview AS SELECT a, b, c FROM test;
にしたら、エラーは出なくなりました。
3.3.7では「テーブル名.カラム名」という書き方はNGなのかな。
いかんせんDB始めたてでまだまだよくわかってないです。
868 :
865:2012/07/03(火) 08:21:06.99 ID:???
CREATE VIEW propview AS
SELECT tableA.fid, (略), tableB.year FROM tableA
INNER JOIN tableB
ON tableA.fid=tableB.fid
実際のビュー定義は結合を使ってるので、「テーブル名.カラム名」がNGだとさてどうしたものかと。
ビューを使わない方法を考えないといけないのかな…
[tb].cl
tb.[cl]
[tb].[cl]
上記[]を``にする
とかやっても駄目なの?
View 作るときの select test.a に
as a とかつけるんではいかんのか。
普段ROM専で忍法帖なんて持ってないから制限がきっつい…
>>869 全通り試してダメだったけど、想像で"tb.cl"ってやってみたら通りました。
でも単純なクエリなら期待通りに動作するけど不可思議動作することもちらほら。
3.6ではcl tb.cl "tb.cl"等の書き方によってなぜか結果が違ったり。
不思議です。
>>870 SELECT test.a AS a
で魔法のように解決してしまいました。
今日一日の苦労はなんだったのだ…
素人でごめん、どうもありがとうでした。勉強になりました。
ある整数型のカラムnumがあって、
その内容が、100以下の素数であるレコードだけ抜き出すために
SQLを簡潔に書く方法はありますでしょうか
where num=2 or num=3 or num=5 (略) num=89 or num=97
と書いてもいいんですが、
たとえば
where num={2,3,5,7,11,(略),83,89,97}
のようなまとめた書き方があったら教えてください
876 :
NAME IS NULL:2012/07/06(金) 10:55:54.73 ID:sgE42f78
iPhone用アプリとしてXcodeとSQLiteでメニューをデータベースにして、
オーダーエントリーシステムを作ろうと思っているのですが、
SQLiteのデータベースから特定の範囲を指定して呼び出す方法がありましたら
ご教授頂きたくお願い申し上げます。
具体的にはカテゴリーとして「パスタ」「サラダ」「ドリンク」等があり、
テーブルビューのリンクを、それぞれの名称にした上で、
そのカテゴリーの範囲内のみをリンクで表示する場合です。
>>876 select * from メニュー where カテゴリー = 'パスタ';
とか。SQL 勉強しなよ。
878 :
876:2012/07/06(金) 15:07:15.87 ID:sgE42f78
>>877 早速ありがとうございます。
-(void)readWordFromDatabase {
db = [FMDatabase databaseWithPath:databasePath];
aryDatabase = [[NSMutableArray alloc] init];
[db setLogsErrors:TRUE];
[db setTraceExecution:TRUE];
if (![db open]) {
NSLog(@"Failed to open database");
return;
}
else {
NSLog(@"Openned database successfuly");
}
FMResultSet *rs = [db executeQuery:@"SELECT DISTINCT * FROM menu"];
while ([rs next]) {
//int aID = [rs intForColumn:@"id"];
int aPk = [rs intForColumn:@"pk"];
int aCategory = [rs intForColumn:@"category"];
int aPrice = [rs intForColumn:@"price"];
//int aCt = [rs intForColumn:@"category"];
NSString *aCtname = [rs stringForColumn:@"ctname"];
NSString *aName = [rs stringForColumn:@"name"];
singleStudent *sStudent = [[singleStudent alloc] initWithData:aPk :/*aID :aCt*/aCategory :aPrice :aCtname :aName];
[aryDatabase addObject:sStudent];
[sStudent release];
}
[db close];
}
今、現状がこうなっていのですが、イメージとしては、テーブルビューのメニューで、
データベースはひとつのファイルのまま、パスタ、サラダ、ドリン等のカテゴリーから
パスタを選ぶと、ペペロンチーノ、カルボナーラ、アンチョビとキャベツのパスタ
といった様に、各商品が選べる様にしたいのですが、現状で、パスタのメニューの数だけ、
パスタ、パスタ、パスタ、パスタ、パスタ、パスタ、パスタ、と表示されてしまうので、
カテゴリー毎にまとめられないかと思っていたのですが、可能でしょうか?
なんじゃこの質問の仕方
どこをポイントにしたいんだ?
クエリか?
テーブル構造か?
それともコードか?
最低でも現状のテーブル構造とか出せる情報は出してよ
普通はカテゴリマスタとメニュー商品マスタ作って結合するだろ
何をしていいか分かっていないんだろうねw
>>873-874 where とか in 句の数とかって上限なかったっけ?
100 までの素数ぐらいだったら大丈夫かな。
もっと大きいところまでやるなら、素数テーブルを用意して
select テーブル.* from 素数テーブル left join テーブル on 素数テーブル.素数 = テーブル.num;
とかかな。
sqliteLimit.h
# define SQLITE_MAX_SQL_LENGTH 1000000000
# define SQLITE_MAX_EXPR_DEPTH 1000
$ for i in {1..1000}; do stmt="${stmt} OR id = ${i}"; done
$ echo -n "SELECT name FROM people WHERE id = 0 ${stmt};" | sqlite3 entry.sqlite3
Error: Expression tree is too large (maximum depth 1000)
883 :
881:2012/07/07(土) 05:38:53.25 ID:???
>>881 ぼけてるな > 俺
left じゃなくて、inner だった。
>>882 なるほど、1000 もあれば大抵大丈夫か。
>>878 あーわかった
メニューにはカテゴリ名が直接入ってて、それでグルーピングしたいってことね。
select カテゴリ from メニュー group by カテゴリ
アプリでもSQLでも出来るだろうけどカテゴリごとに件数数えるとかじゃなければ、
普通はカテゴリだけならカテゴリだけのテーブルから名前を持ってくる。
メニューのテーブルにはカテゴリの名は直接入れちゃダメ
そういうテーブル構成になってないんならそう作り直したほうが良い。
どうせ宿題でしょ?正規化とか結合でググるんだ
メニューテーブルmenu(メニューに関する属性のみ)
menu_id menu_name price menu_desc cat_id
カテゴリテーブルcategory(カテゴリに関する属性のみ)
cat_id cat_name
メニューを出す時にカテゴリ名も引っ張ってきたい時は結合を使う
select
menu_name,
cat_name
from
menu m left join category c
on m.cat_id = c.cat_id
where
price <= 2000
とか。俺だったらクエリで出来ることはなるべくクエリでやる。
885 :
NAME IS NULL:2012/07/08(日) 00:28:32.91 ID:O1K9KaSi
DATETIME型のレコードを使っていて、それを日別にカウントしたいとき
GROUP BY date(ctime)
とすると、EXPLAINで見るとインデックスが使われずに full scan となってしまうのですが
良い方法ないでしょうか
どう考えてもフルスキャンが一番早いだろ
>>885 基準日からの日数列を作って、それで group by するとか。
MySQLだとちゃんとインデックス使ってくれるので、クエリプランナが弱いのかな
非正規化するしかないっすかねぇ
グルーピングの時にカバーリングインデックスが使えるならインデックス見たほうが早い。それだけですむから。
そうでなければ全体に対する必要部分の行数でどっちが早いか変わってくるでしょ。
アーキテクチャの違いもあるので、一概にインデックスさえ見れば早いということは言えんのだ。
autoincrementでつけた主キーをselect以外で取得する方法はありますか
主キーはインデックスが自動的につくられるんですか
>>890 select * from sqlite_sequence;
>>892 要件をよく読め
> select 以外
894 :
NAME IS NULL:2012/07/12(木) 09:53:17.54 ID:ynTShOVI
sqlite3のdbに " を含む内容を登録したいのですが " 以降が登録されません。
sqliteの中身は以下です。
$query = $con->prepare("SELECT * FROM sample WHERE list=?");
$query->execute(array($list));
$listの中身は"を何個か含む200文字程度の内容になります。
array の意味がわからん。
なんで $list 直接指定しないの?
896 :
894:2012/07/12(木) 13:06:39.03 ID:+vrI1x3+
エスケープとかプレースホルダーを使っている場面やクエリーの増減があるため使いまわしていたためです。
特に問題がなかったのでarrayで渡してました。
なんで登録したいのに提示したSQLはselectなんだよw
>>896 >エスケープとかプレースホルダーを使っている場面やクエリーの増減があるため
文脈がよくわからん…
array 外すか array の中身を晒すかどっちかにしてくれ
>>897 ほんとだワロタw
それじゃ " 以降がどうこう以前に行自体登録できるわけないじゃん
899 :
sage:2012/07/13(金) 09:26:52.79 ID:???
仮にarrayの中身が
aaaaaaa"fuga"bbbbbbb
としたら\でエスケープしてもダメなんだっけ?
エスケープすれば問題ないし、プレースホルダ使ってればエスケープする必要もない
>>899 \ 自体も適切にエスケープしないといけないなど面倒だから、
使える環境ならプレースホルダ推奨。
主キーはお気に入りなんですよ。
だい主キー とか言ったりしてな!
かなり酒呑んでるようですがw
ちょいと質問してもいいかい?
何の用途でsqliteを使ってるの?ちょっとした自作プログラム用?
大企業の基幹システムで使っております
業務ではメールサーバのアクセスログ解析のための中間データ置き場として、
プライベートではTwitterの自作botの元データ蓄積場所として、
日々お世話になっております
C# SQLite
80台のパソコンで共有フォルダがあります
そこに1つのSQLiteDBファイルをおいて
80台のクライアントから10秒ごとにselectするのは無謀でしょうか?
データ更新は1日に20回くらいしかないのですが更新されたら即座に通知したいと思っています
テーブル設計、
データ量、
取得クエリ、
実行するマシンのスペックによって
余裕だったり、きつかったりするよ!
共有フォルダって、SQLiteのプログラム自体は各クライアントにあるの?
共有のシステムにもよるが多分破綻するぞ
素直にSQL Server Expressとか使えばいいのに
その規模だとタダでつかえるDBがたくさんあるのにSQLiteに固執する
意味がわからない
>>908 まずは用途と、SQLiteを使わないといけない理由を。
その上で、どうしてもSQLiteを使うなら、せめて各クライアントからは直接DBを叩かずにサーバ側のSQLiteで一括して処理するようにするべき。
80台のクライアントから同じ共有ファイルに同時アクセスし続けないといけない状況は、SQLiteと関係なく設計がまずい気がする。
ポーリングするより、イベントアラータのようなクライアントへの通知機能もったDB使った方がよいと思う。
915 :
908:2012/07/19(木) 01:39:41.71 ID:???
実はSQLServer2008とVisualWebDeveloperで作成したものでデータ管理はしております
私はプログラム歴2年の新米なのですがデータ管理をするにあたって、
いろいろ調べていたらSQLiteを見つけました
インストールなし、ファイル1個、そのくせパワフル?、Androidに標準搭載
パソコンのOSで言ったらLinuxか?? みたいな感じで一目惚れでした
今回、管理するデータは重要な物でもないし量も多くないし
SQLiteを試してみよと思いいろいろ挑戦していた次第でした
多くのアクセスを使いこなすにはそれなりにハードルがあるんですね
でももうちょっと挑戦してみます
現状はWebサーバーがあってその上で走るCGIなりASPが SQL Server 2008 にアクセスするようなシステム構成なんですか?
917 :
908:2012/07/19(木) 12:58:02.39 ID:???
>>916 1台のPCにSQLServer2008とIISをインストールしてそこにクライアントがIEでアクセスしてます
>>917 やろうとしている事を乱暴に言ってしまえば、
複数のSQL Serverインスタンスを用意して
全てのサーバーが一つのデータディレクトリを参照しているようなもの
読み取り専用としてならいいけど今回のケースなら止めて置いた方が…
いやいや
それなら行けるんじゃないか?
walモードが使えるから。
walなら更新は読み込みを阻害しないよ。
取り敢えずやってみて検証結果を教えて欲しいっ。
それならって言うのは現状と同じようにdbへのアクセスを一台のノードか代理する形ね
>>917の構成ならまあできないこともないが
最初の質問とちょっと形態が違うからなあ
922 :
NAME IS NULL:2012/07/26(木) 16:54:14.10 ID:/aBlwIAM
Sqlite3で以下のクエリで検索してます。
SELECT * FROM list WHERE sample=$sample and access=$access and level=$level LIMIT 1
この仲のaccessを曖昧検索に変えたいのですが曖昧検索ではLIKE と % を使用するというのを見ました。
複数条件があるWHEREの後にLIKEをどのようにつければいいのでしょうか?
923 :
NAME IS NULL:2012/07/26(木) 18:03:51.74 ID:D083zD7I
>>922 普通にaccess like $accessではいかんのか
$accessの中身を%文字%にするんだ
WHERE (access LIKE '%foo%' OR access LIKE '%bar%') AND level=なんたら
sqliteのintegerにunsignedを指定したいのですが不可能でしょうか?
制約
python3.2からsqlite3使ってたんだけど
text型のフィールドにYYYY-MM-DD形式の日付をinsertして
selectで取り出したらなぜか4桁になってた
両端にシングルクォーテーションつけ忘れてるだけだった……
sql = "insert into test values (2012-08-05)" #←x selectすると結果が1999になる
sql = "insert into test values ('2012-08-05')" #←o
実際は変数使ってるから解決するまでにすごい悩んだ
prepare使おうぜ
お前の父ちゃんは文字列連結でSQL文を作っちゃいけないということも教えてくれなかったのか?
SQLite ManagerでおもむろにDB設定をクリックしたら
ユーザーバージョンなる項目がありました
SQLiteでそれを変更したり参照する文があるのでしょうか?
バージョンはテーブルを作ってそこで管理していたので
デフォルトでそのようなものが用意されていたなら次からはそれを使おうと思うのですが
へ〜っ、こんな機能あるんだ。
通りすがりだけど、勉強になった、サンクス。
sqliteでtext型の漢字ソートってやっぱ厳しいですか?
普通にorder byしても思った通りにならず・・・
そもそも君が思っている漢字ソートってどんなのよ。
まさかと思うが、読みの順とかいいだすんじゃ…
>>933 どのDBMSでも漢字ソートには無理がある
そのとおりです読みの順番です
やっぱ膨大な辞書DBでもないと無理ですよね
なんか関数を組み込めるらしいので出来たりしないかなと思ったのですが
>>936 漢字コードの並びはJIS第一水準が音読みで第二水準が部首順じゃなかったかな。
だから読みで並べるのは無理だし、漢字には複数の読み方があるので
期待通りには並ばないな。
素直にフリガナ付けてそっちでソート
ふつうに考えれば音訓複数の読みがある上に複合語では同じ単語でも読みが異なるとか
そのままソートが不可能だと思わないのかな?
940 :
NAME IS NULL:2012/08/10(金) 10:47:54.29 ID:dgVF/wY5
老舗と世論が並んでたらどっちが先にくるのかっていう
>>939 漢字列でソートしてくれなんて要求が有ったら
脊髄反射レベルで断る。
日本向けにカスタマイズされた日本製RDBMSでもあれば
そういう機能も組み込んでるでしょう
まあたぶんないけど
>>940 ?と思ったけど「ろうほ」なんて読み方有るんだな、知らなかった。
944 :
NAME IS NULL:2012/08/10(金) 13:27:16.96 ID:dgVF/wY5
浅草と浅草寺とか
>>942 組み込んでるも何も、原理的に無理という話なんだが。
原理的に無理じゃない
作ろうと思えば作れる
じゃあ
>>240 の分だけでいいから、作ってみなよ。
948 :
NAME IS NULL:2012/08/10(金) 15:44:23.82 ID:dgVF/wY5
藤村俊二と島崎藤村とか
>>946 漢字の1〜n個の全ての組み合わせのソート用辞書を作れば不可能ではないな。
そんなんやるんなら素直にふりがな付けます。
>>949 その組み合わせのどれを選択するつもりなんだよ…。
ネタで言ってるんじゃないなら、まじでプログラマー向いてないと思うぞ。
>>950 漢字の全ての組み合わせに決まっておろうw
組み合わせの結果、存在しない熟語も含めて全てふりがな辞書を作る。
JIS第1と第2で6,355文字あるので10文字の組み合わせだけでも
107437414620186645551479209503916015625通り
計算違うか?w
今のハードでは無理だな
プログラマーに向いているとかの前に日本人じゃないんだろう。漢字を知らないとしか思えない。
>>953 そういうのは普通のアプリ開発でも制限事項とするだろう。
それが許容されるかどうかは
>>933 の顧客(?)の要求仕様次第。
>>954 漢字を知らない連中がユニコード作っちゃったわけだが
>>955 複数の読み方がある熟語は入力禁止とか? (w
これを「制限事項」とか言ってくるベンダーいたら今後取引しないよ。
世論はせろんでもよろんでも意味は同じだが
追従はついしょうとついじゅうで意味が異なる。
困ったなw
>>957 なんでやねん
片方の読みに統一やがな
>>958 『追従』だけでてきたら何かわからんがな
>>952 にあるような天文学的組み合わせが出てきた時点でネタ確定ですがな
おまえら暇なんやのぅ
ORDER BYの話題になってないって話でしょ。
これ任意のソートってできないの?
「任意のソート」とか言う、オレオレ用語をちゃんと定義してくれ。
つまりオレオレ並べ替え。
一行目を二行目と三行目の間に突っ込むとか。
Excel でも使っとけ。
みんな難しい事考えてるのね
× 難しいこと
○ アホなこと
おまえらしょうもないスケージュール管理とかそんなことしかやってないの?
ちょと何言ってるかわかんない
ORDER BY に延々と書けば好きな順番にできるw
夏休みで空気脳が降臨しましたw
日本脳炎ですね
>>974 >>963へのレスだよ。
同じ読みは人間でも区別付かないから無理だろ。
任意の順番なら、 ORDER BY num = 15 DESC, num = 3 DESC , ・・・
とかつなげりゃ好きな順番にできる。
×同じ読み
○漢字の読み
ミスった
>>971 一行目、二行目、三行目を識別するフィールドが無い場合は?
>>963 みたいな奴は、そういうテーブルでも何とかしろとか言うぞ。
Excel はできるからな。(w
識別するフィールドとかそういう専門用語はわからないけど個別にidならふってるよ
カードのシャフルみたいにidとか関係なく何枚目を何枚目の後に移動とかそういう事じゃないの?
だからそう言ってんじゃん
978を読めよ
このスレきもすぎ
983 :
NAME IS NULL:2012/08/13(月) 23:00:13.37 ID:7Zv3PRLA
というか文字列型って単なるbinary string扱いなんだよな
substr() がマルチバイト対応されてないので、五十音索引ページとか作ろうとすると、
アプリ側でもう一度集約処理してあげないといけなくて、うへぇ。。
ふり仮名データみたいなのを一緒に持たせないときびしい
>>983 > substr() がマルチバイト対応されてないので
http://www.sqlite.org/lang_corefunc.html substr(X,Y,Z): If X is a string then characters indices refer to actual UTF-8 characters.
> create table t (name text);
> .separator '\n'
> .import test.txt t1 -- test.txt は、このスレの内容を utf-8 で保存したもの。
> select substr(name, 1, 1), count(*) from t group by substr(name, 1, 1) order by count(*);
...
"お",94
"な",96
"あ",102
"ど",110
s,128
h,130
"こ",136
S,178
9,194
4,222
6,226
5,228
7,228
8,230
2,240
3,248
1,260
"そ",272
>,724
"",1562