簡體   English   中英

Cassandra 2.0.6:將AND添加到查詢時,結果數量更多

[英]Cassandra 2.0.6: Higher number of results when adding AND to query

使用datastax Querybuilder 刪除具有特定projectId (主鍵) 的表的所有行后 ,對於具有二級索引的AND結合的查詢,我們將獲得“隱藏結果”。

例:

首要的關鍵:

  • projectId

次要指標:

  • appVersion
  • viewState

用AND查詢:

SELECT * FROM a.test WHERE projectId='test' AND appVersion=1 AND viewState='FeedListActivity';

結果1

沒有:

SELECT * FROM a.test WHERE projectId='test' AND appVersion=1;

結果0行。

我們假設它可能與Cassandras墓碑有關。 因此,我們執行了nodetool修復壓縮,然后重新啟動了cassandra服務和服務器->沒有任何變化。

運行:

  • 卡桑德拉2.0.6
  • Windows Server 2012 R2標准
  • 64位
  • 使用datastax QueryBuilder通過Java刪除( cassandra-driver-core-2.0.1

表屬性(描述表):

WITH
bloom_filter_fp_chance=0.010000 AND
caching='KEYS_ONLY' AND
comment='' AND
dclocal_read_repair_chance=0.000000 AND
gc_grace_seconds=0 AND
index_interval=128 AND
read_repair_chance=0.100000 AND
replicate_on_write='true' AND
populate_io_cache_on_flush='false' AND
default_time_to_live=0 AND
speculative_retry='99.0PERCENTILE' AND
memtable_flush_period_in_ms=0 AND
compaction={'class': 'SizeTieredCompactionStrategy'} AND
compression={'sstable_compression': 'LZ4Compressor'};

解決方法:我們將整個內容復制到一個相同的表中,將舊表截斷,然后將數據復制回。 現在我們為兩個查詢得到一個結果。

有不需要我們使用替代方法的正確方法嗎? 我們錯過了什么嗎?

提前致謝...

添加了表格創建過程

DROP TABLE IF EXISTS a.test;
CREATE TABLE a.test (
  projectid text,  
  appversion int,  
  viewstate text,
  PRIMARY KEY (projectid)
);

CREATE INDEX ON a.test (appversion);
CREATE INDEX ON a.test (viewstate);

我猜測您的關於appversion的二級索引不同步。 這種情況不應該經常發生,但是如果再次發生,請嘗試使用NodeTool rebuild_index重建索引。

nodetool rebuild_index a test

那應該重建a.test表上的所有二級索引。 如果您具有appversion上的索引名稱,則可以將其添加為最終參數,以僅重建該特定索引。

另外,只是想知道,但是您是否嘗試過將索引列構建為主鍵上的聚類列?

PRIMARY KEY((projectid),appversion,viewstate)

這個主鍵定義將使您的兩個查詢(上面提到的)都可以使用。 它也應該比使用二級索引更快,並且您不必擔心它會再次不同步。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM