我一直在嘗試使用Redis,並且我非常喜歡它爲表格帶來的可擴展性。但是,我想知道如何處理已經生產的系統的數據結構的變化。Redis - 處理數據結構的變化
例如,讓我說我收集有關用戶的信息,並將user_id用作關鍵字,並將有關用戶的其他數據作爲逗號分隔值進行轉儲。
user_id: name, email, etc.
現在,假設經過約100,000條記錄,我意識到我需要通過email
查詢 - 我怎麼會現在就現有數據的快照,併爲它創建一個新的指數?
我一直在嘗試使用Redis,並且我非常喜歡它爲表格帶來的可擴展性。但是,我想知道如何處理已經生產的系統的數據結構的變化。Redis - 處理數據結構的變化
例如,讓我說我收集有關用戶的信息,並將user_id用作關鍵字,並將有關用戶的其他數據作爲逗號分隔值進行轉儲。
user_id: name, email, etc.
現在,假設經過約100,000條記錄,我意識到我需要通過email
查詢 - 我怎麼會現在就現有數據的快照,併爲它創建一個新的指數?
從我對Redis的理解來看,這需要Redis沒有設計的東西。您將不得不循環所有記錄(使用鍵*),然後更改數據的順序並製作新的鍵。我個人建議使用列表而不是逗號分隔的字符串。在列表中,您可以從redis中對其進行重新排序。一個Redis的列表如下所示:
"Colum" => [0] [email protected]
[1] password
[2] Something
我建立在我遇到同樣的問題的應用程序。我通過爲所有用戶的信息列出來解決它,然後用用戶的電子郵件和用戶的ID的值的密鑰。所以我的數據庫是這樣的:
"Colum" => [0] [email protected]
[1] password
[2] Something
"[email protected]" => "Colum"
所以我可以查詢身份證或電子郵件,仍然可以得到我需要的信息。
對不起,我無法直接回答你的問題。只是希望這有助於。
如果您想支持更改,使用csv並不是一個好主意。如果所有內容都在一個密鑰中,則需要使用處理丟失/新值的序列化程序,或者可以使用redis散列,這會爲您提供指定的子密鑰。無論使用哪種方式,您都可以添加/刪除字段,唯一的要求是您的代碼在讀取沒有新值的記錄時知道該怎麼做。
要允許通過電子郵件查找,您需要添加一個索引 - 基本上是每個電子郵件的密鑰(或列表),其中用戶標識爲值。您需要填寫所有密鑰一次,然後確保在電子郵件更改時更新該索引。
您可以遍歷所有密鑰並用不同的ID存儲它們,但這可能比它的價值更麻煩。
是的,謝謝,使用列表似乎是這裏的黃金法則。任何形式的CSV都會使未來的變化變得非常困難。 – jeffreyveon 2011-01-07 17:25:16
很高興我能幫到你。當我在Redis出發時,我發現這很困難 – Colum 2011-01-07 17:28:56