【发布时间】:2013-12-09 08:24:42
【问题描述】:
在过去的几天里,我一直在为自己(和其他一些人)开发一个非常简单的 Web 服务,它可以让我跟踪我阅读过的书籍以及阅读它们的时间。虽然存储用户和书籍(标题 + 作者 + 未来可能会有更多数据)相对简单,因为它们可以存储为带有键 user:username 和 book:uniqueID 的哈希值,分别存储哪些用户阅读了哪些书籍以及何时被证明是有点挑战。
我最初的计划是为用户 (user:username:readbooks) 设置一个排序集,该用户使用时间戳作为分数(用于用户阅读图书的时间)并将每本书的唯一 ID 作为值。这种方法的问题是我不能存储用户已经读过一本书两次(因为你不能在一组中有重复的值)。这也意味着为了跟踪一本书的读者,我必须将它们添加到第二组readersof:bookID。
我目前的方法不是直接将书籍 ID 存储在集合 user:username:readbooks 中,而是以 uniqueReadingEventId.bookId 的形式存储一个值,但是这样做的问题是,如果我删除一本书(而不是唯一的阅读事件)我必须遍历集合readersof:bookID 中的每个用户,遍历user:username:readbooks 中的每个值并删除与x.bookId 匹配的值,这似乎有点低效。此外,我可能希望找到同时阅读过两本书或更多书的用户。
因此,我的问题有两个方面:是否有一种更简单的方法可以在 Redis 中构建我的数据,或者我的数据是否可以更好地构建到不同的 NoSQL 系统?我真的很想继续使用 Redis,因为我喜欢它的 API,但是因为它是一个个人项目,所以我使用什么并不重要。
【问题讨论】: