SQLiteの組込方法 - Togetter
Twitterのつぶやきマッシュアップメディア!
@togetter_jpをフォロー
マイページ
メニュー
設定
ログイン
トップ
ニュース
社会
地域
芸能・スポーツ
IT・Web
科学・教養
カルチャー
趣味
生活
仕事
ネタ・お笑い
ログ・日記
震災
311
iwj
放射能
中国
三国志
岩上安身
援助
速報
国内
アジア
アメリカ
ヨーロッパ
その他
政治
経済
国際
法律
環境
コラム
東京
東京近郊
北海道
東北
関東
北陸・信越
東海
近畿
中国・四国
九州・沖縄
海外
芸能
テレビ
ラジオ
野球
サッカー
ゴルフ
格闘技
競馬
モータースポーツ
その他
Android
Apple
インターネット
パソコン
モバイル
ガジェット
サイト制作
プログラミング
その他
科学
テクノロジー
エネルギー
数学
物理
宇宙
自然
人文
建築
心理
その他
アニメ
ゲーム
マンガ
アイドル
映画
音楽
書籍
演劇
ファッション
社会学
カメラ
車・バイク
電車
旅行
釣り
歴史
アート
デザイン
動物
その他
ハウツー
レシピ
グルメ
恋愛
マネー
節約
健康・医療
教育
ペット
起業・ベンチャー
経営
マーケティング
会計・人事
法務
就職・転職
語学・資格
ネタ
お笑い
大喜利
画像・動画
やってみた
その他
ログ
日記
思い出
雑談
メモ
飲み会
議事録
イベント
セミナー
復興
原発
支援
政府
自治体
トップ
>
トップ
>
311
> SQLiteの組込方法
2009/12/01 01:48:46
+
SQLiteの組込方法
アプリケーションにsqliteを統合する場合の要点についてpigeon6さんが語ります
by
itohtak
4 fav
3513 view
Fav
4
お気に入りに登録ならここをクリック!
まとめ
メニューを開く
一括削除
そういえばsqliteの話まだしてなかった。
返信する
RTする
ふぁぼる
pigeon6
2009/11/30 23:35:42
アプリケーションにsqliteを統合する場合の要点を幾つか書いておきます。
返信する
RTする
ふぁぼる
pigeon6
2009/11/30 23:36:26
まずは、当然ですがamalgamationされたバージョンを使う事。ソース1つ、ヘッダ1つで済みとてもお手軽です。
返信する
RTする
ふぁぼる
pigeon6
2009/11/30 23:37:46
@pigeon6
sqlite最高!!!!fopenは死ぬと良いのに!!!と思う最近です。うんがうぐ。
返信する
RTする
ふぁぼる
y_tamura
2009/11/30 23:38:15
ちなみに余談ですがamalgamationされたファイルをVisualStudio2003等の古いコンパイラでビルドすると、「行数が65535行を超えました。これ以上カウントできません」という珍しいワーニングを見る事が出来ます。
返信する
RTする
ふぁぼる
pigeon6
2009/11/30 23:38:22
プログラマはもっとSQLとか勉強した方が良い、という気がするんだけど、そうでもない空気を感じて凹む
返信する
RTする
ふぁぼる
y_tamura
2009/11/30 23:39:56
まずsqliteの最初の落とし穴ですが、sqliteは基本は(少なくともデータをファイルに保存する場合)ファイル化されたデータベース(hoge.db)を開き、そこに対して処理をする構造です。
返信する
RTする
ふぁぼる
pigeon6
2009/11/30 23:41:13
つまり、複数のプロセスが同じdbファイルを開いて処理する事を可能にしています。これはどういうことかというと、insertだのupdateは、1処理ごとにトランザクション化され、ディスクに同期されます。
返信する
RTする
ふぁぼる
pigeon6
2009/11/30 23:42:16
かいつまんで言うと、インサート処理やアップデート処理のようなディスクに書き込む操作は、Begin/Commit文をつかって1つのトランザクションにまとめておかないと、メチャクチャ時間を食います。sqliteは、アップデート処理は何でもトランザクション化すること!
返信する
RTする
ふぁぼる
pigeon6
2009/11/30 23:43:34
たぶんこれが最初の落とし穴です。
返信する
RTする
ふぁぼる
pigeon6
2009/11/30 23:44:07
あと、sqliteはマルチスレッドで処理可能なシステムにはなっていますが、あるスレッドで開いたデータベースは、同じスレッドで処理される事を期待します。つまり、同じDBを複数のスレッドから触りまくる事は出来ません。設計時にこの点を頭にたたっこんでおきましょう。
返信する
RTする
ふぁぼる
pigeon6
2009/11/30 23:45:29
ちなみに、トランザクションを使う場合と使わない場合の速度差ですが、僕の例で言うと、使わない=60秒、使う=0.19秒 くらいの差がありました。
返信する
RTする
ふぁぼる
pigeon6
2009/11/30 23:47:40
なんか通常のDBでやられる事にデメリットがあると萎える、、RT
@pigeon6
: あと、sqliteはマルチスレッドで処理可能なシステムにはなっていますが、あるスレッドで開いたデータベースは、同じスレッドで処理される事を期待します。つまり、同じDBを複数のスレッドから触りまくる
返信する
RTする
ふぁぼる
pgitohshu
2009/11/30 23:48:51
@pigeon6
トランザクションひどすw sqliteはマルチスレッドだととたんに重くなりますよね……。
返信する
RTする
ふぁぼる
y_tamura
2009/11/30 23:49:41
次に、sqliteはあんまり複雑なSQL文はサポートしていません(外部結合系)。結合系は左外部結合のみのサポートです。
返信する
RTする
ふぁぼる
pigeon6
2009/11/30 23:51:55
アプリケーションにsqliteを統合したい場合、幾つかの動機があると思います。データ構造の柔軟化、検索性能の向上+柔軟化などが上げられると思います。テーブルの設計は、私的には、KISS原則(keep it simple & stupid)をここでも推奨したい。
返信する
RTする
ふぁぼる
pigeon6
2009/11/30 23:53:38
基本方針として、一つのデータ集合は一つのテーブルで持ち、重複は上等、くらいの気持ちで作る事をオススメします。データが新しく必要になったら、カラムをバンバン増やすくらいの勢いでやった方がいいでしょう。
返信する
RTする
ふぁぼる
pigeon6
2009/11/30 23:55:09
あと、忘れてはならないのが、dbにファイル形式のバージョン番号を保存するテーブルを一つ作っておく事です。DBを開いたら、まずこのテーブルを検索してバージョン番号を確認することで、上位互換性や下位互換性、DBのアップグレード処理などを大変書きやすくなります。
返信する
RTする
ふぁぼる
pigeon6
2009/11/30 23:56:54
sqlite は、シングルスレッドだけれども軽くて速い組み込みDBなことに価値があると思っているので、その仕様に違和感はないです。複数プロセスからの同時オープンなんて考えなくてもいいのに、というくらい。
返信する
RTする
ふぁぼる
epics_jp
2009/11/30 23:58:00
僕もコレでOKだと思っています。ただ、知っておく必要があるだけです。 RT
@epics_jp
: sqlite は、シングルスレッドだけれども軽くて速い組み込みDBなことに価値があると思っているので、その仕様に違和感はないです。複数プロセスからの同時オープンなんて考えなくて...
返信する
RTする
ふぁぼる
pigeon6
2009/11/30 23:59:00
願わくば、db単位ではなくテーブル単位でスレッドへの貼り付けが出来ると、もうすこし楽&便利になりそうな気がしますが・・。
返信する
RTする
ふぁぼる
pigeon6
2009/12/01 00:00:07
あと、当然の当然ですが、インデックスは作っておきましょう。プライマリキーにはデフォルトでインデックスが作られると思いましたが、とにかく、検索するものはインデックスです。また、TEXTフィールドへの全文検索は量が多くなる事を踏まえてなるべくスレッド化しましょう。
返信する
RTする
ふぁぼる
pigeon6
2009/12/01 00:02:18
最後に、仮想リストのように、10000個のうちの20個を順次表示するような場合の対応です。sqliteというかSQLの話ですが、select ほげほげ limit 20 offset 1300 のように、limitとoffsetを使って対象を絞りましょう。
返信する
RTする
ふぁぼる
pigeon6
2009/12/01 00:04:30
意外とoffsetが知られていないので、念のため書いておきました。(このあたりはSQLの方言もあるし)
返信する
RTする
ふぁぼる
pigeon6
2009/12/01 00:04:56
他にも自分の思うsqliteのいいところは、データが何かおかしいと思ったら、中身をダンプしたり精査したりするための対話的なツールをすぐに作れる事です。これは本当にすばらしくて、変な事がおきたらファイルをもらってきて、すぐに調べられる。
返信する
RTする
ふぁぼる
pigeon6
2009/12/01 00:06:54
Content from Twitter
残りを読む(14)
ブログへ
iframe版
拡張版
張付けプレビュー
Fav
4
あわせて読みたい
Firefox における SQLite の regexp, match
powered by Preferred Infrastructure
コメント
コメントを入力してください。
Twitterにも投稿する
みんなのおすすめ商品
商品を編集
おすすめ商品を登録する
設定を変更する
まとめを作成する
プロフィール
フォローする
プレイステーションの頃からゲーム作っているプログラマ。最近はマネージャ⇄エンジン屋を行き来している感じです。ソフトウェア工学が大好物。プロマネやテストについての話題を与えてください。モチロン発言は個人的な考えを述べた物で、所属している企業や組織を代表した発言では有りません。
itohtak
link
twitter
rss
アップデート
まとめ
5
5
SQLiteの組込方法
0
miyayouさんC/C++とデザインパターンについて語る
0
ゲームレーティング研究会「CEROの禁止表現およびZ区分..
お気に入り
10
新着のまとめ
河本準一、妻の母も生活保護を受給!
new
5/30の(*´ェ`*)ポッ(*´ェ`*)ホ..
new
#g1983 ユースト1983 No.348 ..
new
生活保護をめぐるクネクネ
new
恥と気高さ
new
もっと見る
@togetter_jp
最近追加された商品
迷走する顕正会を斬る―浅井昭衛会長の足跡と変節
バナナ (フレーベル館だいすきしぜん たべもの)
オトタケ先生の3つの授業
オトことば。
【ムービー・マスターピース】 『アベンジャーズ』 1/6スケール フィギュア ホークアイ (2次..
オススメ
マイスター
トゥギャ通
“北九州、瓦礫焼却による放射能拡散予想図”は「..
黙れ小僧!お前に◯◯学の不幸が癒せるのか
クラブに全く興味がない人と風営法について会話し..
毎日新聞スクープ"核燃サイクル「秘密会議」"に..
「放射能汚染地域に住む人の血って、ほしいですか..
生活保護に関する、渡邊芳之(ynabe39)さ..
もっと見る
河本準一、妻の母も生活保護を受給!
new
恥と気高さ
new
クローズアップ現代「フィルム映画の灯を守りたい..
new
茂木健一郎(@kenichiromogi)さん..
new
袁紹の用兵の才能と分かり易い『官渡の戦い』
new
タイバニ当落メールが遅い理由を考えてみた まとめ
new
もっと見る
第80回「日食写真と昭和格差」
号外「みんなの金環日食まとめ―画像から教養ま..
第79回「虚構新聞とJリーグ」
第78回「コンプガチャとIT系かあちゃん」
第77回「びろーんと自宅警備隊」
第76回「Appleとパンツクッキー」
もっと見る
コメント