テーマ作成画面に取り掛かり中

うーん、こんな感じかなぁ。



最初、キーワード選択式にしようかと思ったけど、選択にする意味ねーよなってことで入力式 + 下にメタデータって形にしようかなと。
まあ多少検討課題はあるにしても、このテーマ作成画面自体はそんなに大変じゃない。でも裏側の処理が設計に関わる部分が多くてなかなか進まん。


具体的にはテーマごとにテーブル分けしようかなぁとか思うんだけど、それだとキーワードはどうしようかなと。
キーワードも個別にテーブル作った方がいい気もするけど、えらい量になりそうで。1万テーブルってレベルじゃねーぞと。


とはいえ後日キーワードごとの解析とかする場合に全文検索なんてやったら死ねるので、必要は必要なんだよね。
所詮解析用ログファイルに過ぎないから、最初の1文字+keywordテーブル作って、そこにためてけばせいぜい2000個くらいだろうしそっちのがいいのかも。
テーマもそのやり方のがいいのかも。


日本語名のテーブル名ってのがちょいと気持ち悪いのと、膨大な量になってしまう漢字をどうするかってところだな。
両方いっぺんに解決するなら、Base64でもかけた結果の最初の1文字をとるとかだろうけど、ちょっと考えよう。


このやり方の問題としては、盛り上がっているテーマみたいのがあって、そのテーマに対してだけ冗長化したいとなっても、同一グループに属するテーマを丸ごと冗長化せざるを得ないところくらいかなぁ。
冗長化に限らず、直近1000レコード以外は過去ログに格納とかやろうと思うと、テーブルごと別々に分かれている場合に比べてちょっと面倒とかもあるけど。


まあ、もうちょっと考えつつ進める。
ユーザ登録辺りがちょっと面倒だけど、なんとなく今月中に形になりそうな気はしてきた。

追記

飯食いながらのんびり考えた結果、最初の1文字とる路線で行く事にした。
この関数を使う。

<?php
function get_string_identifier128($s) {
	$seed = '0123456789abcdefghijklmnopqrstuvwxyzあいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをんアイウエオカキクケコサシセスソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲン';
	$len = mb_strlen($seed);
	$c = mb_substr($s, 0, 1);
	if (mb_strpos($seed, $c) !== FALSE)
		return $c;

	$c = ord(substr($c, -1));
	return mb_substr($seed, $c % $len, 1);
}
?>

[0-9a-zあ-んア-ン]は普通にそれ使って、漢字とかアンダーバーとかは「先頭文字の最終バイトを128でmodした数番目にあるseedの文字」を使う。
UTF8環境だとこんな感じ。

元文字 取得文字
-
! x
?
a
v


これをa_keyword_postsとかb_keyword_postsとかの128のテーブルに振り分けて格納するという形。
テーマとキーワード合わせて256テーブル。
テーブル分けする意味あんのか?って気もしないでもないけど、まあこれでやってみる。