我有以下 Cassandra 模型:-
class Automobile(Model):
manufacturer = columns.Text(primary_key=True)
year = columns.Integer(index=True)
model = columns.Text(index=True)
price = columns.Decimal(index=True)
我需要以下查询:-
q = Automobile.objects.filter(manufacturer='Tesla')
q = Automobile.objects.filter(year='something')
q = Automobile.objects.filter(model='something')
q = Automobile.objects.filter(price='something')
这些都工作正常,直到我想要多列过滤,即当我尝试
q = Automobile.objects.filter(manufacturer='Tesla',year='2013')
它抛出一个错误说Cannot execute this query as it might involve data filtering and thus may have unpredictable performance.
我用 重写了查询allowed_filtering
,但这不是最佳解决方案。
然后在阅读更多内容后,我将模型编辑如下:-
class Automobile(Model):
manufacturer = columns.Text(primary_key=True)
year = columns.Integer(primary_key=True)
model = columns.Text(primary_key=True)
price = columns.Decimal()
有了这个,我也能够过滤多个库尔,没有任何警告。
当我这样做时DESCRIBE TABLE automobile
,它显示这会创建复合键PRIMARY KEY ((manufacturer), year, model)
。
所以,我的问题是,如果我将每个属性都声明为主键怎么办?这有什么问题吗,因为我也可以过滤多个列。
这只是一个小模型。如果我有一个模型,例如:-
class UserProfile(Model):
id = columns.UUID(primary_key=True, default=uuid.uuid4)
model = columns.Text()
msisdn = columns.Text(index=True)
gender = columns.Text(index=True)
imei1 = columns.Set(columns.Text)
circle = columns.Text(index=True)
epoch = columns.DateTime(index=True)
cellid = columns.Text(index=True)
lacid = columns.Text(index=True)
mcc = columns.Text(index=True)
mnc = columns.Text(index=True)
installed_apps = columns.Set(columns.Text)
otp = columns.Text(index=True)
regtype = columns.Text(index=True)
ctype = columns.Text(index=True)
operator = columns.Text(index=True)
dob = columns.DateTime(index=True)
jsonver = columns.Text(index=True)
如果我将每个属性都声明为 PK,这有什么问题吗?