我对 Cassandra 很陌生,我创建了一个像这样的表:
CREATE TABLE IF NOT EXISTS notifications (
id uuid,
raised timeuuid,
recorded timeuuid,
customer varchar,
region varchar,
location varchar,
operator varchar,
till varchar,
receipt_id varchar,
value decimal,
details text,
is_refund boolean,
has_promos boolean,
utc_offset int,
frame_count int,
expecting_video boolean,
PRIMARY KEY (id, raised)
) WITH CLUSTERING ORDER BY (raised desc);
然后从 DataStax .NET Cassandra 适配器插入 1,000 行,如下所示:
for (var i = 0; i < 1000; i++)
{
var id = Guid.NewGuid();
var now = DateTime.Now;
var insertNotif = session.Prepare(@"
INSERT INTO notifications
(id,customer,region,location,operator,till,receipt_id,value,details,is_refund,has_promos,raised,recorded,utc_offset,frame_count,expecting_video)
VALUES (?,?,?,?,?,?,?,?,?,?,?,now(),now(),?,?,?)");
var insertNotifStatement = insertNotif.Bind(id, "cust1", "reg1", "loc1", "tomm", "london", i.ToString(), i % 10.99D, "DATA_HERE", false, true, (int)TimeZone.CurrentTimeZone.GetUtcOffset(now).TotalMinutes, 0, false);
session.Execute(insertNotifStatement);
Thread.Sleep(10);
}
我期望发生的是所有记录都将根据raised
列按时间降序存储。当我使用 CQLSH 检查数据时,它似乎是随机顺序的:
cqlsh:my_keyspace> select dateOf(raised) from notifications limit 5;
dateOf(raised)
--------------------------------------
2014-06-03 11:12:45GMT Daylight Time
2014-06-03 11:12:48GMT Daylight Time
2014-06-03 11:12:56GMT Daylight Time
2014-06-03 11:12:32GMT Daylight Time
2014-06-03 11:12:34GMT Daylight Time
(5 rows)
我做错了什么吗?顺便说一句,我也尝试设置raised
为时间戳列并期望相同的行为(但我从 .NET 而不是 now() 传入 DateTimes),但它的行为方式完全相同。
如何获取我的记录存储并按时间降序检索?