2012-10-05 58 views
20

我试图实现的是一个id表。基本上它具有结构(user_id,lecturer_id)user_id引用我的用户表中的主键,lecturer_id引用我的Lecturer表的主键。按值查找键

我试图在redis中实现这个功能,但是如果我将键设置为用户的主ID,当我尝试运行一个查询如时,由于讲师不是关键所以获取所有记录与讲师ID = 5,但我将无法在O(1)时间达到它。

如何构建像上面提到的id表或Redis不支持的结构?

+0

在Redis的文件最近添加的页面的下提供有关[与Redis的副索引(http://redis.io/topics/indexes)的详细信息,并且覆盖此情况下[简单的数值索引与有序集合]( http://redis.io/topics/indexes#simple-numerical-indexes-with-sorted-sets)部分。 –

回答

28

你们中的一个快速学习与Redis的工作时的事情是,你能设计出在你的访问需求,你的数据结构,特别是当它涉及到的关系(这不是一个关系数据库毕竟)

有没有办法像你已经注意到的那样用O(1)的时间复杂度来搜索“值”,但是有办法来处理你使用redis描述的内容。以下是我推荐的内容:

  • 按照用户标识(例如,在散列表中)存储用户数据。
  • 为每个讲师ID添加一个附加的集合,其中包含与所讨论的讲师ID相对应的所有用户ID。

这似乎是复制关系的数据,因为您的用户数据必须存储在演讲ID,你的演讲数据将存储的用户ID,但是这是(微小)的代价,如果一个人在像redis这样的非关系数据存储中建立关系。从实际角度来看,这很有效。内存很少成为小数据集的瓶颈(想想成千上万个ID)。

为了获得更好的画面如何使用Redis的模型与应用的关系人,我建议你阅读Design and implementation of a simple Twitter cloneLamernews的源代码,这两者都是由Redis的作者Salvatore Sanfilippo写。