使用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第三方库


热门话题
java有没有一种方法可以在不关闭底层流的情况下关闭Writer?   java旋转形状不出现在小程序上   java将JPanel插入JOptionPane并检索数据   java如何对不同列表中的ArrayList进行排序   java永恒提醒服务   amazon web服务在Java中创建表之后创建DynamoDB全局二级索引   java循环程序以在完成检查后重新启动   在只读应用程序中共享对话式Hibernate EntityManager appwide的java陷阱?   java系统。出来运行代码时不显示打印?   使用Java在Solr中进行编程完全导入   java如何跟踪鼠标退出/进入/悬停在组合上?   java Android:如何防止开发者选项在下次启动时重置?   java是否可以在不生成查询类型的情况下使用Querydsl?   我想用正则表达式在java中拆分字符串   spring是否可以从数据库获取JavaFMT消息包?