2014-01-22 82 views
1

我第一次嘗試Cassandra並在本地爲簡單的會話管理數據庫運行它。 [卡桑德拉-2.0.4,CQL3,datastax驅動2.0.0 RC2]卡桑德拉計數查詢失敗,由於AssertionError

以下數查詢工作正常時,有表中沒有任何數據:

select count(*) from session_data where app_name=? and account=? and last_access > ? 

但即使是單行後插入到表,查詢失敗,出現以下錯誤:

java.lang.AssertionError 
at org.apache.cassandra.db.filter.ExtendedFilter$WithClauses.getExtraFilter(ExtendedFilter.java:258) 
at org.apache.cassandra.db.ColumnFamilyStore.filter(ColumnFamilyStore.java:1719) 
at org.apache.cassandra.db.ColumnFamilyStore.getRangeSlice(ColumnFamilyStore.java:1674) 
at org.apache.cassandra.db.PagedRangeCommand.executeLocally(PagedRangeCommand.java:111) 
at org.apache.cassandra.service.StorageProxy$LocalRangeSliceRunnable.runMayThrow(StorageProxy.java:1418) 
at org.apache.cassandra.service.StorageProxy$DroppableRunnable.run(StorageProxy.java:1931) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
at java.lang.Thread.run(Thread.java:744) 

這裏是我使用模式:

CREATE KEYSPACE session WITH replication= {'class': 'SimpleStrategy', 'replication_factor': 1}; 

CREATE TABLE session_data (
username text, 
session_id text, 
app_name text, 
account text, 
last_access timestamp, 
created_on timestamp, 
PRIMARY KEY (username, session_id, app_name, account) 
); 

create index sessionIndex ON session_data (session_id); 
create index sessionAppName ON session_data (app_name); 
create index lastAccessIndex ON session_data (last_access); 

我想知道表定義/索引或查詢本身是否有問題。任何幫助/見解將不勝感激。

回答

2

它看起來像你絆倒在卡桑德拉的錯誤。這裏是卡桑德拉來源的斷言和相關評論:

/* 
* This method assumes the IndexExpression names are valid column names, which is not the 
* case with composites. This is ok for now however since: 
* 1) CompositeSearcher doesn't use it. 
* 2) We don't yet allow non-indexed range slice with filters in CQL3 (i.e. this will never be 
* called by CFS.filter() for composites). 
*/ 
assert !(cfs.getComparator() instanceof CompositeType); 

此代碼是卡桑德拉-2.0.4幹線之間修改票CASSANDRA-5417的一部分,但目前還不清楚,我認爲作者意識到這個問題。斷言已被刪除,但評論不是。我會建議向Cassandra項目提交一個錯誤報告。

+0

謝謝@Andy。我提交了一個錯誤報告[CASSANDRA-6612](https://issues.apache.org/jira/browse/CASSANDRA-6612)。 – averma

+0

與此同時,你是否知道是否有另一個最近的穩定版本可能沒有這個問題?下載頁面列出:2.0.4和1.2.13。但是我對卡桑德拉了解兩者之間的根本差異知之甚少。 – averma

+0

我在Cassandra 1.2上試過了你的模式,並得到了'不好的請求:無法在'session_id'和'app_name'的PRIMARY KEY部分創建索引。似乎主要關鍵部分的二級索引是一個問題。嘗試創建一個單獨的單值主鍵(該值可以是用戶名+ session_id + app_name_account的連接,其內容將與這些字段重複。) –