【问题标题】:Tracking User activity log - SQL vs NoSQL?跟踪用户活动日志 - SQL 与 NoSQL?
【发布时间】:2011-05-22 22:40:16
【问题描述】:

我有一个 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(I am using MySQL) or NoSQL(non-relational, like MongoDB)

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

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

【问题讨论】:

    标签: mysql mongodb database-design relational-database nosql


    【解决方案1】:

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

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

    所以结构会是这样的:

    id 
    activity_type - int
    user_id
    date
    field1
    field2
    filed3
    

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

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

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

    【讨论】:

    • 我喜欢 Andrew 的方法,将尝试在我的应用程序中利用这种方法
    • 嘿 Andrew,我已经准备好了设计,但是我发现在 Play Framework 中使用 mongo 插件很困难,如果您对我所做的工作感兴趣,请告诉我您的电子邮件,我会把我的想法发给你,那太好了,因为我会有一双眼睛来净化我的想法:)
    【解决方案2】:

    作为一名长期的关系用户,在我看来,决定取决于您是否有金融交易或实物商品的跟踪。 “金钱和东西”是 Relational 的发明目的。它非常擅长并保持非常高的正确性标准。

    但是,如果您不必平衡账目,或者确保您不会意外卖出比您拥有的更多的小部件,那么请使用您觉得合适的东西。 Mongo、Couch 等等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-02
      • 2017-06-27
      • 1970-01-01
      相关资源
      最近更新 更多