Python学習チャンネル by PyQ

Pythonのオンライン学習プラットフォームPyQのオフィシャルブログです

SQLiteと他のデータベースの違いを紹介します。「SQLiteの特徴を教えてください」

f:id:kenken0326:20200204121724p:plain

質問

SQLite(エスキューライト)は、ファイルベースのデータベースエンジンです。 SQLiteは、サブクエリーを含むほとんどのSQL構文の実行ができます。 SQLiteは構文が充実していますが、同時接続を並列に処理する機構が比較的弱いという短所があります。


という説明がPyQのクエストに書いてありましたが、データベースが「同時接続を並列に処理する」とは何か、比較的弱いとは何かを教えてください。

回答

PyQの学習コンテンツ内では簡単にしか説明できていなかった点ですね。
少し掘り下げて説明します。

データベースの特徴

SQLite、MySQL、PostgreSQLのようなデータベースは、複数のクライントから同時に接続されることを考慮して作られています(同時実行制御)。
その際に、データの読み込みと書き込みをロックという仕組みで制御することにより、データの整合性を保ちつつ同時接続ができるよう作られています。

同時実行で起こる問題は例えば「あるクライアントが行数をカウントしているときに、他のクライアントが1行別のデータを挿入すると、実行しはじめたときより行数が増えてしまう問題」などがあります。

データベースのロックは他のクライアントができる操作やデータの範囲を制限することで、整合性を保つ仕組みです。

SQLiteの特徴

ですが、SQLiteができるロックはそれほど柔軟でないのが特徴です。ロックする範囲をデータベース全体でしか制御できない(テーブル単位、行単位でのロックができない)特徴を持っています。

また、SQLiteはローカルのファイルを直接データベースとして扱うので、複数のサーバーとネットワークごしに接続するのには不向きです。Webサーバーを複数台起動する場合などはMySQLやPostgreSQLなどを使うほうが良いでしょう。

DjangoでのWebアプリケーション開発を考えると、SQLiteは基本的には開発時に使うことが多いでしょう。多くの人に使ってもらう本番環境や、複数台のWebサーバーを起動する場合はMySQLやPostgreSQLを使いましょう。

SQLiteも決して悪いものではなく、インストール型のアプリケーションやローカルのテスト用に使えます。
Webアプリケーションとしても、単一インスタンスでアクセスが少なく、可用性も低くてよいWebアプリケーションでは十分に使えます。
趣味で作った小さなWebアプリケーションや社内用の重要でないサーバーであればSQLiteでも悪くはありません(RDBMSサーバーを使うほうが無難ではあります)。
複数プロセスが同時にアクセスする場合も、それほど頻度が多くないのであれば十二分にSQLiteはうまく制御してくれます。

SQLiteの使用法について詳しく知りたい場合は以下のドキュメントを参考にしてください。

www.sqlite.org

もしトランザクションや同時実行制御について詳しく知りたい場合は、ぜひGoogleなどで検索したり、書籍を読んでみてください。

Copyright ©2017- BeProud Inc. All rights reserved.