Database-Design

關於 NoSQL DB 的架構設計。(如何查詢多個數據?)

  • February 16, 2015

我只是有一個要求,只用 Redis 建構一個網路。

網路數據是這樣的(我寫為 RDBMS): 使用者資訊:user_id,first_name,last_name,age,….. 地址:address_id,city,state,country,….

如果只寫一個使用者或用“user_id”獲取一個使用者,完全沒有問題。

但是,如果想讓所有使用者都小於 20 歲,或者所有使用者都住在紐約,我該怎麼辦?

我可以將所有 user_id 保存在“New York”鍵下,但這很醜不是嗎。如果要添加新條件,則需要掃描所有數據以建立索引。

如果條件變成,住在“紐約”並且年齡小於 20 歲,嗯….

有沒有什麼神奇的方法可以用 Redis 做到這一點?

我可以將所有 user_id 保存在“New York”鍵下,但這很醜不是嗎。

不,它並不難看,而且任何 RDBMS 在維護索引時都會這樣做。Redis 的不同之處在於它不會為您執行此操作,因此您必須在程式碼中進行這些密鑰的管理。

但是,如果想讓所有使用者都小於 20 歲,或者所有使用者都住在紐約,我該怎麼辦?

考慮使用 Redis 的 Sets 和 Sorted Sets 來儲存這些屬性。Redis 提供了幾個集合操作(​​聯合、相交…),可以更輕鬆地建構這些條件。

有沒有什麼神奇的方法可以用 Redis 做到這一點?

差不多就是這樣。它總是關於權衡 - 選擇一個成熟的 RDBMS 以獲得舒適性,你會為性能付出代價,而使用 Redis 則相反 :) 就是說,一旦你“壓制”你目前的一些 - 它並沒有那麼糟糕占主導地位的關係數據庫本能。

另一種可能符合您要求的可行方法是使用對象映射器來抽像一些底層 Redis 細節。根據您選擇的程式語言,有很多可以為您完成大量工作(當然以犧牲一點性能為代價;))。

引用自:https://dba.stackexchange.com/questions/92054