我已經看到,在cassandra上執行範圍查詢的最佳方法是使用CLUSTERING KEY。但是我需要做一些除CLUSTERING KEY列以外的範圍查詢。Cassandra範圍查詢:二級索引vs未索引Colum
我看,我們可以做到這一點使用上允許過濾的任何列。但是,如果我在該列上創建二級索引,是否有任何性能優勢?
我已經看到,在cassandra上執行範圍查詢的最佳方法是使用CLUSTERING KEY。但是我需要做一些除CLUSTERING KEY列以外的範圍查詢。Cassandra範圍查詢:二級索引vs未索引Colum
我看,我們可以做到這一點使用上允許過濾的任何列。但是,如果我在該列上創建二級索引,是否有任何性能優勢?
看一看這個鏈接: https://www.datastax.com/dev/blog/allow-filtering-explained-2
的ALLOW FILTERING
選項允許你告訴卡桑德拉,這是確定,一旦從磁盤加載行執行內存中的數據進行過濾。因此,我們可以使用它來通過聚類列進行搜索,而無需指定先前的聚類列。但是我們不能在非集羣列上使用它。
請參閱下面的博客示例架構。使用ALLOW FILTERING
不允許我們按作者列進行過濾,除非我們將其作爲索引,然後不需要ALLOW FILTERING
選項。
cqlsh:test> SELECT * FROM blogs WHERE author = 'john' ALLOW FILTERING;
Bad Request: No indexed columns present in by-columns clause with Equal operator
cqlsh:test>
cqlsh:test> CREATE INDEX authors ON blogs (author);
cqlsh:test> SELECT * FROM blogs WHERE author = 'john';
(0 rows)
cqlsh:test> SELECT * FROM blogs WHERE author = 'john' ALLOW FILTERING;
(0 rows)
但是,RANGE QUERY仍然需要允許過濾,即使它被編入索引。對 ? –
我剛做了一個實驗。 Cassandra允許在未編制索引的列上進行RANGE查詢。只有範圍查詢。 –
性能將吸**與**允許過濾*和*二級索引。如果性能是您真正關心的事情,那麼您需要將數據複製到查詢表中,其中主鍵定義旨在支持您的範圍查詢。 – Aaron