Django的统计存储
django-trackstats的Python项目详细描述
记录你的统计数据。在
用例
- 您需要一个优雅的解决方案来以通用和结构化的方式存储统计信息。在
- 您需要对各种聚合查询的结果进行非规范化。在
- 您需要访问应用程序层中存储的统计信息。在
因此,重点是存储统计信息,以便以后在应用程序中使用 打开。其他功能,如图表、报表、OLAP、查询生成器、切片&; dicing、与Datadog的集成等都超出了范围。在
概念
使用了以下概念:
- 公制 要跟踪的一条信息。例如,“订单计数”, 或“注册用户数”。
- 域
- 度量按组组织,每个组称为一个域。为 示例您可以有一个“购物”域,其中包含诸如“订单”之类的指标 “count”、“Items selled”、“Products view”和“users”域 “登录数”,“注册数”。或者,如果你在跟踪外部 社交网络的统计数据,你可以介绍一个“推特” 域和指标“关注者计数”。
- 统计
- 用于按日期存储特定度量的实际值。
- 周期
- 存储值保存的时间段。例如,你 可以随时跟踪累计的数字(周期.寿命), 每天存储增量值(周期.天或保留 跟踪过去7天的滚动计数(周期.周)。
- 参考ID
- 必须为域和指标分配唯一的引用ID(类型 字符串)。理由:具有人类可读、非PK的参考文献 一旦您要导出统计数据,就必须立即执行。
使用
首先,设置域:
from trackstats.models import Domain Domain.objects.SHOPPING = Domain.objects.register( ref='shopping', name='Shopping') Domain.objects.USERS = Domain.objects.register( ref='users', name='Users') Domain.objects.TWITTER = Domain.objects.register( ref='twitter', name='Twitter')
定义几个指标:
^{pr2}$现在,让我们存储一些一次性统计数据:
from trackstats.models import StatisticByDate, Domain, Metric, Period # All-time, cumulative, statistic n = Order.objects.all().count() StatisticByDate.objects.record( metric=Metric.objects.SHOPPING_ORDER_COUNT, value=n, Period=Period.LIFETIME) # Users signed up, at a specific date dt = date.today() n = User.objects.filter( date_joined__day=dt.day, date_joined__month=dt.month, date_joined__year=dt.year).count() StatisticByDate.objects.record( metric=Metric.objects.USERS_USER_COUNT, value=n, Period=Period.DAY)
自己创建存储统计信息的代码可能是一项乏味的工作。 幸运的是,有一些捷径可以用来跟踪统计数据而不需要 必须自己编写代码。在
假设您希望跟踪在 每日基础:
from trackstats.trackers import CountObjectsByDateTracker CountObjectsByDateTracker( period=Period.DAY, metric=Metric.objects.COMMENT_COUNT, date_field='timestamp').track(Comment.objects.all())
或者,如果你想跟踪每天每个用户的评论数量 依据:
CountObjectsByDateAndObjectTracker( period=Period.DAY, metric=Metric.objects.COMMENT_COUNT, # comment.user points to a User object_model=User, object_field='user', # Comment.timestamp is used for grouping date_field='timestamp').track(Comment.objects.all())
模型
StatisticByDate模型表示按日期分组的统计数据- 最常见的用例。在
另一个常见的用例是按日期和其他对象分组 (例如用户、类别、站点)。为此,请使用 按日期和对象统计。它使用通用外键。在
如果您需要以不同的方式分组,例如按国家、省 而date,您可以使用AbstractStatistic基类来构建 那个。在
交叉销售
如果你喜欢这样,你也可能喜欢:
- django allauth:https://github.com/pennersr/django-allauth
- 网络电话:https://github.com/pennersr/netwell
- 项目
标签: