交互式分析仪表板有多种用途。它们使您可以共享数据,并为您提供所有重要信息,以便更快地做出改变游戏规则的决策。使用传统的关联式数据库构建实时动态仪表板可能需要复杂的查询集。通过使用像 Redis 这样的 NoSQL 数据库,您可以使用少量 Redis 命令构建强大的交互式动态仪表板。
让我们看看这是如何实现的。
git clone https://github.com/redis-developer/basic-analytics-dashboard-redis-bitmaps-nodejs
首先我们将设置环境变量
进入 /server 文件夹 (cd ./server) 并执行以下命令 cp .env.example .env
PORT=3000
# Host and a port. Can be with `redis://` or without.
# Host and a port encoded in redis uri take precedence over other environment variable.
# preferable
REDIS_ENDPOINT_URI=redis://redis-XXXX.c212.ap-south-1-1.ec2.cloud.redislabs.com:15564
# Or you can set it here (ie. for docker development)
REDIS_HOST=redis-XXXX.c212.ap-south-1-1.ec2.cloud.redislabs.com
REDIS_PORT=XXXX
# You can set password here
REDIS_PASSWORD=reXXX
COMPOSE_PROJECT_NAME=redis-analytics-bitmaps
npm install
npm run dev
cp .env.example .env
VUE_APP_API_URL=http://localhost:3000
npm install
npm run serve
事件数据存储在各种键和数据类型中,详情如下所述
它生成具有以下命名约定的键
rab:{type}[:custom:{customName}][:user:{userId}][:source:{source}][:action:{action}][:page:{page}]:timeSpan:{timeSpan}
其中 [] 中的值是可选的。
对于每个生成的键,如 rab:count:*
,数据存储方式如下: INCR {key}
INCR rab:count:action:addToCart:timeSpan:2015-12/3
rab:set:*
,数据存储方式如下: SADD {key} {userId}
SADD rab:set:action:addToCart:timeSpan:2015-12/3 8
rab:bitmap:*
,数据存储方式如下: SETBIT {key} {userId} 1
SETBIT rab:bitmap:action:addToCart:timeSpan:2015-12/3 8 1
SETBIT rab:bitmap:custom:cohort-buy:timeSpan:{timeSpan} {userId} 1
SETBIT rab:bitmap:custom:cohort-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 日购买了 1 个产品,之前于 2015 年 12 月 13 日购买了 1 个产品。他的留存将被存储(特定日期购买产品数:0,任何时间购买产品数:1),例如
SADD rab:set:custom:retention-buy:timeSpan:2015-12
BITCOUNT rab:bitmap:custom:global:timeSpan:2015-12```
BITCOUNT rab:bitmap:custom:global:timeSpan:2015-12/{X}
BITCOUNT rab:bitmap:custom:global:timeSpan:2015-12/3
BITCOUNT rab:bitmap:action:visit:page:{page}:timeSpan:2015-12
BITCOUNT rab:bitmap:action:visit:page:homepage:timeSpan:2015-12
BITCOUNT rab:bitmap:action:visit:page:{page}:timeSpan:2015-12/{X}
BITCOUNT rab:bitmap:action:visit:page:product1:timeSpan:2015-12/2
BITCOUNT rab:bitmap:source:{source}:timeSpan:2015-12
BITCOUNT rab:bitmap:source:referral:timeSpan:2015-12
BITCOUNT rab:bitmap:source:{source}:timeSpan:2015-12/{X}
BITCOUNT rab:bitmap:source:google:timeSpan:2015-12/1
BITCOUNT rab:bitmap:action:visit:{page}:timeSpan:2015-12-01
BITCOUNT rab:bitmap:action:visit:{page}:timeSpan:2015-12-31
BITCOUNT rab:bitmap:action:visit:homepage:timeSpan:2015-12-29 => BITCOUNT rab:bitmap:action:visit:homepage:timeSpan:2015-12-30 => BITCOUNT rab:bitmap:action:visit:homepage:timeSpan:2015-12-31
GET rab:count:action:buy:timeSpan:2015-12
GET rab:count:action:buy:timeSpan:2015-12/{X}
GET rab:count:action:buy:timeSpan:2015-12/1