使用redis位图实现功能强大的分析库。

bitmapist的Python项目详细描述


位图列表

使用redis位图实现功能强大的分析库。

此库使实现实时、高度可扩展的分析成为可能,这些分析可以回答以下问题:

  • 用户123今天在线了吗?这个星期?这个月?
  • 用户123是否执行了动作“x”?
  • 这个月活跃了多少用户?这个小时?
  • 本周有多少个独特的用户执行了动作“x”?
  • 上周活跃的用户中有多少%仍然活跃?
  • 上个月活跃的用户中有多少%在本月仍然活跃?

此库非常易于使用,并使您能够轻松创建自己的报表。

使用redis位图,您可以在非常小的内存(兆字节)中存储数百万用户的事件。 您应该小心使用巨大的id(例如2^32或更大),因为这可能需要更大的内存。

现在是队列图表!请在此处阅读更多信息:

如果您想了解有关位图的更多信息,请阅读以下内容:

需要Redis 2.6+和最新版本的Redis Py。

示例

设置:

from datetime import datetime, timedelta
from bitmapist import setup_redis, delete_all_events, mark_event,                          MonthEvents, WeekEvents, DayEvents, HourEvents,                          BitOpAnd, BitOpOr

now = datetime.utcnow()
last_month = datetime.utcnow() - timedelta(days=30)

将用户123标记为活动并播放了一首歌曲:

mark_event('active', 123)
mark_event('song:played', 123)

如果用户123本月处于活动状态,请回答:

assert 123 in MonthEvents('active', now.year, now.month)
assert 123 in MonthEvents('song:played', now.year, now.month)
assert MonthEvents('active', now.year, now.month).has_events_marked() == True

本周有多少用户处于活动状态?:

print len(WeekEvents('active', now.year, now.isocalendar()[1]))

执行位操作。上个月活跃的用户有多少在这个月仍然活跃?:

active_2_months = BitOpAnd(
    MonthEvents('active', last_month.year, last_month.month),
    MonthEvents('active', now.year, now.month)
)
print len(active_2_months)

# Is 123 active for 2 months?
assert 123 in active_2_months

使用嵌套位操作(想象一下您可以用它做些什么;-):

active_2_months = BitOpAnd(
    BitOpAnd(
        MonthEvents('active', last_month.year, last_month.month),
        MonthEvents('active', now.year, now.month)
    ),
    MonthEvents('active', now.year, now.month)
)
print len(active_2_months)
assert 123 in active_2_months

# Delete the temporary AND operation
active_2_months.delete()

因为新的每小时跟踪功能被禁用(以节省内存!)要将其启用为默认值,请执行以下操作:

import bitmapist
bitmapist.TRACK_HOURLY = True

此外,您还可以提供一个额外的参数来标记事件以绕过默认值:

mark_event('active', 123, track_hourly=False)

版权所有:2012 DOIST LTD.

显影剂:阿米尔·萨利赫芬迪奇(http://amix.dk

许可证:BSD

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

推荐PyPI第三方库


热门话题
JavaGWT:何时使用Lazydemelement?   Java中跟踪消失线程的多线程处理   java Springboot未能配置数据源:“url”,但我没有使用数据库   java为按钮生成随机位置   math Java:包含二项式系数计算的表达式   java通过AsyncTask传递参数   从路径错误创建java文件   高流量网站的性能播放框架、Java、Apache、PostgreSQL、JPA和Hibernate   java将4D矢量转换为长矢量   arraylist Java循环在没有任何错误的情况下终止   java正在制作一个计算器应用程序,希望在第二个片段中更新历史,但无法完成   java将信息从IntentService发送到Activity   java如何在游戏中插入大量实体!工作   javascript如何在ScriptEngineforJava中从数学中获得准确的结果?