混合数据库:可以在MySQL中存储MongoDB ID吗



我正在使用混合数据库为电影推荐系统设计一个数据库模式。为此,我使用了流行的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

这是推荐的方法吗?

我不确定"推荐"是什么,但值得概述一下优点和缺点。

您的解决方案的好处是,它允许您对数据库中的大部分域进行建模,并应用引用完整性-表user_movie_like可以对表movie具有外键,并且您可以避免诸如"我们删除了一部电影,但忘记删除所有赞"之类的错误。我可以想象,对于某些操作,在MySQL中缓存电影名称将避免去MongoDB检索名称,从而加快应用程序的速度。

通过将MongoDB用于非结构化数据,您可以处理事先不知道模式的情况。

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

另一个缺点是,通过在MySQL中缓存电影名称,会引入错误的机会——如果你在MongoDB中更新电影名称,而不是在MySQL中更新,你的应用程序可能会表现得很奇怪。

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

最新更新