2011-01-05 60 views
2

我一直在尝试使用Redis,并且我非常喜欢它为表格带来的可扩展性。但是,我想知道如何处理已经生产的系统的数据结构的变化。Redis - 处理数据结构的变化

例如,让我说我收集有关用户的信息,并将user_id用作关键字,并将有关用户的其他数据作为逗号分隔值进行转储。

user_id: name, email, etc. 

现在,假设经过约100,000条记录,我意识到我需要通过email查询 - 我怎么会现在就现有数据的快照,并为它创建一个新的指数?

回答

0

从我对Redis的理解来看,这需要Redis没有设计的东西。您将不得不循环所有记录(使用键*),然后更改数据的顺序并制作新的键。我个人建议使用列表而不是逗号分隔的字符串。在列表中,您可以从redis中对其进行重新排序。一个Redis的列表如下所示:

"Colum" => [0] [email protected] 
      [1] password 
      [2] Something 

我建立在我遇到同样的问题的应用程序。我通过为所有用户的信息列出来解决它,然后用用户的电子邮件和用户的ID的值的密钥。所以我的数据库是这样的:

"Colum" => [0] [email protected] 
      [1] password 
      [2] Something 
"[email protected]" => "Colum" 

所以我可以查询身份证或电子邮件,仍然可以得到我需要的信息。

对不起,我无法直接回答你的问题。只是希望这有助于。

+0

是的,谢谢,使用列表似乎是这里的黄金法则。任何形式的CSV都会使未来的变化变得非常困难。 – jeffreyveon 2011-01-07 17:25:16

+0

很高兴我能帮到你。当我在Redis出发时,我发现这很困难 – Colum 2011-01-07 17:28:56

1

如果您想支持更改,使用csv并不是一个好主意。如果所有内容都在一个密钥中,则需要使用处理丢失/新值的序列化程序,或者可以使用redis散列,这会为您提供指定的子密钥。无论使用哪种方式,您都可以添加/删除字段,唯一的要求是您的代码在读取没有新值的记录时知道该怎么做。

要允许通过电子邮件查找,您需要添加一个索引 - 基本上是每个电子邮件的密钥(或列表),其中用户标识为值。您需要填写所有密钥一次,然后确保在电子邮件更改时更新该索引。

您可以遍历所有密钥并用不同的ID存储它们,但这可能比它的价值更麻烦。