2014-03-03 56 views
7

我有一组分层数据存储的,层次结构就像是网站/建筑/地板,数据,例如如何使用redis来存储分层数据?

{ 
    site:'New York', 
    buildings: [ 
       { 
       name:'building a', 
       floors: [ 
         'Ground':[{room:room1},{room:room2}], 
         'First':[{room:room1},{room:room2}] 
         ] 
       } 
      ] 
}, 
{ 
    site:'London', 
    buildings: [ 
       { 
       name:'building a', 
       floors: [ 
         'Ground':[{room:room1},{room:room2}], 
         'First':[{room:room1},{room:room2}] 
         ] 
       } 
      ] 
} 

我想将这些房间的数据存储为一组,但我还可以查询通过选择网站名称或(网站名称+建筑物名称)或(网站名称+建筑物名称+楼层)的房间子集

回答

6

在Redis中,您不会将数据存储在唯一的数据结构中。您必须创建多个数据结构,每个数据结构都由一个密钥标识。

使用约定来命名您的键:例如site:<CITY>:buildings将是一个包含给定网站的建筑物ID列表的集合。

然后定义散列来存储每个建筑物的描述。这些哈希的关键可能是这样的:building:<ID>

在哈希中你有2个成员:名称和地板。楼层值是包含楼层标识符列表的集合的唯一ID。

然后为每个楼层创建一个最后一组,以存储房间名称。组的名称可能类似于:floor:<ID>

提示:

  • 使用Redis的INCR命令生成唯一的ID。
  • 如果您打算存储非常多的密钥,请避免使用过长的密钥(较长的密钥需要更多的内存)