Database 卡桑德拉通过不做我所做的事情来排序';我希望
我对Cassandra很陌生,我创建了一个如下表:Database 卡桑德拉通过不做我所做的事情来排序';我希望,database,cassandra,cql,cql3,cqlsh,Database,Cassandra,Cql,Cql3,Cqlsh,我对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 decima
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适配器插入1000行,如下所示:
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);
}
我做错什么了吗?
顺便说一句,我还尝试将提升
设置为一个timestamp列,并期望具有相同的行为(但我从.NET而不是now()传入了DateTimes),但其行为方式完全相同
如何以时间降序的方式获取存储和检索的记录?聚类顺序是指分区内的顺序,即相同ID的顺序。因此,如果插入具有不同
提升值的多行并进行查询,您将看到它们以降序返回
您看到的顺序是ID的顺序。正如你所观察到的,这些基本上是随机的。此顺序是分区器顺序,即按ID的哈希排序
您无法更改此顺序,因此无法按时间顺序读取所有分区。您只能在每个分区内排序 仅当分区键受eq或in限制时才支持order by。我没有使用order by,我希望记录按日期降序存储,因为架构中定义了群集顺序。通过查询数据,我希望数据按群集顺序定义的顺序返回。谢谢,好信息,那么我如何按日期描述顺序检索所有通知?除非将它们全部放在同一分区中,否则无法检索。但是你没有任何可伸缩性。如果需要读入所有数据,可以使用Hadoop或Shark。
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)