最佳表现结构

时间:2017-05-17 11:21:33

标签: mysql laravel laravel-5


我正在为一个大项目的数据库结构工作,我想知道什么方法用于日志表 我正在使用 Laravel 5。* Eloquent
此表将包含 User_id,User-Agent,IP,DNS,Lang ....

方法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重定向,然后将用户数据记录在我们的数据库中。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您希望使用日志数据库实现什么目标?如果它只是插入数据,我会去一个非规范化表(选项1)。 如果您还想在每个请求中选择数据,这两个选项都会降低您的应用程序速度。您应该查看一下nosql数据库。

<强>分区
另一个选项可以是使用分区,请参阅:https://laracasts.com/discuss/channels/eloquent/partition-table

在这种情况下,您可以使用唯一数据的校验和,并将相应的数据存储在带有前缀的表中。

例如:$checksum = 'pre03k3I03fsk34jks354jks35m..';,存储在表格logs_plogs_pr中。

不要忘记在校验和列上添加索引。