1

我正在考虑使用 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 的值进行排序。

4

1 回答 1

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:volumes 的排序版本进行排序。

或者,您可以使用 Redis 1.1 中新增的 ZSET

另请注意,我在这里使用了 SET,而不是 LIST。我发现 LIST 对于用队列和堆栈描述的结构更有用,而 SET 更适合用于唯一项目的列表。

参考:

于 2009-12-14T14:58:02.523 回答