現在アクセス解析情報をPostgreSQLに持たせようと考えています


たとえば単一TABLEに
日時、access元、keyword、browser、pageを持つのと
それぞれTABLEに分けて結合するのと
どちらが高速なんでしょうか?

[accessTABLE]
access元ID,keywordID,browserID,pageID,日時

[access元TABLE]
[keywordTABLE]
[browserTABLE]
[pageTABLE]
ID,名

さらに各TABLEには日時を持たせると
日時検索が早いような気がしますがいかがでしょうか?

[accessTABLE]
accessID,keywordID,browserID,pageID,日時

[access元TABLE]
[keywordTABLE]
[browserTABLE]
[pageTABLE]
ID,名,日時

Siteの規模はuser数約5000人
AlexaのPageviews(%mil)が約20、Reach(%mil)が約200
この時どのように情報を持つべきでしょうか?

fileも検討してますが、nfs利用時のlockが不可と聞き
DBにすべきかと思っています

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2005/09/26 14:28:20
  • 終了:--

回答(2件)

id:andi No.1

andi回答回数448ベストアンサー獲得回数02005/09/26 16:04:14

ポイント30pt

> どちらが高速なんでしょうか?


そもそもワンセットのデータ(日時、access元、keyword、browser、page)を正規化してテーブル分割する意味は無いように思われます。

また結合処理は当然、結合を行わない場合より速度は低下します(勿論そのテーブルの使用目的(アプリの設計、作り)にもよりますが)。

id:ganessa

やはりそうですか・・・

それでは一つのテーブルに全て持って

しまってかまわないということですね。

この場合だと下のほうに記述した日時を

含んだ場合でも同じでしょうか?

たとえばキーワードランキングを

生成するとしたらブラウザなんかは必要ないわけですが、

そのとき大きなテーブルを見るよりは、

キーワードだけのテーブルを見たほうが

早いかと思ったんですが・・・

2005/09/26 16:09:12
id:andi No.2

andi回答回数448ベストアンサー獲得回数02005/09/26 18:15:02

ポイント30pt

> この場合だと下のほうに記述した日時を

> 含んだ場合でも同じでしょうか?


そもそも同じ内容のデータを複数のテーブルに登録するのはRDBMSの正規化の目的と矛盾しています。

(正規化すれば早くなると言うわけではありませんが)


> そのとき大きなテーブルを見るよりは、

> キーワードだけのテーブルを見たほうが

> 早いかと思ったんですが・・・


そこまで行くとRDBMSの内部的な仕組みの話になってしまいますので想像になってしまいますが、同じRDBMS上のテーブル-カラムという枠組みにデータを登録する以上、データを見に行く速度は変わらないと思います(テーブル→カラムのアドレスを探しに行くという順序は変わらない)。

id:ganessa

ご回答ありがとうございます。

やはりそうですか。

余計なことを考えずに他の方法で

高速化できるよう頑張ります。

お忙しいところご回答ありがとうございました。

2005/09/26 19:01:18

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません