我有一個用戶模型,其特徵如下: -Cassandra-數據建模UserProfilie
class User(Model):
user_id = columns.Integer(primary_key=True)
username = columns.Text()
email = columns.Text()
fname = columns.Text()
lname = columns.Text()
age = columns.Text()
state = columns.Text()
city = columns.Text()
country = columns.Text()
gender = columns.Text()
phone = columns.Text()
school_name = columns.Text()
created_at = columns.Text()
race = columns.boolean()
這是我的正常RDBMS模型。我的查詢如下: -
1) Get all users with city = 'something'
2) Get a user with email = 'something'
3) Get a user with username = 'something'
4) Get all users with phones IN ('something')
5) Get all users with state = 'something'
6) Get all users with age > something
7) Get all users with gender = 'something'
8) Get all users with race = 'something'
9) Get count(*),school_name users Group By schoolname
10) Get all users with created_date > 'something' LIMIT 1000
11) Get all users with username IN ('something') AND age IN ('something') AND phone IN ('something') AND state IN ('something') AND so on LIMIT 1000
我可以得到上述結果與數據庫管理系統的一個簡單的選擇查詢的查詢,但問題在於卡桑德拉。
因爲爲了在Cassandra中獲得上述查詢的結果,建議每個查詢都有一個不同的模型,這將加快讀取能力。在這個時代,磁盤比以前更便宜。這就是說,我明白,只是拋出更多磁盤來解決問題並不總是容易的。我看到的更大的問題是調整應用程序的DAO層以保持10個不同的表同步。 (另外,我的內心本能並不認爲有10個模型適用於不同的查詢:P)
可以請某人解釋我在卡桑德拉的合適模型以獲得這些查詢的結果嗎?
PS:對上述模型的操作可以是Read/Write/Update/Delete。 查詢11是最重要的查詢。
考慮到有關特定用戶的信息可以更新,最重要的是使這些查詢在大量數據上真正快速。
感謝@Carlo提供一種可能的方法對上述問題的深度解讀。最後一個問題。如果將來,我決定寫一個涉及'過濾用戶狀態'的查詢,那麼我需要創建另一個列家族? **如我錯了請糾正我**。因此,爲了創建另一個列族,我需要將其他CF中的數據遷移(複製)到最新的bulit CF中。不是嗎? – PythonEnthusiast 2015-04-07 09:56:39
是的,您是對的:如果您需要使用新查詢獲得過去數據的信息,那麼您已經將這些數據遷移到新表中 – 2015-04-07 10:14:48
但是之後它再次成爲手動操作,將數億行數據從CF複製到另一個。由於我無法在一開始就凍結我的所有要求,因此您對此有何看法? – PythonEnthusiast 2015-04-07 10:21:59