19
SQLite入門 (アプリケーション編) 発表者 「鳥取を捨てた男」 kmt-t

SQLite入門(アプリケーション編)

  • Upload
    kmt-t

  • View
    10.338

  • Download
    0

Embed Size (px)

Citation preview

Page 1: SQLite入門(アプリケーション編)

SQLite入門 (アプリケーション編)

発表者

「鳥取を捨てた男」 kmt-t

Page 2: SQLite入門(アプリケーション編)

自己紹介

・ハンドルネーム : kmt-t ・はてなダイアリ ID : kmt-t2 ・Twitter ID : kmt_t

Web上での活動

・組み込みプログラマらしい ・ミドルウェアが得意です →画像処理(2D/3D)、ファイルシステム、仮想マシンが専門です ・使用言語はC++(not C)/C#/Python →C++11とかC#の最新の仕様がキャッチアップできていません…

属性

Page 3: SQLite入門(アプリケーション編)

最近の豪遊状況

毎週木曜日 : GeekBear 毎週水曜日 : スカラジオ 9/3 : tottoruby #6 9/9 : 日本Androidの会堺支部 第2回勉強会 9/10 : PowerPoint 勉強会@大阪 9/19 : 横浜Androidプラットフォーム部第13回勉強会 9/23 : 第2回 カーネル/VM探検隊@関西 10/15 : 第1回 大阪Scala勉強会 10/22 : 第4回JVMソースコードリーディングの会 10/23 : 横浜Androidプラットフォーム部第14回勉強会 10/28 : 日本Androidの会 京都支部 10月 勉強会 10/29 : スマートフォンハッカソン 神戸GTUG 11/5 : LL 名古屋 11/11 : ぬーを囲む会 11/12 : tottoruby #7 11/16~17 : Embedded Technorogy 2011 11/16 : ひつじさんを囲んで羊をむさぼる会@馬車道

遊びすぎだろ、JK

Page 4: SQLite入門(アプリケーション編)

本日話す内容

第一部 : SQLite入門 (アプリケーション編) ←本日話す内容 第二部 : SQLiteインターナル (上) 第三部 : SQLiteインターナル (下) ※ 「SQLiteインターナル」は3回以上の発表になる可能性あり

全体構成

SQLiteの価値を再認識しよう!

今回の発表の趣旨

Page 5: SQLite入門(アプリケーション編)

SQLiteに対する印象調査

A. SQLiteを使ったことがない人 B. Webアプリのテスト用DBとして使っている人 C. Webアプリの本番用DBとして使っている人 →どうして本番でSQLiteを採用しましたか? D. デスクトップアプリに組み込んでいる人 E. 組み込み製品に組み込んでいる人

以下のいずれかに手を挙げてください

SQLiteは「簡易版」RDBMSと考えていませんか?

もしかして…

Page 6: SQLite入門(アプリケーション編)

C/S型RDBMSの 代替などではない

SQLiteにはSQLiteがベストソリューションとなる問題がある

・SQLiteを使うメリット ・以下の競合する可能性のあるソリューションとのトレードオフ ・C/S型RDBMS(MySQL/PostgreSQLなど) ・Berkeley DB

・boost::multi_index

今回の発表で以下を確認

Page 7: SQLite入門(アプリケーション編)

SQLiteの概要のおさらい

http://www.sqlite.org/index.html

公式ホームページ

・インプロセスRDBMS ・C/S型(クライアント/サーバ型)ではない ・ODBCドライバを提供 ・ストレージはファイルまたはオンメモリ ・高いポータビリティ ・ライセンスはパブリックドメイン

特徴

Page 8: SQLite入門(アプリケーション編)

SQLiteのメリット : RDBMSである

「RDBMSである」ということは…

・クエリー言語としてSQLが使える ・テーブル間のリレーションが使える ・UNIQUE制約などの制約が使える →ただし使えない制約も多い ・トランザクションによりデータのアトミック性が保証される →不慮のトラブルでもデータが壊れにくい →突然電源断などがある組み込み機器には大きな要素

メリット

Page 9: SQLite入門(アプリケーション編)

SQLiteのメリット : 小規模データ環境で速い

何故「小規模データ環境で速い」の?

・インプロセスRDBMS →プロセス間通信が存在しない →ただしプロセス間の排他処理はやっている ・オンメモリデータベースも作成できる ・インデックスが張れる ・プリコンパイル済みクエリが発行できる →SQLテキストのパースをショートカットしてクエリを発行できる ・C言語で独自の述語が定義できる

理由

