我在想用redis(http://code.google.com/p/redis/) 存储这种ruby数据结构。
假设:
node1server1 = { "volume1" => 10400, "volume2" => 11221, "volume3" => 13212, "volume4" => 17227 }
node1server2 = { "volume1" => 17450, "volume2" => 14241, "volume3" => 15512, "volume4" => 12427 }
node2server1 = { "volume1" => 17655, "volume2" => 16754, "volume3" => 19877, "volume4" => 10000 }
node2server2 = { "volume1" => 11456, "volume2" => 13776, "volume3" => 18766, "volume4" => 16555 }
使用哪种redis数据类型更好?
需要更新数据,我需要对node1server1 + node1server2和node2server1 + node2server2的值进行排序。
答案 0 :(得分:1)
我发现自你发布以来已经有一段时间了,但是你能提供一些关于如何对数据进行排序的更多信息吗?
另外,我假设每个服务器可能有一个可变数量的卷,每个节点可能有多个服务器
一种方法如下:
node_id:1:server_id:1:volume_id:1 = 10400
node_id:1:server_id:1:volume_id:2 = 11221
node_id:1:server_id:1:volume_id:3 = 13212
node_id:1:server_id:1:volume_id:4 = 17227
node_id:1:server_id:2:volume_id:1 = 17450
node_id:1:server_id:2:volume_id:1 = 14241
...
node_id:1:volumes = SET("server_id:1:volume_id:1", "server_id:1:volume_id:2", "server_id:1:volume_id:3", "server_id:1:volume_id:4", "server_id:2:volume_id:1", "server_id:2:volume_id:2", "server_id:2:volume_id:3", "server_id:2:volume_id:4")
因此,要获取node1的所有卷编号的排序列表:
SORT node_id:1:volumes BY node_id:1:*
...按照分配给每个节点的值和node_id的排序版本进行排序:1:卷。
或者,您可以使用Redis 1.1中新增的ZSET
另请注意,我在这里使用了SET,而不是LIST。我发现LIST对于根据队列和堆栈描述的结构更有用,并且SET对于唯一项目列表更好。
<强>参考文献:强>