我有一个用户模型,其特征如下: -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