问题描述
我正在学习为服务Next.js客户端和React Native应用程序的API(Koa.js)实现一些统计信息。我应该如何在数据库(Postgresql)中存储user-agent
数据?
我应该将其存储在user-agent
表中的users
的一列中吗?
// users
id | name | user_agent
---|---------|-----------
1 | someone | Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/84.0.4147.105 Safari/537.36
我看到一个帖子说应该使用单独的列以获得更多详细信息。我相信应该是这样的:
// user_agents
id | browser | engine | os | device | cpu
---|-----------|----------|--------------|-----------|------
1 | Chrome/84 | Blink/84 | Linux/x86_64 | undefined | amd64
就我而言,我正在使用ua-parser.js
,其输出为:
@ua-parser> {
ua: 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/84.0.4147.105 Safari/537.36',browser: { name: 'Chrome',version: '84.0.4147.105',major: '84' },engine: { name: 'Blink',version: '84.0.4147.105' },os: { name: 'Linux',version: 'x86_64' },device: { vendor: undefined,model: undefined,type: undefined },cpu: { architecture: 'amd64' }
}
如果我使用ua_browsers
,ua_os
,ua_devices
等单独的表,而user_id
引用了id
表的users
,该怎么办?
// users
id | name
---|--------
1 | someone
// ua_browsers
id | user_id | name | version | major
---|---------|--------|---------------|------
1 | 1 | Chrome | 84.0.4147.105 | 84
// ua_engine
id | user_id | name | version
---|---------|-------|--------------
1 | 1 | Blink | 84.0.4147.105
// ua_os
id | user_id | name | version
---|---------|-------|--------
1 | 1 | Linux | x86_64
- 会不必要地变得复杂和多余吗?
- 如果用户积极使用两种设备(网络设备和移动设备)怎么办,我应该同时存储
user-agent
数据吗?还是每次都用最新数据替换最新数据?
我应该如何在数据库中存储user-agent
数据以进行正确的数据分析?
堆栈
我正在使用TypeScript,Koa.js,Postgresql,Redis,Next.js,React Native,Nginx,Docker
P.S。无论如何,我都使用Nginx反向代理。
编辑
来自评论:
为什么/将UA与“用户”关联1-1?
因为我正在研究并且看到了以下内容:https://docs.magento.com/mbi/data-analyst/analysis/track-usr-dev-browser.html
您应何时记录此数据?
Magento建议您添加一个名为“平台”的新字段,或者 “用户代理”到“客户”和“订单”数据库表中进行存储 无论何时创建用户或下订单,此信息。如果 您正在使用sql数据库,则此字段应为VARCHAR(255)。 请注意,User-Agent字符串的长度可以比 这个,但是实际上它很少超过这个长度。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)