2011-01-05 58 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存儲它們,但這可能比它的價值更麻煩。