使用Redis构建分析仪表板应用程序
交互式分析仪表板有多种用途。它们允许您共享数据,并为您提供所有这些重要信息,以更快的速度做出改变游戏规则的决策。使用传统关系数据库构建实时动态仪表板可能需要一组复杂的查询。通过使用像Redis这样的NoSQL数据库,您可以使用少量Redis命令构建一个强大的交互式动态仪表板。
本教程展示了一个基本的分析仪表盘应用程序,使用NodeJS (JavaScript)编写的Redis位图。
#
步骤1。准备环境- 安装节点-v12.19.0
- 安装NPM-v6.14.8
- 安装Docker-v19.03.13(可选)
#
第二步。克隆存储库#
第三步。设置后端首先,我们将设置环境变量
转到/server文件夹(cd./server),然后执行以下命令:
#
第四步。安装依赖项#
第五步。运行Docker Compose安装Redis#
第六步。运行后端#
第七步。设置前端转到/client文件夹(cd./client),然后:
#
第八步。安装依赖项#
第九步。运行前端#
它是如何工作的?#
数据的存储方式:事件数据存储在各种键和各种数据类型中。
对于每个时间跨度:
- 年份:如2021年
- 月份:如2021-03年(指2021年3月)
- 日期:如2021-03-03(指2021年3月3日)
- 周月:如2021-03/4(指2021年3月的第4周)
- 随时
对于每个作用域:
- 来源
- 行动
- 来源+行动
- 动作+页面
- 用户ID+操作
- 全球的
对于每种数据类型(类型):
- 计数(存储为字符串的整数)
- 位图
- 设置
生成的密钥如下所示:
其中[]中的值是可选的。
对于每个生成的键,如rab:count:*,数据的存储方式如下:INCR{key}示例:
对于每个生成的键,如:rab:set:*,数据的存储方式如下:SADD{key}{userId}示例:
对于每个生成的键,如rab:bitmap:*,数据的存储方式为:SETBIT{key}{userId}1。例子:
#
队列数据我们存储注册后购买了一些产品的用户(操作顺序很重要)。
对于12月份的每个购买操作,我们检查用户之前是否执行了注册操作(注册计数器必须大于零)。
如果是这样,我们将用户位设置为1,比如:SETBIT rab:bitmap:custom:court buy:timeSpan:{timeSpan}{userId}1
例如,用户Id 2在2015年12月17日购买了2种产品。它不会被存储。
例如,用户Id 10于2015年12月17日购买了1种产品,并于2015年12月16日注册。它的存储方式如下:SETBIT rab:bitmap:custom:court buy:timeSpan:2015-12 10 1。
我们假设用户没有注册就不能购买。
#
保留数据- 保留是指在两个不同日期购买的用户
- 对于每个购买操作,我们检查用户是否在任何时候购买了比在特定日期购买的更多的产品(不包括当前购买)。
- 如果是这样,我们将用户id添加到集合中,如:SADD rab:set:custom:retention buy:timeSpan:{timeSpan}{userId}
- 例如,用户Id 5在2015年12月15日购买了3种产品。不会存储他的保留金(在特定日期购买的产品:2,在任何时间购买的产品:0)。
- 例如,用户Id 3在2015年12月15日和2015年12月13日购买了1件产品。将存储他的保留金(在特定日期购买的产品:0,在任何时间购买的产品:1),如:SADD rab:set:custom:retention buy:timeSpan:2015-12 3。
#
如何访问数据:- 总流量:
十二月:比特数rab:位图:自定义:全局:时间跨度:2015-12
12月的第十周:BITCOUNT rab:位图:自定义:全球:时间间隔:2015 - 12 / {X}
例子:
- 每页的流量({Page}是以下各项之一:主页、产品1、产品2、产品3):
例子:
- 12月的第十周:
例子:
- 每个来源的流量({Source}是以下各项之一:谷歌、Facebook、电子邮件、直接、推荐、无):
十二月:
例子:
- 12月的第十周:
比特计数rab:位图:源:{source}:timeSpan:2015-12/{X}
例子:
趋势流量({page}是以下内容之一:主页、产品1、产品2、产品3):
十二月:从
比特计数rab:位图:操作:访问:{page}:timeSpan:2015-12-01
到比特计数rab:位图:操作:访问:{page}:时间跨度:2015-12-31
12月1日的一周:同上,但从2015-12-01到2015-12-07
12月的第2周:同上,但从2015-12-08到2015-12-14
12月3日:同上,但从2015-12-15到2015-12-21
12月4日:同上,但从2015年12月22日至2015年12月28日
12月5日:与上述类似,但从2015年12月29日至2015年12月31日
例子:
总产品买了:
十二月:
获取rab:计数:操作:购买:时间跨度:2015-12
12月的第十周:
获取rab:count:action:buy:timeSpan:2015-12/{X}
例子:添加到购物车的产品总数:
十二月:获取rab:count:action:addToCart:timeSpan:2015-12
12月的第十周:获取rab:count:action:addToCart:timeSpan:2015-12/{X}
例子:
- 购买的产品份额({productPage}位于product1、product2、product3的第页):
十二月:获取rab:count:action:buy:page:{productPage}:timeSpan:2015-12
例子:
12月的第十周:
获取rab:count:action:buy:page:{productPage}:timeSpan:2015-12/{X}
例子:
#
顾客与队列分析- 注册人:BITCOUNT rab:bitmap:action:register:timeSpan:2015-12
- 注册后购买的人员(订单事项):比特数rab:位图:自定义:队列购买:时间跨度:2015-12
- 下降:(登记后购买的人/登记的人)*100[%]
- 仅购买指定产品的客户({productPage}是以下产品之一:product1、product2、product3):
例子:
- 购买产品1和产品2的客户:
- 客户保留(在不同日期购买的客户):SMEMBERS rab:set:custom:Retention buy:timeSpan:anytime