1

私は 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 を渡しました) が、まったく同じように動作します。

時間の降順でレコードを保存して取得するにはどうすればよいですか?

4

1 に答える 1