【问题标题】:Hybrid Database: Is it okay to store MongoDB ids in MySQL?混合数据库:可以将 MongoDB id 存储在 MySQL 中吗?
【发布时间】:2020-02-26 09:33:52
【问题描述】:

我正在使用混合数据库为 电影推荐系统 设计数据库架构。为此,我使用流行的 MySQL 和 MongoDB。

应用有两种数据,一种是用户动作数据,另一种是非结构化电影数据。

# MySQL Tables
1. User
2. User_Movie_Like
3. User_Movie_Watchlist
4. User_Movie_Recommendation

# MongoDB Collections
1. Movie

为了实现电影的轻松查找,我在 MySQL 中创建了一个包含 MongoDB 的 ObjectId 的字典表。在这个字典表中,我存储了 mongo 文档的 objectId 和电影名称。

# MySQL Tables
5.Movie_Master
| id - Primary Key
| objectId - MongoDB's reference
| name - duplicate from movie collection

这是推荐的方法吗?

【问题讨论】:

    标签: mysql mongodb database-design


    【解决方案1】:

    我不确定“推荐” - 但值得概述优点和缺点。

    您的解决方案的好处是,它允许您在数据库中对大部分域进行建模,并应用参照完整性 - 表 user_movie_like 可以具有表 movie 的外键,并且您可以避免像“我们删除了一部电影,但忘记删除所有喜欢的内容”。我想对于某些动作,在 MySQL 中缓存电影名称将避免去 MongoDB 检索名称,从而加快您的应用程序。

    通过将 MongoDB 用于非结构化数据,您可以处理事先不知道架构的问题。

    缺点是您为应用程序使用两个单独的数据存储 - 例如,您可以将非结构化电影数据存储在 MySQL 中的 JSON 对象中,并避免两组查询。

    另一个缺点是通过在 MySQL 中缓存电影名称,您会引入错误的机会 - 如果您在 MongoDB 中更新电影名称,而不是在 MySQL 中,您的应用程序可能会出现异常。

    另一个缺点是没有内置机制来保证两个数据存储之间的引用完整性 - 您可以在 MongoDB 中删除电影,但不能在 MySQL 中删除。

    【讨论】:

      猜你喜欢
      • 2015-05-17
      • 1970-01-01
      • 2020-10-25
      • 1970-01-01
      • 1970-01-01
      • 2011-08-14
      • 2013-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多