我正在使用两个基本实体开发推荐系统:用户和对象。用户相似度指标将根据现有用户数据预先计算。然后,随着各种用户“标记”对象,对象将被推荐给每个用户(基于相似用户标记的内容)。
我是 NoSQL 新手,不确定建模 a) 用户标志事件和 b) 用户特定建议的最佳方法。两个选项对我来说似乎很明显:
1)“重量级”选项:将所有相关数据存储在主要对象中。例如:
UserA
FlaggedItems
FlaggedItemA
FlaggedItemB
FlaggedItemC
RecommendedItems
RecommendedItemA
RecommendedItemB
RecommendedItemC
或者:
ItemA
FlaggedBy
UserA
UserC
UserR
RecommendedTo
UserB
UserD
UserX
2)“轻量级”选项:将“标志”和“推荐”数据存储在粒度对象中。例如:
FlagEvent
FlaggedBy
UserA
FlaggedItem
ItemA
DateTime
RecommendationEvent
RecommendationTo
UserC
RecommendedItem
ItemB
DateTime
我的假设是轻量级方法将更具可扩展性,因为不会不断修改用户/项目对象,客户端同步将涉及获取用户特定的标志事件和推荐事件,并且不会有多个用户尝试修改相同的同时对象。但我是 CouchDB/noSQL 的新手,欢迎更有经验的用户提出想法。你有什么建议?