webiny / analytics-db
这是一个帮助您存储不同时间序列分析数据的库。
Requires
- php: >=7.0
- webiny/mongo: ~1.6 || dev-master
Requires (Dev)
- mybuilder/phpunit-accelerator: dev-master
- phpunit/phpunit: ~4
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
而不是firefox
或ie
,然后您可以将这些与您的总访客数量进行交叉引用。
您还可以为日志分配一个引用值,例如,您可以像这样跟踪页面级别的分析
$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