如何在数据库中存储用户代理?

问题描述

我正在学习为服务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_browsersua_osua_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 (将#修改为@)