使用redis位图实现功能强大的分析库。
bitmapist的Python项目详细描述
位图列表
使用redis位图实现功能强大的分析库。
此库使实现实时、高度可扩展的分析成为可能,这些分析可以回答以下问题:
- 用户123今天在线了吗?这个星期?这个月?
- 用户123是否执行了动作“x”?
- 这个月活跃了多少用户?这个小时?
- 本周有多少个独特的用户执行了动作“x”?
- 上周活跃的用户中有多少%仍然活跃?
- 上个月活跃的用户中有多少%在本月仍然活跃?
此库非常易于使用,并使您能够轻松创建自己的报表。
使用redis位图,您可以在非常小的内存(兆字节)中存储数百万用户的事件。 您应该小心使用巨大的id(例如2^32或更大),因为这可能需要更大的内存。
现在是队列图表!请在此处阅读更多信息:
- 发布bitmapist.coquent-或者我们如何每月节省2000美元:http://amix.dk/blog/post/19718
如果您想了解有关位图的更多信息,请阅读以下内容:
- http://blog.getspool.com/2011/11/29/fast-easy-realtime-metrics-using-redis-bitmaps/
- http://redis.io/commands/setbit
- http://en.wikipedia.org/wiki/Bit_array
- http://www.slideshare.net/crashlytics/crashlytics-on-redis-analytics
- http://amix.dk/blog/post/19714[我的博客文章]
需要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