作ったものを振り返る Part1.4

 概略

今回はデータベースの操作について振り返ります。

目標

ここでの目標は前回アクセスしたときの状態と現在の状態に違いがないかを確認することです。

前回アクセスしたときの状態はどこかプログラム外部に保存しておく必要があります。そこでデータベース(以下DB)を使います。

使用するDB

Herokuでの運用を目標としていたため、Herokuのアドオンとして標準にサポートされているPostgreSQLを使いました。

MySQLとの違い はありますが今回利用する用途ではほとんど気にする必要はなさそうです。

考えられる手法

今回の目標を果たそうとした時に2通りの手法が思いつきました。

    1. 空のDBを作ってスクレイピングしてきたデータがDBに存在しなければ追加して、状態を監視する
    2. 一年は365or366日なので先にDBに入れる容器を確保しておいて、スクレイピングしてきたデータに対して追加はせず更新だけして状態を監視する

それぞれを実装した結果

  1. 遅い。とにかく遅い。
  2. 早い。採用。

1.の方法は毎度毎度検索して追加処理をするのでとにかく遅かったです。(当たり前)

  1. の方法は早いことに加え、スクレイピングしてきたデータが追加すべきデータなのかというところを考えずに済んだので実装も楽でした。

流れ

↑の理由から手法2を採用したので手法2の流れについて説明します。

    1. スクレイピング結果から空いている日時のリスト(free_list)を作る(DBの状態によらず通知したい項目)

 

    1. 更新前のDBの空いている日時のリスト(db_free_list)を作る

 

    1. db_free_listの要素がfree_listになければ埋まったということで、埋まったリスト(filled_list)に追加し、DBを更新

 

    1. free_listの要素に対応するDBの要素を更新

 

これでfree_listとfilled_listが得られたのであとはTwitterなりで通知してやればローカルでは完成です!

次回、ラストとなるHerokuでの運用に書きたいと思います!

では。