1.背景
最近在公司server上手动搭建了一次mongodb,存储当前业务中的广告打点(埋点)数据,记录了各种类型用户行为信息,将原来以截图、Charles导出文件、Postman导出文件形式的请求数据,统一存储到mongodb上,可直观查看,可高效管理,可追溯历史。
2.打点数据
- 打点本质:记录用户行为一份数据
- 打点实现:绑定用户行为,记录行为信息,发出请求,产生数据
手头业务中存在着各种类型的打点,覆盖了多个维度的信息
- 用户行为(展现 点击 下载 播放 调起等等)
- 广告位(列表页 详情页 小视频等等)
- 广告物料(视频、图文、下载等等)
示例请求
包含打点时间 行为信息 广告信息 流量信息 设备信息等等
{
"os_type": "2",
"os_version": "10",
"app_version": "7.12.0.0",
"model": "JAD-AL50",
"device_id": "C44E532CC9F862E915D129D3CC00022D|VQFTLF3LH",
"net_type": 1,
"ad": {
"origin_time": "1659714002785",
"behavior_type": "用户行为类型",
"behavior_page": "行为发生页面",
"behavior_ext1": "行为扩展1",
"behavior_ext2": "行为扩展2",
"ext": "广告加密信息"
},
"date": "2022-08-05 15:40:03"
}
示例日志
将json层级结构打平(字段众多),便于存储hive数仓(大宽表形式)
os_type,os_version,app_version,model,device_id,net_type,origin_time,behavior_type,behavior_page,behavior_ext1,behavior_ext2,date
3.数据库选型
考虑到广告打点日志持续迭代(字段逐渐增多),数据结构灵活(字段层级可能扩展),mysql二维表管理的数据不能很好的满足诉求,决定使用mongodb mysql对比mongodb 简析两类数据库的优缺点
| 类型 | 优点 | 缺点 |
|---|---|---|
| mysql | 管理字段固定的二维关系比较方便 | 不适合存储和查询层级式数据(存储需要打平到二维,查询json形式效率低) |
| mongodb | 文档形式的数据结构,存储和查询比较方便 | 暂时不支持事务 |
4.安装
笔者使用mac环境举例,采用brew进行安装,其他环境参考 www.mongodb.com/docs/manual…
方法1: brew安装(不支持macOS高版本, mac用户请绕行)
- xcode-select --install (brew环境准备)
- brew brew tap mongodb/brew (用于mongodb安装的定制化brew)
- brew update (更新brew相关包)
- brew install mongodb-community@6.0 (安装社区版mongodb@6)
方法2: 官网压缩包安装
- 下载对应的操作系统的tar包 tar包地址
- 解压文件
tar -zxvf mongodb-macos-x86_64-6.0.tgz
- mongodb bin添加到环境变量中
sudo cp /Users/bobo/Downloads/mongodb-macos-x86_64-6.0.0/bin/* /usr/local/bin/
5.启动
启动前准备
启动mongodb之前需要创建日志目录、数据目录
也可以将日志和数据存储到/usr/local下面,我为了便于管理采用了config设置目录地址,集中到特点目录统一管理
➜ .mongodb pwd
/Users/bobo/.mongodb
➜ .mongodb ll
total 16
drwxr-xr-x 20 bobo staff 640 8 6 18:48 data/
drwxr-xr-x 3 bobo staff 96 8 6 18:47 log/
-rw-rw-r-- 1 bobo staff 418 8 6 18:48 mongod.conf
-rw-rw-r-- 1 bobo staff 153 5 29 11:16 reload.sh
# cat mongod.conf
port=8513 # mongodb占用的端口
fork=true # 以创建子进程的方式运行
dbpath=/Users/bobo/.mongodb/data #日志输出方式数据库路径
logappend=true #日志输出方式,日志append而不是overwrite
logpath=/Users/bobo/.mongodb/log/mongo.log #日志路径
auth=true
启动服务
## 直接启动(采用service服务启动 待补充)
mongod --config mongod.conf
mongodb gui软件 connect mongodb://localhost:8513
mongod服务已经启动成功,log日志显示正常
那么mongodb服务就正常启动了
6.参考资料
- mysql vs mongodb 优缺点 cloud.tencent.com/developer/a…
- 官方安装文档 www.mongodb.com/docs/manual…
- mac homwbrew切换国内源 cloud.tencent.com/developer/a…