Django的统计存储

django-trackstats的Python项目详细描述


https://badge.fury.io/py/django-trackstats.pnghttps://travis-ci.org/pennersr/django-trackstats.pnghttps://img.shields.io/pypi/v/django-trackstats.svgCoverage Statushttps://pennersr.github.io/img/bitcoin-badge.svg

记录你的统计数据。在

源代码
http://github.com/pennersr/django-trackstats

用例

  • 您需要一个优雅的解决方案来以通用和结构化的方式存储统计信息。在
  • 您需要对各种聚合查询的结果进行非规范化。在
  • 您需要访问应用程序层中存储的统计信息。在

因此,重点是存储统计信息,以便以后在应用程序中使用 打开。其他功能,如图表、报表、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基类来构建 那个。在

交叉销售

如果你喜欢这样,你也可能喜欢:

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
在数据库中存储密码的java加密方法   java正则表达式否定整个正则表达式   java为什么要得到这个Hashmap输出?   看不到玻璃鱼爪哇SE 6   类对象包装器中的Java基本数据字段   java从文本文件中读取整数并存储到单独的变量中?(扫描仪)   优化大型Java数据阵列的处理和管理   如何使用Java XML包装类创建对象   java为ExecutorService invokeAll()创建包装器   java如何在Android Studio 1.0.0中设置Facebook SDK?获取SDK位置未找到错误   java在尝试从线程启动动画时调用了FromErrorThreadException   java根据哈希确认文件内容   通过java在neo4j中获取索引值相同的所有节点?   java为什么我的Validare邮政编码(布尔)程序返回false?   java会话自动从servlet/jsp生成,尽管存在以下条件:<%@page session=“false”%>   创建新LANsocket时拒绝java连接   java如何多线程更新由sql代码更新的数据库?   安卓 Java使用类作为集合来添加项   安卓为什么我的清单文件不声明java包?