Page 10: SQLite入門(アプリケーション編)

SQLiteのメリット : ODBC対応ツールが使える

・Microsoft Access ・Microsoft Excel with VBA ・Microsoft Visual Basic ・… 等々 …

・作成したデータベースのオーサリングが容易 ・作成したデータベース向けの専用ツールも作りやすい

実は非常に大きな要素

ODBCドライバ対応ツール

Page 11: SQLite入門(アプリケーション編)

SQLiteのメリット : アプリへの組み込みやすさ

・ソースコードを入手 ・http://www.sqlite.org/download.html ・sqlite-amalgamation-*.zipをダウンロード ・以下を自分のソースツリーに追加するだけ ・sqlite.c/sqlite.h

組み込み方法

パブリックドメインなので問題ありません!

ライセンスは大丈夫?

Page 12: SQLite入門(アプリケーション編)

SQLiteのメリット : 組み込み環境との親和性

・ファイルシステムがあるCPUアーキテクチャ/OSなら移植が容易 →標準CライブラリとUNIX系OSのための基本的なPOSIX APIのみ依存 →特にLinuxが動くような環境だとかなりマニアックなプロセッサでも動く

移植の容易性

・アホみたいにメモリを食うDBではない ・各種定数をチューニングすることでさらなるフットプリントの調整ができる

フットプリントの小ささ

Page 13: SQLite入門(アプリケーション編)

ここから他のツールとの対比

Page 14: SQLite入門(アプリケーション編)

vs C/S型RDBMS

・アウトプロセス型 →プロセス間通信が発生する ・分散化対応 →スケールアウトしやすい ・ストレージ →MySQLだとMyISAM/InnoDB →オンメモリにできるRDBMSもあり ・組み込み環境ではほぼ使用不可

C/S型RDBMS

・インプロセス型 →プロセス間通信が発生しない ・分散化非対応 →スケールアウトが難しい ・ストレージ →ファイルまたはオンメモリ →バックアップなどの管理が容易 ・組み込み環境でも使用可

SQLite

・大規模環境ではC/S型RDBMSでなければならない(スケールアウトの問題) ・小規模環境かつ低レイテンシが必要ならSQLiteの方がよい ・組み込み環境ではC/S型RDBMSは使えない

Page 15: SQLite入門(アプリケーション編)

vs Berkeley DB

・KVS(Key Value Store) →リレーションが張れない ・トランザクションなし →データが壊れやすい →オーバーヘッドなし ・ストレージ →ファイル

Berkeley DB

・RDBMS →リレーションが張れる ・トランザクションあり →データが壊れにくい →オーバーヘッドあり ・ストレージ →ファイルまたはオンメモリ

SQLite

・データ保護が不要かつKVSでよい場合はBerkeley DBの方がよい ・データ保護が必要な場合はSQLiteの方がよい ・オンメモリDBを実現したいならBerkeley DBは使えない

Page 16: SQLite入門(アプリケーション編)

vs boost::multi_index

・C++準標準ライブラリboostのいちモジュール →今回の話はC++以外の言語での場合はとりあえず無視 ・データの組の集合(コンテナ)を提供する →データの組のどの要素でもキーとして効率よく値を取得できる ・詳細は以下のURLの資料を参照 →http://www.kmonos.net/wlog/104.html#_2008091213

boost::multi_indexとは

オンメモリDBとしては有力なソリューション

Page 17: SQLite入門(アプリケーション編)

vs boost::multi_index

・リレーションが張れない ・トランザクションなし →レイテンシが極小 ・ストレージ →オンメモリのみ →永続性がない

boost::multi_index

・リレーションが張れる ・トランザクションあり →データが壊れにくい →オーバヘッドあり ・ストレージ →ファイルまたはオンメモリ →永続性がある

SQLite

・データがメモリに収まってリレーションが不要、揮発性でよいならboost::multi_indexの方がよい ・データがメモリに収まらない、永続性が欲しいならboost::multi_indexは使えない ・実はデータがメモリに収まらない場合のソリューションではSQLiteは最もコンパクトな部類

Page 18: SQLite入門(アプリケーション編)

まとめ

・小規模データ環境のRDBMS ・組み込み環境でのRDBMS ・永続化が必要なアプリケーションデータの管理 ・メモリに収まらないアプリケーションデータの管理 ・データキャッシュ

SQLite向きの用途

・boost::multi_indexは競合する用途では強力なソリューション →発表者一押し

boost::multi_index

Page 19: SQLite入門(アプリケーション編)

以上で発表は終了

ご清聴、ありがとうございました!