Cassandra
Cassandra 查詢在不同時間執行不同
我在生產中使用 apache-cassandra-2.0.12,具有網路拓撲策略和 ReplicationFactor:集群中的 3 個,2 個 DC,每個包含 4 個節點
在分析讀取請求的響應時間時,我們發現一些查詢的執行速度比實際慢。例如:考慮下表
Create ColumnFamily "Employee" ( empID bigint, uniqueID text, col1 text, col2 text, col3 text, primary key (empID,uniqueID) )
此 CF 包含超過 5K 行整體的數據,並且每個員工包含最少 100K 列和最多 1000K 列
因此,在此 CF 中,以下查詢的響應時間會不時發生巨大差異
SELECT * form "Employee" where empID = xxx and uniqueID = 'value';
有時上述查詢的響應時間超過 3 秒,而實際上應該在 50 毫秒內
我當時監控了節點的負載(壓縮時間、磁碟使用率等)、CPU 和記憶體。所有這些參數都是正常的。
有什麼我錯過的或者這是 cassandra 的正常行為嗎?
注意:我在這個 CF 中沒有任何墓碑列
primary key (empID,uniqueID)
此 CF 包含超過 5K 行整體的數據,並且每個員工包含最少 100K 列和最多 1000K 列
每個分區的行數太多了。我的猜測是查詢大分區時會發生查詢速度減慢。這完全取決於數據單元值大小和數據寬度,但作為一般規則,我不會為每個分區建模超過 10k-30k 行。
為了測試這一點,您可以
nodetool tablehistorgrams
在您的表上執行以測量諸如最大單元數和分區大小之類的東西。然後使用 對小型和大型分區執行您的查詢TRACING ON
,我相信您會看到差異。基本上,嘗試為較小的分區重新設計模型。
如果命中作為主節點的數據節點,並且只搜尋其他2個節點,那麼響應時間會更短。
如果請求命中非數據節點作為主節點,在複製因子為 3 的情況下,它需要從 3 個節點獲取數據,因此響應時間會更高。
CL=local_quorum