2017-05-17 16 views
0


私は大きなプロジェクトのデータベース構造に取り組んでいます。私はどのような方法をログテーブルに使用するのだろうかと思っています。
私はLaravel5 *Eloquentを使用しています。
この表には含まれています、USER_ID、ユーザーエージェント、IP、DNS、ラング ....最高のパフォーマンスの構造

方法A:

LOGS_TABLE : 

| Id | user_id |   dns  |  ip |  user_agent .... | 
|-----|----------|-----------------|----------|---------------------| 
| 1 | 5  | dns.google.com | 8.8.8.8 | firefox.*........ | 

方法B:

LOGS TABLE : 

| Id | dns_id | ip_id | user_agent_id | | 
|----|--------|-------|---------------|--| 
| 1 |  1 |  1 |    1 | | 

IP TABLE: 

| Id | value | 
|----|---------| 
| 1 | 8.8.8.8 | 

問題は、このようなフィールドが10個あり、すべてのジョイントがリクエストを遅らせてしまうのではないかと心配しています。

なぜすべてのログを保存するのですか? :

私たちのツールは完全で高性能なIPフィルタリングサービスを提供します。その目的は、顧客が広告されたトラフィックをフィルタリングし、誰が自分のウェブサイトを正確に見ているかを選択できるようにすることです。 主な目的はFacebookに送信したいページを選択することです。たとえばFacebookに広告を掲載しています。 サービスのすべてのトラフィックは、訪問者がお客様の広告を訪問したためです。 技術的には、良いページに301リダイレクトするだけで、ユーザーデータをデータベースに記録します。

ありがとうございました。

+0

パフォーマンスが懸念されている場合、特にログの場合は、redisなどのキャッシングレイヤーを検討することをおすすめします。余分な手ごたえを恐れないでください、私は似たようなユースケースを持っていました。また、redisの発行/購読の可能性もあなたを助けるかもしれません – kentor

+0

申し訳ありませんが、問題を正しく説明していません(ログはサービスのフットプリントです)この表を読み書きします。 – Pixel

+0

私はそれに問題はありません。あなたの心配は何ですか? – kentor

答えて

1

ログデータベースでは何を達成したいですか?データを挿入するだけの場合は、非正規化テーブル(オプション1)を使用します。 リクエストごとにデータを選択する場合は、どちらのオプションもアプリケーションの処理速度を低下させます。おそらくnosqlデータベースを見てください。 https://laracasts.com/discuss/channels/eloquent/partition-table

この場合、あなたはユニークなデータのチェックサムと連携し、接頭辞で、テーブル内の対応するデータを格納することができます

パーティション
別のオプションは、パーティショニングを使用見ることができます。

例:$checksum = 'pre03k3I03fsk34jks354jks35m..';、テーブルlogs_pまたはlogs_prに保存します。

チェックサム列にインデックスを付けることを忘れないでください。

+0

ログはサービスの目標であるため、アーカイブする必要があります。 私たちのツールは、完全かつ高いレベルのIPフィルタリングサービスを提供します。その目的は、顧客が広告されたトラフィックをフィルタリングし、誰が自分のウェブサイトを正確に見ているかを選択できるようにすることです。 主な目的はFacebookに送信したいページを選択することです。たとえばFacebookに広告を掲載しています。 サービスのすべてのトラフィックは、訪問者がお客様の広告を訪問したためです。 技術的には、良いページに301リダイレクトするだけで、ユーザーデータをデータベースに記録します。 – Pixel

関連する問題