Ticket #17185

DB再設計

Open Date: 2009-06-07 04:31 Last Update: 2009-07-18 17:13

Reporter:
Owner:
Type:
Status:
Open [Owner assigned]
Component:
(None)
MileStone:
Priority:
8
Severity:
7
Resolution:
None
File:
None

Details

文字列操作がパフォーマンスを落としてるかもしれないのと、アイデアを色々試すにはちょっと堅い設計なので、もう少し柔軟にしてみる。

Ticket History (3/14 Histories)

2009-06-07 04:31 Updated by: token
  • New Ticket "DB再設計" created
2009-06-07 04:57 Updated by: token
  • Priority Update from 5 - Medium to 6
2009-07-10 03:46 Updated by: token
Comment

フォーラムのプライバシー問題から。

現在のdashboardは以下の4つの要素が組み合わされています。

  • Genkidamaの利用状況を収集して出力している ( global status )
  • 再生状況(cache/dht/nicovideo)を表現している ( global history )
  • DHT上の出来事を視覚的に表現している ( global entries )
  • 利用動向を表現している? ( global ranking )

統計DBの仕様: wiki:集計サーバ

dashboardで使われているSQLから判断。内部処理は未検証。

online_users

動作に必要な情報プライバシーに関わる情報

初期ノードをクライアントに公開するためのもの。ここはプライバシーに関わる内容を扱うので対処が必要ですね。

online_data

積極的プライバシーに関わる情報?

ファイルがどれだけDHT上にあるかどうかをカウントするだけ。

多分、user_logと関連があります。

user_log

ここでlogoutになったノードに紐付くonline_dataは削除されるんじゃないかな。そうでないと、online_dataから取り出す値が増え続けてしまう。

data_log

dashboardからは使われてない。GenkidamaクライアントのDHT制御用?

nico_video_accesss_log

積極的プライバシーに関わる情報?

『誰(暗号化されたノード情報)がどのように動画を再生したか』が書かれていて

  • global history(cache/dht/nicovideo)
  • global entries
  • global ranking(sm****毎の再生数)

で使われている。

現在では、DBで小細工せずに、個人由来の情報を暗号化してノードを区別するkeyにしている。


改善案

個人由来の情報はクライアント側に封入するので、統計サーバで暗号化済ノード名(暗号化した個人由来の情報)を保持する必要がある部分は、global entriesに限られてくるんじゃないかと。と言う事で、DBスキーマの改善案を以下に示す。


global history用に cache/dht/directを列にし、それぞれをカウントアップしていく方式に変える。テーブル名も変える必要があるが、とりあえず他のサービスに対応してもサービス依存の文字列に縛られなくなり、依存性除去が出来る。それに、Genkidamaとしてはcache/dht/directの3要素が数値で解れば十分だと思う。また、ネットversion毎に統計サーバを分けるなら、version列は要らないんじゃないかなぁ。

nico_video_access_log

id主キー
datetime日時
node_hashSHA1(IPアドレス:ポート番号)
versionバージョン番号
video_idビデオID
access_modeアクセス種別(ローカル、DHT、本家)
cache整数
dht整数
direct整数
cache_url_hashSHA1(キャッシュURL)
isLowtrue/false ( or 1/0)

ついでに、lowと非lowは文字列で判断するんじゃなくて、専用の列を用意してみるとか。区別しない場合は、単純にdistinct(video_id)すればよいし、区別する時はisLowを見ればよいし。


global entriesは、online_dataから取れば良いと思う。今後他のサービスに対応するなら、online_dataにサービス名を追加して扱う方が良さそう。online_dataの有効性を決める為には、『誰が何を公開しているか』を知っている事とuser_logとの兼ね合いで、暗号化済ノード名は必須になる。

online_data

id主キー
datetime日時
hashSHA1(IPアドレス:ポート番号)
versionバージョン番号
keyキー(video_id)

user_log

id主キー
datetime日時
hashSHA1(IPアドレス:ポート番号)
versionバージョン番号
statusログイン、ログアウト


