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