データベース - 我流データベース設計 - カウンタ

 クラウディア
1. 概要
2. 構成
3. テーブル

1. 概要

 わたしが、管理しているサイトは、表示しているか、していないかにかかわらず、カウンタを持っています。  1日内で、ユニークなアクセス元がアクセスするごとに、カウントアップ。  また、アクセスにかかわるログ的な情報を、1アクセスごとに1行分、テキストファイルへ出力しています。  日替わりの時点で、1日分をまとめて、管理者用のメールに送信。  カウンタ値は、保持しつつ、ログファイルは、リセットして、1日分は最初から出力しなおします。  しかし、これは、インターネット創世記を過ぎたあたりに、どこかから拾ってきたものに手をいれたもので。  テキストファイルにアクセスする方式が、いささかほころんでいて。  排他がうまくいっていないのか、カウンタファイルの中身が何もなくなったりして、下手をすると、サイトの表示がこけはじめたりするのだ。  ファイルアクセスとテーブルアクセス、どちらがリソースを食わないのかとか、アクセススピードはどれくらいとか、問題はありそうな気がしますが。  もし、こけないようになるならば、テーブルアクセス方式にしたいなぁ・・・と思いまして。  やってみるべか。

2. 構成

 データベースとテーブルの構成、少し悩みます。  サイトは、それぞれ自分用のデータベースを持っています。  このデータベースそれぞれに、カウンタ用のテーブルを持つべきか・・・。  それとも、サイトを横断するデータベースを新規につくって、サイト用のテーブルをつくるべきか・・・。  一長一短ありますが、サイトの増減を考えると。  サイトそれぞれのデータベースに、同じ構成のカウンタテーブルを持つ方が、わたしには管理しやすいように思えたので。  当初、サイトそれぞれのデータベースに、同じ構成のテーブルを持つ方式でやっておりましたが・・・もとい。  手詰まりになりました。  サイトを横断するデータベースを新規につくることとします。

3. テーブル

 まず、サイトを横断するカウンタテーブル。
 カラム名  キー NOT NULL  型    意味    備考 
column_name text サイト名
column_date date アクセス日
column_count integer カウンタ値

 カラム名が、どうしても予約語と重なっちゃうので、変になっちゃいますね。
 サーバに、「PostgreSQL」を想定しているので、アクセス日は、「date」型になるのだ。
 カウンタ値が「オーバフローしたらどうするの?」。
 いやいや、わたしの生きている間に、オーバフローすることはないな。
 まぁ、心配な向きは、周回カラムでも設けていれば、2の63乗×2の63乗くらいになるので、人類の週末くらいまではもつでしょう。

 もうひとつは、アクセスログ用のテーブル。
 これは、テーブル名がサイト名と一致させるようにして、複数の同じ構成のテーブルを作成します。

 カラム名  キー NOT NULL  型    意味    備考 
column_count integer カウンタ値
column_time datetime アクセス日時
address inet クライアントアドレス
domain text クライアントドメイン
referer text 参照元