99円でWordPress!

このサイトはWordPress(SQLite)+ロリポエコノミープランで動いています

SQLiteの信頼性は高い

以前書いた SQLiteの仕様上の制限 の続編的な内容。

そこでも書きましたが、SQLiteはその名称=Liteの意味「軽い」「低い」「少ない」といった言葉から、イメージ的にイマイチに思えてしまう人も多い気がしています。そのため、信頼性も標準のMySQL等に比べると劣るのではないか?と感じてしまう人もいるかもしれません。

結論を先に書くと全くそんなことは無いと断言できそうです。

今回はSQLite版WordPressを利用しながら、その「信頼性」について考えてみました。

はじめに

この 「99円でWordPress!」 はSQLiteをデータベースとして利用しています。また、筆者は10年以上に渡ってWordPressやMovableTypeといったブログソフトにSQLiteをデータベースとして利用してきましたが、SQLiteが原因でトラブルが起きた経験は全くありません。信頼性の高いデータベースだなというのが個人的な感想ですが、公式サイト等に興味深いドキュメントが多数あったので、その中からいくつか取り上げてみたいと思います。

驚異的なテスト量

SQLiteの公式サイトにはSQLite はどのようにテストされるか」と題されたページがあります。その冒頭には以下のような記載があります。

バージョン 3.42.0 (2023-05-16)の時点で、SQLite ライブラリは約 155.8 KSLOC の C コードで構成されています。 (KSLOC とは、数千の「ソース行コード」、つまり空白行とコメントを除いたコード行を意味します。) それに比べて、プロジェクトには 590 倍のテスト コードとテスト スクリプト (92053.1 KSLOC) があります。

https://sqlite.org/testing.html

なんと9200万行を超えるテストコードがあるそうです。SQLite自体のソースコードが約16万行の中、テストコードはその約590倍もあります。ソースコードの行数が多いからといって、それが信頼性に直結するわけではありませんが、少なくともそれだけの労力を割いていることにはなります。

また、その後のテストハーネス(ソフトウェアテストで用いられるテスト実行用のソフトウェア)の項目でも

  • TCLテスト:完全なテストの実行では何百万もの個別のテストが実行
  • TH3テスト:リリース前のソークテスト(耐久性テスト)では、約 2 億 4,850 万回のテスト
  • SQLロジック テスト:1.12 GB のテスト データからなる 720 万クエリを実行
  • dbsqlfuzz エンジン(ファズ テスター):1 日あたり約 10 億のテストミューテーションを実行

等々、膨大なテストが行われているそうです。また、こうしたテストハーネスだけでなく、最後には開発者が人力で、リリースごとに約 200 項目をチェックリストに沿って問題が無いか確認を行うそうです。最終的な結論として

多くの人は、商用ソフトウェアとして十分にテストされておらず、信頼性が低いのではないかと考えています。しかし、その印象は誤りです。(中略)SQLite は非常に高い信頼性と非常に低い欠陥率を示しています。(中略)このテスト手順のドキュメントは、SQLite がミッションクリティカルなアプリケーションでの使用に適しているという確信を得るためにまとめたものです。

https://sqlite.org/testing.html

とされており、その信頼性に自信を持っていることが伺えます。あくまでテストコードの行数やテスト方法は分かりやすい事例ですが、世の中のあらゆるところで使われているデータベースだからこそ、あらゆるケース、あらゆるトラブルが起きても絶対にデータを壊さないという強い信念を感じさせます。

衝突試験~突然の電源遮断でも壊れない設計

SQLite は データを書き込んでる途中にOSがクラッシュしたり、電源が突然切れても問題ないそうです。データベースの信頼性において、こうした突然のクラッシュでもデータが破損しないことは非常に重要です。例えば、銀行業務でそんなことが起きたら大変です。お金の送金中にクラッシュし、送ろうとした金額の数字が変わったり、消えたりでもしたら、信頼性が担保できません。

SQLiteはACID(Atomicity=原子性、Consistency=一貫性、Isolation=分離性、Durability=耐久性)の特性を持つトランザクション処理をサポートしています。トランザクションとは、データベースの変更をまとめた処理単位であり、完全に成功するか、または完全に取り消される特性を持ちます。これにより、データベース内のデータを一貫性のある状態に保つことができるようです。銀行の送金の例で言えば、お金を送ろうとしたとき、振込先、振込元、どちらかには必ずお金があり、途中で消えたりしないことを意味しています。

SQLite の最初期の顧客として Motorola や Nokia 、 Symbian といった携帯電話関連会社やソフトウェアがあったそうですが、そうしたモバイルデバイスではバッテリー切れによる突然の電源遮断等は頻繁に起き得る事象です。それでも壊れないようにする必要があったわけです。SQLite は開発の最初期の段階から高い信頼性を有すべく作られたようです。

こうした仕組みの詳細は公式サイトにかなり詳しく記載されてるので、さらに興味のある方は直接ご覧ください

数十億の利用

こうして公式サイトのドキュメントを読んでいくと、SQLite はミッションクリティカルな場面でも通用する信頼性が備わっていると断言できそうです。何より、Android端末の標準ライブラリとして採用され、世界中の数十億のスマートフォンで問題無く使われていることも実績として大きいと思います。( Google はAndroidを発表する数年前から既に SQLite に強い関心を示しており、開発者の リチャード・ヒップ氏を招いて社内でTech talk を開催しています

まとめ

ここまで SQLite の信頼性や、その信頼性の基盤となっているテスト方法や技術についてざっくりまとめてみました。

SQLite は手軽に導入でき、そして軽量な設計で軽快に動作しますが、逆にテストや設計は厳重に行われています

WordPress での SQLite 利用にあたっては、こうした情報ももとに安心して利用することができると思いますし、実際筆者自身もこうした情報から安心して利用することができています。

何かの参考になれば幸いです。


投稿日

カテゴリー:

投稿者:

タグ: