mysql - 跟踪用户事件日志 - SQL 与 NoSQL?

标签 mysql mongodb database-design relational-database nosql

我有一个 mysql 数据库,其中包含 用户、播放列表、视频、标签等表。

基于此,我想收集应用程序上的用户事件。示例用例可能是:

a.) (user) joined (app) on (date)  
b.) (user) created playlist (playlist) on (date)  
c.) (user) added (video(s)) to playlist (playlist)  
d.) (user) added tags (tag(s)) to video in playlist (playlist)  

鉴于这样的数据,设计用户事件架构的更好选择是什么? relational(我正在使用 MySQL)或 NoSQL(非关系,如 MongoDB)

偏爱 NoSQL
a.) 另一件事是由于事件量很大,检索数据应该很快,我读过面向文档的数据库在这种情况下表现良好,因为不需要表之间的连接
b.) 由于事件日志可能不包含任何、一个、多个变量,具体取决于发生的事件,关系模式可能不是一个好的解决方案。

想了解更多,请分享知识:)
谢谢

最佳答案

你是对的,任何关系数据库的主要问题都是连接。

因此,您可以在 mongodb 或 mysql 中创建跟踪系统,只需避免加入:

所以结构会是这样的:

id 
activity_type - int
user_id
date
field1
field2
filed3

其中 activity_type (Signup = 1, CreatedPlaylist =2, ...)

为避免与用户表连接,您应该在每个事件行中添加一些与用户相关的数据(您需要显示的数据,例如名字、姓氏)。

使用上面提供的解决方案,您可以继续使用 mysql,并且速度将相同。当您在文档中嵌入许多需要加入关系数据库的东西时,Mongodb 会更快。

关于mysql - 跟踪用户事件日志 - SQL 与 NoSQL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6091301/

相关文章:

mongodb - 在不解码的情况下在 upsert 中使用 mgo 聚合迭代器数据

php - 为 'item' 表创建一个(复合)主键,其中增量 'item_id' 根据 'order_id' 外键重置

database - 使数据库ID一致和 "readable"的利弊

sql - PostgreSQL 索引使用分析

php - 删除记录后的Mysql递减其他ID

mysql - MySQL 中是否可以有条件地计数和添加行标签?

mysql - 安装mysql2(0.3.21)时出错,Bundler无法继续

mysql - Golang 连接到 docker 连接到我的 sql docker getsockopt : connection refused

javascript - 检测 Mongoose 事件的语法是什么?

linux - chown 在 Ubuntu 中挂载的 NTFS 分区中