I'm using Python Cassandra Cqlengine extension. I create many-to-many table but I receive error in user_applications model query filtering process. I'm readed different resource for this problem, but I did not fully understand this problem.
Is ALLOW FILTERING in Cassandra for following query efficient?
Database Model:
class UserApplications(BaseModel):
__table_name__ = "user_applications"
user_id = columns.UUID(required=True, primary_key=True, index=True)
application_id = columns.UUID(required=True, primary_key=True, index=True)
membership_id = columns.UUID(required=True, primary_key=True, index=True)
Error Message:
Cannot execute this query as it might involve data filtering and thus may have unpredictable performance. If you want to execute this query despite the performance unpredictability, use ALLOW FILTERING"
Python CQLEngine Code:
q = UserApplications.filter(membership_id=r.membership_id,
user_id=r.user_id,
application_id=r.application_id)
CQLEngine SQL Statements:
SELECT "id", "status", "created_date", "update_date" FROM db.user_applications WHERE "membership_id" = %(0)s AND "user_id" = %(1)s AND "application_id" = %(2)s LIMIT 10000
Describe Table Result:
CREATE TABLE db.user_applications (
id uuid,
user_id uuid,
application_id uuid,
membership_id uuid,
created_date timestamp,
status int,
update_date timestamp,
PRIMARY KEY (id, user_id, application_id, membership_id)
) WITH CLUSTERING ORDER BY (user_id ASC, application_id ASC, membership_id ASC)
AND bloom_filter_fp_chance = 0.01
AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
AND comment = ''
AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}
AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}
AND crc_check_chance = 1.0
AND dclocal_read_repair_chance = 0.1
AND default_time_to_live = 0
AND gc_grace_seconds = 864000
AND max_index_interval = 2048
AND memtable_flush_period_in_ms = 0
AND min_index_interval = 128
AND read_repair_chance = 0.0
AND speculative_retry = '99PERCENTILE';
CREATE INDEX user_applications_membership_id_idx ON db.user_applications (membership_id);
Waiting your helps.