global rankingは、global history用の改造案を元に導出(cache/dht/directの合計)すれば良さそう。


改善案を使った結果

と言う事で、プライバシーに関わる情報を扱うのは

  • online_users
  • online_data
  • user_log

の3つに狭められる。

2009-07-10 13:44 Updated by: token
Comment

あ、マイナーバージョンの方か。バージョン通知の案に使う為に、マイナーバージョンの列をどこかに残すとするなら、online_usersに残しておけば、残りのテーブルにはバージョン列を持たせなくても良いかも。

2009-07-10 16:46 Updated by: syuu
Comment

前提として、利用動向を把握するのが集計サーバの目的でDashboardは集計したデータをユーザにも還元するのを目的としてあのような情報を提供しているので、Dashboardで必要ないからといって記録するデータ量を削る必要はないと思ってます。 逆に、ユーザの許容範囲内で最大限記録をとっておいた方が良い。 取り合えず取っておいて、どのように使うかは後から考えるという感じ。

なので、ローカルから取ってこれるから集計サーバに記録する必要なし、とはならないと考えています。

但し、DBスキーマは結構汚くなってるから調整する必要はあると思っていて、上述の変更は妥当なんじゃないかなと思います。

2009-07-11 06:43 Updated by: token
Comment

>なので、ローカルから取ってこれるから集計サーバに記録する必要なし、とはならないと考えています。 じゃあ、プライバシー問題は全て任せたよ。

2009-07-11 07:03 Updated by: token
Comment

thumbinfo.xmlはどう扱おうか。

これまでの話をまとめると、クライアントでcache生成するときにthumbinfo.xmlも取ってきて、DHTにputする。ついでにxmlrpcにも送る。その後、サーバ内でthumbinfo.xmlをファイルで利用するのか、DBに突っ込んで利用するのか。

使い勝手を考えると、DBの方が良いかな。ファイルでもいいかと思ったけど、検索に弱いから応用性が低いな。global entriesのようなvideo_idだけでその他のデータを取ってくる処理だけを考えると、ファイルでも良いんだけど、その中身を横断的に検索しようとするとファイルじゃ面倒だね。ファイル開いてXPathで抽出箇所指定して、中身を検証ってのの繰り返し。それならDBで値を持ってて操作はSQLでやって、ってのの方がシンプル。

2009-07-13 17:38 Updated by: token
Comment

wiki:DB再設計案

を作成。

2009-07-16 11:52 Updated by: token
  • Priority Update from 6 to 8
  • Milestone Update from (None) to 0.3.6
2009-07-16 11:57 Updated by: token
Comment

wiki:DB再設計案 ここに、必要だと思う項目を理由と共に追加してくださいな。また、改善案の各項目の下側に、更に改善案のスキーマを追加して議論していきまっしょ。

2009-07-18 15:25 Updated by: token
Comment

どうも噛み合わないと思ったら、用途が違うんじゃん。と言う事でwikiの方は白紙に戻す。

Dashboard用とログ用は別々にするしかないね。ダラダラととったログを入れておくのと、表現用の理路整然としたDBと分けたいね。そうでもしないと、どうも、共用じゃ扱いにく過ぎる。

なので、ログ用はid:syuuの方で考えて。Dashboard用はこっちで決めるから。と言っても、Dashboardに必要なデータ群くらいの抽象度にしとくわ。

2009-07-18 15:30 Updated by: token
Comment

wiki:DB再設計(Dashboard)案

を作成。

wiki:DB再設計案

の方を復元しても良いけど、dashboard案が盛り込んであるので何をuniqueにするとかどのデータをまとめるとか、という案はそのままでは使えないと思うので、id:syuu側で自由にして欲しい。

2009-07-18 15:32 Updated by: token
Comment

syntaxがエラーするので、名称変更。

2009-07-18 17:13 Updated by: token
Comment

完全に分けてしまうというより、ログ用から取れるデータは取る、取り難いデータは整形してDBに突っ込んだ後で取る。という考え。

Attachment File List

No attachments

Edit

You are not logged in. I you are not logged in, your comment will be treated as an anonymous post. » Login