2020.9.10
カクテルDB修繕ログ#4【とりあえずデータをキャッシュする(仕様編)】
前回の続きです。
まず基本としては、今後新規データが入っていくことを想定して
cronで回すというのを前提としたコーディングにしたいと思います。コードが呼び出されたらプログラムが走り出し、足りないデータを取得していく・・・・・・そんな流れになります。
一度取得したデータは更新する必要なさそうなので、まあ1日1回走らせるとかでも全然良いでしょう。人知れずクラッシュしたりする場合もあるんですけど、僕はなるべく管理をしたくありません。(笑)
ということで、今回はそんなプログラムの
仕様を考えたいと思います。
仕様っていっても、ぶっちゃけ突貫工事で作るプログラムなのでそこまでちゃんとした仕様を練るとかじゃなくて、まあどんな感じに動くかみたいなのをふわっとメモ書きする程度で終わるんですけど・・・・・・。もっというと
この記事はまじで僕のメモ帳です。
さて、まずどういうデータが必要になるのかというと、基本的には
銘柄データが必要になりますね。
例えばジンであれば、ジン>ドライ・ジン>ボンベイ・サファイア、みたいな流れがデータ上できてて、それが
有名な銘柄として紹介されています。
まぁこういうことですね。オリジナルの画像がある場合はここに表示されるわけですが、本来ならばビーフィータージンのリンクが表示されるんじゃないかな。もしかしたら単に「ジン」かもしれんけど。
データ上でも、
famous_brand_idという形で、有名そうな銘柄のIDを持っております。つまり基本的には収集するのは銘柄データだけで済むということになります。
ここでイレギュラーとなるのは、例えばライムといった飾り付け・ソフトドリンク系ですね。このあたりは銘柄データを持たせない仕様にしてるのでちょっとばかりめんどくさいです。
ここで僕が取れる選択肢は
サポートを切るか
なんとかして実装するかに分かれるのですが、なるべくなんとか実装したいので省エネな方法を考えたいと思います。
ということで、まずは
主キーを考えることになります。サポートを切るのであれば銘柄IDを主キーにすれば簡単に実装できそうです。
ではここでソフドリ系のデータも突っ込むとなるとややこしくなってきます。というのも
銘柄データが存在しないカテゴリもあるので、単にカテゴリIDと銘柄IDの複合キーとするワケにもいかないのです。
一番鬱陶しいのはやはり銘柄が存在しない・・・・・・例えば
ミントみたいな例の主キーをどうするか、という話になってきます。
雑に考えれば
「メインカテゴリID」「ミドルカテゴリID」「銘柄ID」すべてをキーにしてしまうってのも手ですね。famous_brand_idが存在していれば銘柄IDを検索すればOK、ソフドリのような「銘柄は設定してないけどミドルカテゴリだけ存在している」というものはミドルカテゴリで検索、それも見つからないのであればメインカテゴリIDで検索すればいいことになります。この3つのキーの重複はありえないので一意に定まることになります。なのでレコードとしてはこの形式でとっていけばいいことになりそうですね。
ミドルカテゴリにもfamous_brand_idが設定されてるみたいなので、つまりここのカラムが空であればIDから取ってきてね、というのがwhere句のルールになりそうですね。
つまり、この時点で
アフィリエイトコンポーネントには「親カテゴリID」「ミドルカテゴリID」「銘柄ID」のうち分かるものを渡せば表示すべきレコードを一意に定められるというのがわかり、データベースの輪郭がはっきりしてきました。
では次にどういうカラムを設定するのかというと、先程言ったような3つの複合キーに加え、商品名、値段、画像3種のURL、アフィリエイトのリンクURL、検索結果へのURLを取得できるのでそれをぶちこむとともに、人力設定用の画像URLとアフィリエイトリンクとかを用意しておけばいいのかな、って感じですね。それぞれはプログラム側で優先順位つけてあげればいい感じに動きそう。
次に問題になってくるのは初期設定ですかね。まずプログラムを走らせた瞬間、該当するDBのレコードがなかったらinsertしてこなくてはいけません。
とりあえず親銘柄データを全部突っ込んで、その結果取得できないのがソフトドリンク等なので、famous_brand_id=nullで絞り込み、ミドルカテゴリと親カテゴリ、それぞれのレコードを作ることにします。
たぶんこれで動くよね・・・・・・まあ、ソフドリとか有名銘柄を追加するとはあんまり考えないし、バグったらその時考えよう・・・・・・()
どっちにしろデータはそれだけあれば後はロジック側でなんとかこねこねできるし、大丈夫でしょたぶん。
一応バグフィクスもしやすいように名前も入れとこうかな。
アフィリエイト関連のデータベースのカラムはこれで確定したので、次は具体的にデータを入れる作業に入りますね。