私は 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
タイムスタンプ列に設定しようとしましたが、同じ動作を期待していました (ただし、now() の代わりに .NET から DateTimes を渡しました) が、まったく同じように動作します。
時間の降順でレコードを保存して取得するにはどうすればよいですか?