Webサーバーのデータ保存
データ保存
サイトで提供する情報やユーザー情報は、どこかのサーバーに保存される
投稿コメント、商品の説明、ユーザーIDやパスワード、最終ログイン日時、イイネ
ログインせずに使えるサービスでもデータを保存して使われる
路線検索: 駅名や経路情報などがサービス提供者によって登録されている
調整さん: 利用者がデータを登録できる、同じブラウザなら再編集も可
シンプルなデータ保存
データを保存しておけて、必要なときに取り出せて、更新できれば良い
とりあえずファイルに保存しておこう
Pythonのshelveは、Pythonのオブジェクトをファイルに保存できる
shelve
https://docs.python.org/ja/3/library/shelve.html
code:storage.py
import shelve
with shelve.open('storage.data') as db:
db'key' = 1234
with shelve.open('storage.data') as db:
print(db'key')
ローカルファイル保存の問題
セッション保存と同じ問題をもっている
ファイルに保存した場合、そのサーバー1台の中にファイルとして保存される
複数のWebサーバーを立ち上げた場合サーバーごとに保存されてしまう
どのWebサーバーにリクエストが転送されるかによって、表示されるデータが異なる
shelveの問題
投稿が増えてくるとファイルサイズが大きくなり、「全部読み込んで全部書き出す」コストが高い
shelveでファイルを開いて、全部読み込んで、投稿を追加して、全部保存する、という処理が何度も行われる
ほとんど同時に投稿されたどれか1つだけしか保存されない問題
同時アクセス制御が必要
同時アクセス数を1に制限すると、遅くなる
こういった問題を避けるためにデータベースを利用する
sqlite
sqliteはデータベースの簡易実装
Pythonの標準ライブラリ sqlite3でsqlite3データベースが利用できる
sqlite3は1つのファイルにデータを保存する
ファイルを全部読み込んで全部書き出す、ということはしないので速度とメモリの問題は解決する
開発初期はsqlite3で動作するように作っておいて、途中から別の高機能なデータベースサーバーに変更するといった使い方ができる
1ファイル保存の問題
複数サーバーで同時に読み書きできない
データベース
データベースを使うと、Webサーバーを多重化していてもデータを共有できる