6-1 第一部分
最后更新于:2022-04-02 07:42:26
原文地址:https://developer.piwik.org/guides/persistence-and-the-mysql-backend
> 此文中的内容和《Piwik数据库模式(二)》中相互参照
### 数据库模式
Piwik坚持两种主要的数据类型:
- 日志数据:Piwik在跟踪器中收到的原始分析数据
- 归档数据:被缓存并用于构建报告的聚合分析数据(由日志数据构建)
派维克还坚持其他更简单的数据形式,包括:
- 网站
- 用户
- 目标
- 选项
#### 日志数据
有四种类型的日志数据:
- 访问
- 动作类型
- 转换
- 电子商务项目
所有日志数据都以类似的方式持久存储:新数据不断添加到集合中,而不是访问,更新不存在。
访问数据在活动时更新。所以直到访问结束,Piwik可能会尝试更新它。
计算分析数据时读取日志数据,有时会删除旧数据(通过数据清除功能)。
后端必须确保插入新的日志数据尽可能快,并且聚合日志数据不会太慢(尽管显然更快更好)。
#### 访问
访问记录存储在log_visit表中。
每次访问都包含以下信息:
```shell
idsite:被跟踪的网站的ID
idvisitor:访客ID(8字节二进制字符串)
visitor_localtime:访问日期时间在访客的时间
visitor_returning访问是否是访问者的第一次访问
visitor_count_visits:访问者对此的访问次数
visitor_days_since_last:自此访问者上次访问以来的天数(如果有)
visitor_days_since_order:自此访客上次订单以来的天数(如果有)
visitor_days_since_first:访客首次访问以来的天数
visit_first_action_time:访问的第一个动作的日期时间
visit_last_action_time:访问的最后一个操作的日期时间
visit_exit_idaction_url:访问的最后一个操作的URL操作类型的ID
visit_exit_idaction_name:访问的最后一个操作的页面标题操作类型的ID
visit_entry_idaction_url:访问的第一个操作的URL操作类型的ID
visit_entry_idaction_name:此访问的第一个操作的页面标题操作类型的ID
visit_total_actions:在这次访问期间执行的行动计数
visit_total_searches:在此访问期间执行的站点搜索的计数
visit_total_events:在此访问期间执行的自定义事件的计数
visit_total_time:访问总时间
visit_goal_converted:这次访问是否改变了目标?
visit_goal_buyer访客是否在这次访问期间点了点东西
referer_type:该访问者的引荐来源的类型。可以是以下值之一:
Common :: REFERRER_TYPE_DIRECT_ENTRY = 1:如果设置为此值,其他referer_...字段没有意义。
Common :: REFERRER_TYPE_SEARCH_ENGINE = 2:如果设置为此值,referer_url则是搜索引擎的URL,并且referer_keyword是使用的关键字(如果我们可以找到它)。
Common :: REFERRER_TYPE_WEBSITE = 3:如果设置为该值,referer_url则是网站的URL。
Common :: REFERRER_TYPE_CAMPAIGN = 6:如果设置为此值,referer_name则是广告系列的名称。
referer_name: 推荐人姓名; 其含义取决于具体的引用者类型
referer_url:引荐来源网址 其含义取决于具体的引用者类型
referer_keyword:如果搜索引擎是引荐来源,则使用关键字
config_id:所有访问的配置选项的哈希值,包括操作系统,浏览器名称,浏览器版本,浏览器语言,IP地址和所有浏览器插件信息
config_os:用于识别用于进行此次访问的操作系统的短字符串。有关详细信息,请参阅设备检测器
config_browser_name:用于标识用于进行此次访问的浏览器的短字符串。有关详细信息,请参阅设备检测器
config_browser_version:用于标识用于进行此次访问的浏览器版本的字符串
config_resolution:一个字符串,用于标识访问者用来进行访问的屏幕分辨率(例如,'1024x768')
config_pdf:访问者的浏览器是否可以查看PDF文件
config_flash访问者的浏览器是否可以查看Flash文件
config_java:访问者的浏览器是否可以运行Java
config_director:
config_quicktime:访问者的浏览器是否使用quicktime来播放媒体文件
config_realplayer:访问者的浏览器是否可以播放realplayer媒体文件
config_windowsmedia访问者的浏览器是否使用Windows媒体播放器播放媒体文件
config_gears:
config_silverlight:访问者的浏览器是否可以运行silverlight程序
config_cookie:访问者的浏览器是否启用了Cookie
location_ip:访问的计算机的IP地址。可以匿名化
location_browser_lang描述访问者浏览器中使用的语言的字符串
location_country描述访问者在访问该网站时所在国家的两个字符的字符串。由UserCountry插件设置。
location_region:描述访问者所在国家/地区的两个字符串。由UserCountry插件设置。
location_city:访问访问者访问该网站时,命名城市的字符串。由UserCountry插件设置。
location_latitude:访问者访问该网站时的纬度。由UserCountry插件设置。
location_longitude访问者访问该网站时的经度。由UserCountry插件设置。
custom_var_k1:访问自定义变量名称在第一个插槽中访问自定义变量。
custom_var_v1:访问自定义变量值在第一个插槽中访问自定义变量。
custom_var_k2:访问自定义变量名称在第二个插槽中访问自定义变量。
custom_var_v2:访问自定义变量值在第二个插槽中访问自定义变量。
custom_var_k3:访问自定义变量名称在第三个插槽中访问自定义变量。
custom_var_v3:访问自定义变量值在第三个插槽中访问自定义变量。
custom_var_k4:访问自定义变量名称在第四个插槽中访问自定义变量。
custom_var_v4:访问自定义变量值在第四个插槽中访问自定义变量。
custom_var_k5:访问自定义变量名称在第五个插槽中访问自定义变量。
custom_var_v5:访问自定义变量值在第五个插槽中访问自定义变量。
```
一些插件(如提供者插件)会向访问添加新信息。
##### 表详细信息
index_idsite_config_datetime当尝试识别返回的访问者时,使用该索引。
在index_idsite_datetime聚合时访问使用索引。由于日志聚合仅在个别日期发生,因此该指数可帮助Piwik快速查找网站和期间的访问。没有它,日志聚合将需要通过整个log_visit表进行表扫描。
#### 访问操作
访问还包含一个操作列表,一个访问者在访问期间进行的每个操作。那些存储在log_link_visit_action表中。
访问操作包含以下信息:
```shell
server_time:UTC时区跟踪操作的日期时间
idaction_url:此操作的URL操作类型的ID
idaction_url_ref:访问中上一个操作的URL操作类型的ID
idaction_name:此操作的页面标题操作类型的ID
idaction_name_ref:访问中上一个操作的页面标题操作类型的ID
time_spent_ref_action:做上一次动作花费的时间
custom_var_k1:页面自定义变量的第一个插槽的自定义变量名称
custom_var_v1:页面自定义变量的第一个插槽的自定义变量值
custom_var_k2:页面自定义变量的第二个插槽的自定义变量名称
custom_var_v2:页面自定义变量的第二个插槽的自定义变量值
custom_var_k3:页面自定义变量的第三个插槽的自定义变量名称
custom_var_v3:页面自定义变量的第三个插槽的自定义变量值
custom_var_k4:页面自定义变量的第四个插槽的自定义变量名称
custom_var_v4:页面自定义变量的第四个插槽的自定义变量值
custom_var_k5:页面自定义变量的插槽的自定义变量名称
custom_var_v5:页面自定义变量的插槽的自定义变量值
custom_float:一个未指定的浮动字段,通常用于保留服务器服务此操作所需的时间
```
##### 表详细信息
在idsite与idvisitor列从访问行为的相关访问,以避免加入log_visit表在某些情况下被复制。
该index_idvisit指数允许Piwik快速查询访问行为以进行访问。
该index_idsite_servertime聚合访问的操作时使用索引。它允许快速访问在特定时间段内为特定网站跟踪的访问操作,并允许我们避免在整个表中进行表扫描。
#### 动作类型
操作类型,如特定的URL或页面标题,以及访问。这种分析可以导致对例如哪些页面比其他访问者更相关的了解。
当Piwik遇到新的动作类型时,会持续存在一个新的动作类型实体。
操作类型将保留在log_action表中,并包含以下信息:
```shell
name:描述动作类型的字符串。可以是网址,网页标题,广告系列名称或其他内容。意义由type字段决定。
hash:使用名称计算的哈希值。
type:动作类型的类别。可以是以下值之一:
Piwik \ Tracker \ Action :: TYPE_PAGE_URL = 1:该操作是要跟踪的网站上的页面的URL。
Piwik \ Tracker \ Action :: TYPE_OUTLINK = 2:该操作是一个URL是正在跟踪的网站上的一个链接。访客点击了它。
Piwik \ Tracker \ Action :: TYPE_DOWNLOAD = 3:该操作是从要跟踪的网站下载的文件的URL。
Piwik \ Tracker \ Action :: TYPE_PAGE_TITLE = 4:操作是正在跟踪的网站上的页面的页面标题。
Piwik \ Tracker \ Action :: TYPE_ECOMMERCE_ITEM_SKU = 5:该操作是网站上销售的电子商务项目的SKU。
Piwik \ Tracker \ Action :: TYPE_ECOMMERCE_ITEM_NAME = 6:该操作是在该网站上销售的电子商务项目的名称。
Piwik \ Tracker \ Action :: TYPE_ECOMMERCE_ITEM_CATEGORY = 7:该操作是网站上使用的电子商务项目类别的名称。
Piwik \ Tracker \ Action :: TYPE_SITE_SEARCH = 8:操作类型是站点搜索操作。
Piwik \ Tracker \ Action :: TYPE_EVENT_CATEGORY = 10:操作是事件类别(请参阅跟踪事件用户指南)
Piwik \ Tracker \ Action :: TYPE_EVENT_ACTION = 11:操作是事件类别
Piwik \ Tracker \ Action :: TYPE_EVENT_NAME = 12:该操作是一个事件名称
Piwik \ Tracker \ Action :: TYPE_CONTENT_NAME = 13:操作是内容名称(请参阅内容跟踪用户指南和开发人员指南)
Piwik \ Tracker \ Action :: TYPE_CONTENT_PIECE = 14:动作是内容片段
Piwik \ Tracker \ Action :: TYPE_CONTENT_TARGET = 15:动作是内容目标
Piwik \ Tracker \ Action :: TYPE_CONTENT_INTERACTION = 16:操作是内容交互
url_prefix:如果这个名字是一个URL,那么这个URL是前缀。前缀从实际URL中删除,因此协议和www。在分析过程中会忽略URL的一部分。可以是以下值:
0: 'http://'
1: 'http://www.'
2: 'https://'
3: 'https://www.'
```
##### 表详细信息
该index_type_hash指数追踪发现现有的操作类型时使用。
#### 转换
跟踪与目标的转化参数匹配的访问操作时,将创建转换并持久化。一个转换是一个计数器,计数您的访问者之一所需的行动。派维克将分析这些结果,并结合造成他们的行为,以帮助派维克用户了解如何让访问者采取更多的期望行动。
转换存储在log_conversion表中,并包含以下信息:
```shell
idvisit:导致此转换的访问ID
idsite:该转换的网站的ID
idvisitor:导致此转换的访问者的ID
server_time:UTC时区中的转换的日期时间
idaction_url:导致此转换的访问操作的URL操作类型的ID
idlink_va:导致此转换的具体访问操作的ID
referer_visit_server_date:
url:导致该转换被跟踪的网址
idgoal:此转换的目标ID
idorder:如果此转换是用于电子商务订单或已放弃的购物车,则这将是订单的ID
items:如果此转换是用于电子商务订单或已放弃的购物车,则这将是订单/购物车中的商品数量
revenue:如果此转换是用于电子商务订单或已放弃的购物车,则这是订单产生的总收入
revenue_subtotal:如果此转换是用于电子商务订单或已放弃的购物车,则这是订单/购物车中的商品的总成本
revenue_tax:如果此转换是用于电子商务订单或已放弃的购物车,则这是应用于订单/购物车中的商品的总税额
revenue_shipping:如果此转换是用于电子商务订单或已放弃的购物车,则这是总运费成本
revenue_discount:如果此转换是用于电子商务订单或已放弃的购物车,则这是订单应用的总折扣
```
##### 表详细信息
存储在上表中未列出的所有额外信息都将从此转换所用的访问实体复制。这允许我们log_visit在某些情况下避免加入表。
的index_idsite_datetime聚合转化率时使用索引。它可以快速访问在特定时间段内为特定网站跟踪的转化,并允许我们避免在整个表格中进行表扫描。
#### 电子商务项目(又名转换项目)
电子商务项目是以电子商务订单出售或在废弃购物车中放弃的商品。
电子商务项目存储在log_conversion_item表格中,并包含以下信息:
```shell
server_time:
idorder:该电子商务项目的一部分的订单ID
idaction_sku:包含项目的SKU的动作类型实体的ID
idaction_name:包含电子商务项目名称的操作类型实体的ID
idaction_category:包含此电子商务项目类别的操作类型实体的ID
idaction_category2:包含此电子商务项目类别的操作类型实体的ID
idaction_category3:包含此电子商务项目类别的操作类型实体的ID
idaction_category4:包含此电子商务项目类别的操作类型实体的ID
idaction_category5:包含此电子商务项目类别的操作类型实体的ID
price:这个个人电子商务项目的价格
quantity:相关电子商务订单中存在的该项目的金额
deleted:该项目是否从订单中移除
```
##### 表详细信息
的idsite,idvisitor,server_time和idvisit列从这个电子商务项目所属的转换实体复制。它们被复制,所以我们可以聚合电子商务项目而不必加入其他表。
该index_idsite_servertime索引用于汇总电子商务项目。它允许快速访问特定网站跟踪的项目,并在特定时间段内让我们避免在整个表格中进行表格扫描。
#### 归档数据
存档数据由指标和报告组成。度量是数值,并按原样存储。报表存储在DataTable实例中,并作为压缩的二进制字符串持久化。
归档数据与网站ID,期间和段以及数据的识别名称相关联。所有归档数据将通过此信息进行多次查询。目前,该段被散列并附加到度量名称的末尾。存档数据也随着当前的日期和时间而持续存在,因此可以知道某些数据的多少。
所有归档数据将包含以下信息:
```shell
idarchive:与使用相同网站ID,期间和细分存档的所有档案数据共享的ID。
name:报告或指标的名称。如果使用段,则将该段的哈希附加到该名称。
idsite:该归档数据所在网站的ID。
date1:此归档数据所用期间的第一个日期。
date2:此归档数据所用期间的最后日期。
period:此归档数据所用的期间类型。可以是以下值之一:
1:天。
2:为一周时间。
3:月份。
4:年期
5:范围期间。
ts_archived:datetime存档数据被缓存。
value:数值(用于度量)或二进制字符串(用于报表)。
```
##### 表详细信息
存档数据存储在以月份分区的表中,并且自动创建丢失的表。2012年1月以来的汇总访问报告将与2012年2月以来的总体访问报告不同。
Piwik创建两种类型的归档表,一种用于每种类型的归档数据。该archive_numeric表存储度量数据和archive_blob表存储报表数据。表格以年份和月份为后缀:例如archive_numeric2012年1月的表格将被命名archive_numeric_2012_01。
在archive_numeric表中:
所述index_idsite_dates_period查询档案数据时使用索引。它允许Piwik快速查询任何站点和期间的归档数据,以及在特定日期时间归档的数据。
清除归档数据index_period_archived时使用该索引。它允许Piwik在特定时期内快速查找归档数据,该时间段已足够清除。
在archive_blob表中:
index_period_archived索引的使用方式与archive_numeric表中的索引相同
archive_blob表没有一个索引,可以快速查询按网站,期间和归档日期的行。这是因为不应该这样查询。相反,archive_numeric应该查询表并idarchive保存值。这些值可用于查询archive_blob表中的数据。
#### 其他数据
##### 网站(又名网站)
网站实体包含有关跟踪访问的网站的信息。这些访问和归档数据条目中不会有这么多,但会经常查询。
每个报告请求(通过Reporting API或通过Piwik的UI)将查询一个或多个站点实体。如果需要更新跟踪器缓存,跟踪器将仅查询站点数据。对于大多数跟踪请求,不会查询站点数据(从而导致跟踪器的更高性能)。
站点实体存储在site表中,并包含以下信息:
```shell
idsite:网站的唯一ID。
name:网站的名称。
main_url访问者访问网站的主要网址。
ts_created:网站实体持续的日期和时间。
ecommerce:1如果该网站是电子商务网站,0如果没有。
sitesearch:1如果网站包含内部搜索功能,0如果没有。
sitesearch_keyword_parameters:网站使用的查询参数来保存内部网站搜索关键字。这是一个逗号分隔的列表。
sitesearch_category_parameters:站点使用的查询参数来保存内部站点搜索类别。这是一个逗号分隔的列表。
timezone:网站的时区。
currency:网站使用的货币。仅当该网站是电子商务网站时才有效。
excluded_ips:以逗号分隔的IP地址或IP地址范围列表。来自这些IP地址之一的访问将不会被跟踪到本网站。
excluded_parameters:用逗号分隔的查询参数名称列表。在访问和操作被跟踪之前,这些查询参数将从页面URL中删除。
excluded_user_agents:用逗号分隔的字符串列表。使用包含其中一个字符串的用户代理的访问将不会被跟踪到本网站。
group:
keep_url_fragment:1如果URL片段(除了之后的所有内容#)应该保存在跟踪动作的URL中,0否则。
```
站点实体还包含可用于访问网站的额外URL的列表。这些不存储在站点实体本身中:它们存储在site_url表中。
站点实体数据访问主要通过Piwik \ Site类进行。通过该类无法查询的任何内容都可以通过SitesManager核心插件进行查询。
#### 目标
每个网站都有可选的目标列表。目标是网站访问者应该采取的所需行动。
目标存储在goal表中,并包含以下信息:
```shell
idsite:该目标所属网站的ID。
idgoal:该目标的身份证明(仅针对本网站的目标)。
name:这个目标的名字。
match_attribute:描述当转换目标时应该匹配哪个请求的字符串。可以是以下值之一:
manually:目标是通过手动转换请求进行转换。
url:目标是根据操作网址包含的内容进行转换的。
title:根据动作页面标题所包含的内容转换目标。
file:根据下载文件的文件名包含的目标进行转换。
external_website:根据outlink的URL包含的目标进行转换。
pattern:检查目标是否转换时使用的模式。
pattern_type:当检查目标是否被转换时使用的模式匹配的类型。
contains:如果匹配属性包含模式,则转换目标。
exact:如果match属性等于模式,则转换目标。
regex:如果match属性是与模式的正则表达式匹配,则转换目标。
case_sensitive:1如果匹配应该区分大小写,0否则。
allow_multiple:1如果允许每次访问允许多次转换,0否则。
revenue:转换产生的收入金额(如果有的话)。
deleted:1如果这个目标被Piwik用户删除,0否则。
```
注意:电子商务和放弃的购物车目标是两个特殊ID的特殊目标。电子商务网站自动实现这些目标。
##### 用户
用户实体描述超级用户以外的每个Piwik用户。他们坚持在users桌子里。
以下信息存储在用户实体中:
```shell
login:他的用户登录手柄。
password':用户密码的哈希。
alias:用户的别名(如果有)。在UI中寻址用户时,将显示该值而不是登录句柄。
email:用户的电子邮件地址。
token_auth:用户的令牌验证。
date_registered:用户数据持续的日期。
```
每个UI和Reporting API请求都读取用户数据。
有一些用户相关信息不直接存储在用户实体中。他们描述如下:
##### 用户权限
用户可以被允许和不允许访问网站。Piwik可以在access表中访问每个网站的每个用户的访问级别。
要了解更多信息,请阅读权限指南。
##### 用户语言选择
Piwik还将坚持每个用户的选择语言。用户登录与语言的名称相关联(用所选语言写成而不是英语)。
该关联和持久性逻辑由LanguagesManager插件实现。
##### 选项
选项是键值对,其中键是一个字符串,该值是另一个字符串(可能更大,也可能是二进制)。每个UI和Reporting API请求都会查询它们。跟踪器将缓存相关选项值,因此只有当缓存需要更新时才会查询选项。
每个非追踪请求都应加载一些选项。这些选项有一个特殊的自动加载属性设置为1
';