2015-10-16 77 views
1

我有一個卡桑德拉只有2列和16行的表。當我做一個cassandra cqlsh給出錯誤的計數

select * from <table name> 

我只能看到15行。 當我做了

select count(*) from <table name> 

我得到算作15 我在cqlsh 有1行內丟失了寫這些查詢,但如果我這樣做SELECT * FROM其中,appname =「」我得到的行。

當我使用nodejs casandra驅動程序做同樣的事情時,我得到正確的結果爲16. 這裏有什麼問題。我做了nodetool刷新以及相同的結果 我正在使用cassandra 2.18

回答

5

這可能是一致性級別的問題。要使用的讀取一致性級別取決於複製因子和寫入一致性級別。

您可以在datastax documentation找到關於一致性水平的更多信息。

要快速解決您的問題,您可以cqlsh試試這個:

CONSISTENCY ALL 
SELECT count(*) ON <table name> 
+0

cqlsh是客戶我quess,所以它應該給我的數據按照正確的驅動程序? – Nipun

+1

Cqlsh是一個客戶端,所以它的行爲就像驅動程序。但你並不完全正確地說它應該提供相同的數據。原因是[最終一致性](https://en.wikipedia.org/wiki/Eventual_consistency)。兩個相同的查詢可以爲您提供不同的數據,具體取決於查詢哪個節點,使用哪種CL,以及數據已更新多少。如果你是初學者,你應該使用QUORUM寫作和閱讀,以免干擾一致性。 Cqlsh的默認一致性級別是ONE(低)。你知道你的駕駛一致性水平是什麼? – DineMartine

+0

這是一個很棒的解釋。我查看了鏈接並瞭解它是什麼。我從datastax使用NodeJs連接器用於cassandra,並使用默認的一致性級別,即ONE本身。可能他們正在查詢不同的機器。 – Nipun

相關問題