はじめに
前回の投稿の続編です。
本記事では、
WALモードについてまとめます。
実際に僕が業務で開発したシステムに導入した経験を元に書いています。
小規模のWebアプリのDBには
SQLite3を使用した.dbファイルが活用されることがあります。
その際にDBファイルにWALモードを
必ず設定した方が良いです。
その理由と手順を説明します。
1. WAL(Write-Ahead Logging)モードとは
SQLiteは基本的に
書き込み中にファイルをロックするため、
他のシステムが同じファイルを読み込むことができません。
ただ、WALモードという設定を行なうと
先にログファイルを書き込む為
書き込み作業中に他のシステムがファイルを読み込むことができます。
キリがいいところでデータベースに反映されます。
| 特徴 | メリット | デメリット |
|---|---|---|
| スピード | 書き込みが速くなる | 特になし |
| 作業性 | 読み取りと書き込みが同時に行なえる | ネットワーク経由の共有フォルダでは壊れる可能性がある。(ネットワーク環境次第) |
| ファイル | 壊れにくく安全 |
-walと-shmの2種類の余分なファイルができる。(後で説明します) |
2. 設定のやり方
コマンドプロンプトに
- dbファイルに接続
sqlite3 order.db
- WALモードに設定
PRAGMA journal_mode=WAL;
- 設定できたか確認する
PRAGMA journal_mode;
-- walの結果が返ってきたら完了
これを一度設定すると、次回以降も自動的に反映されます。
3. -walファイルと-shmファイルとは
-
-walファイル: 「書き換え内容」を一時的にメモしておくメインのメモ帳 -
-shmファイル:-walファイルのどこに何が書いてあるか、共有するためのインデックス(索引)
注意点: この2つはセットで動きます。消したり名前を変えたりしないようにしましょう。
まとめ
今回はdbファイルで設定しておきたい。
WALモードについてまとめました。
SQLiteは小規模のシステムで使われることが多いですが
処理速度を上げつつ、安全に処理を行なえるように設定しておきたいです。