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);
我想知道表定義/索引或查詢本身是否有問題。任何幫助/見解將不勝感激。
謝謝@Andy。我提交了一個錯誤報告[CASSANDRA-6612](https://issues.apache.org/jira/browse/CASSANDRA-6612)。 – averma
與此同時,你是否知道是否有另一個最近的穩定版本可能沒有這個問題?下載頁面列出:2.0.4和1.2.13。但是我對卡桑德拉了解兩者之間的根本差異知之甚少。 – averma
我在Cassandra 1.2上試過了你的模式,並得到了'不好的請求:無法在'session_id'和'app_name'的PRIMARY KEY部分創建索引。似乎主要關鍵部分的二級索引是一個問題。嘗試創建一個單獨的單值主鍵(該值可以是用戶名+ session_id + app_name_account的連接,其內容將與這些字段重複。) –