webiny/analytics-db

这是一个帮助您存储不同时间序列分析数据的库。

v1.0.0 2017-09-29 07:30 UTC

This package is not auto-updated.

Last update: 2024-09-14 18:47:37 UTC


README

AnalyticsDb是一个组件,允许您存储和查询不同的时间序列(数值)数据。一个简单的用例是跟踪给定日期/时间范围内您网站上的访客数量,或者跟踪某个季度的电子商务收入。

// get analytics instance
$mongo = new \Webiny\Component\Mongo\Mongo('127.0.0.1:27017', 'webiny');
$analytics = new \Webiny\AnalyticsDb\AnalyticsDb($mongo);

// store some visitor data
$analytics->log('visitor')->addDimension('browser', 'chrome')->addDimension('country', 'UK');

// store some revenue data
$analytics->log('revenue', 0, 120.00)
    ->addAttribute('brand', 'Foo')
    ->addDimension('product', 'hdd', 79.50)
    ->addDimension('product', 'mouse', 20.50)
    ->addDimension('tax', 'in-country', 20);

// save the data
$analytics->save();

// query data
$query = $a->query('revenue', 0, DateHelper::rangeLast30Days());

// get total number of visitors for the last 30 days, and group them by day
$result = $query->stats()->getResult();

// get total number of visitors for the last year, and group them by month
$query = $a->query('revenue', 0, DateHelper::rangeYear());
$result = $query->stats()->monthly()->groupByTimestamp()->sortByTimestamp(1)->getResult();

// get revenue for last quarter and group it by revenue type
$query = $a->query('revenue', 0, DateHelper::rangeQ1());
$result = $query->groupByDimensionName()->sortByCount(-1)->getResult();

依赖项

该组件需要一个\Webiny\Component\Mongo\Mongo实例来访问您的Mongo数据库,它将在其中创建几个集合来存储数据。

##维度

维度跟踪与您的实体相关联的不同数据。例如,假设您有一个产品A,有两种颜色,红色和蓝色。产品就是您的实体,颜色就是您的维度。

// track a view on the red product
$analytics->log('product', 'A')
  ->addDimension('color', 'red');

// track a view on the blue product
$analytics->log('product', 'A')
  ->addDimension('color', 'blue');

在跟踪维度时,您可以得到诸如“显示我所有红色版本产品的浏览量”之类的统计数据。

$query = $a->query('product', 'A', DateHelper::rangeLast30Days());
$result = $query->dimension('color', 'red')->groupByDimensionValue()->sortByCount(-1)->getResult();

属性

属性比维度简单得多。属性只是您可以附加到实体上的额外标签,以便您可以按它们分组、排序和筛选。属性的一个典型用例是,您有一个产品,它具有特定的品牌,您想能够获取某个品牌的顶级10个产品的列表。

$analytics->log('product', 'A')->addAttribute('brand', '10');

您可以为产品添加多个属性。

现在您可以这样做

// show me top 10 products for brand "10" for last 30 days
$query = $a->query('product', null, DateHelper::rangeLast30Days());
$result = $query->stats()->addAttributeFilter('brand', 10)->sortByCount('-1')->limit(10);

存储数据

数据使用log方法存储。请注意,实际上只有在您调用save方法之前,数据才会被保存。

为了将属性分配给您的数据,例如,您希望增加网站上访客的数量,但您还想要
存储一些属性,比如用户使用的浏览器类型,以及他来自哪个国家;为此,您可以使用dimensions。维度也是计数器,可以进行查询。

例如,对于此用例

$analytics->log('visitor')->addDimension('browser', 'chrome')->addDimension('country', 'UK');

您可以知道在给定日期范围内您有多少访客,您可以根据天或月对这些结果进行分组。由于您在维度中存储了一些数据,您还可以知道,有多少用户使用了chrome而不是firefoxie,然后您可以将这些与您的总访客数量进行交叉引用。

您还可以为日志分配一个引用值,例如,您可以像这样跟踪页面级别的分析

$analytics->log('page', 123)->addDimension('browser', 'chrome')->addDimension('country', 'UK');

这将跟踪ID为123的页面上的访客。然后您可以在以后查询该页面的分析数据。

一些最佳实践是不用大量不同的引用查询数据。例如,如果您想了解您网站上的总访客数量,不要查询然后汇总所有页面的访客数量。相反,存储两个不同的分析数据,一个是页面,另一个是一般访客。

默认情况下,log方法将值增加1,但在某些情况下,例如您希望跟踪收入时,您需要指定增量值,这可以通过使用第三个参数来完成,如下所示

$analytics->log('revenue', 0, 120.00);

这将增加revenue计数器120.00(支持浮点值)。

查询数据

要查询数据,您需要获取一个query实例,如下所示

$query = $a->query('revenue', 0, DateHelper::rangeLast30Days());

对于query,您必须指定实体名称、引用和日期范围。有一个DateHelper类可以帮助您处理一些常用的日期范围,但您也可以指定自己的自定义范围,它只是一个包含两个Unix时间戳的数组[dateFromTimestamp, dateToTimestamp]

一旦获取到 query 实例,就可以获取给定范围内的结果。默认情况下,数据按天分组,但也可以按月格式获取。

$query = $a->query('revenue', 0, DateHelper::rangeLast30Days());

// get data by day
$result = $query->stats()->getResult();

// get data by month
$result = $query->stats()->monthly()->getResult();

要查询维度,请使用 dimension 方法,如下所示

$query = $a->query('revenue', 0, DateHelper::rangeYear());

// show me the revenue breakdown by item type (eg, product, tax)
$result = $query->dimension()->groupByDimensionName()->sortByCount(-1)->getResult();

// show me total revenue just from products
$result = $query->dimension('product')->getResult();

// show me total revenue breakdown by product type
$result = $query->dimension('product')->groupByDimensionValue()->sortByCount(-1)->getResult();

// show me revenue for `HDD` product by days
$result = $query->dimension('package', 'PAYG')->getResult();

// show me total revenue for `HDD` product
$result = $query->dimension('package', 'PAYG')->groupByDimensionName()->getResult();

许可证和贡献

贡献 > 随意发送 PR。

许可证 > MIT

资源

要运行单元测试,需要使用以下命令

$ cd path/to/AnalyticsDb/
$ composer install
$ phpunit