【发布时间】:2014-08-14 12:03:04
【问题描述】:
我有 3 个节点的 Cassandra 2.x 集群和这样的数据库方案:
cqlsh> CREATE KEYSPACE test_ks WITH REPLICATION = {'class': 'SimpleStrategy', 'replication_factor': 3} AND durable_writes = true;
cqlsh> CREATE TABLE IF NOT EXISTS test_ks.test_cf (
... time timeuuid,
... user_id varchar,
... info varchar,
... PRIMARY KEY (time, user_id)
... ) WITH compression = {'sstable_compression': 'LZ4Compressor'} AND compaction = {'class': 'LeveledCompactionStrategy'};
让我们添加一些数据(在插入之间等待一段时间):
cqlsh> INSERT INTO test_ks.test_cf (time, user_id, info) VALUES (now(), 'user1', 'pythonista');
cqlsh> INSERT INTO test_ks.test_cf (time, user_id, info) VALUES (now(), 'user1', 'mr. Haskell');
让我们看看我们的数据:
cqlsh> SELECT dateOf(time), user_id, info FROM test_ks.test_cf;
dateOf(time) | user_id | info
--------------------------+---------+-------------
2014-06-24 16:00:31+0700 | user1 | mr. Haskell
2014-06-24 15:59:32+0700 | user1 | pythonista
(2 rows)
我在查询 test_cf CF 时得到了一些奇怪的结果:
cqlsh> SELECT dateOf(time) FROM test_ks.test_cf WHERE user_id='user1' AND token(time) >= token(maxTimeuuid('2014-06-24 16:00:31+0700')) ALLOW FILTERING;
dateOf(time)
--------------------------
2014-06-24 15:59:32+0700
(1 rows)
cqlsh> SELECT dateOf(time) FROM test_ks.test_cf WHERE user_id='user1' AND token(time) >= token(maxTimeuuid('2014-06-24 16:00:32+0700')) ALLOW FILTERING;
dateOf(time)
--------------------------
2014-06-24 15:59:32+0700
(1 rows)
cqlsh> SELECT dateOf(time) FROM test_ks.test_cf WHERE user_id='user1' AND token(time) >= token(maxTimeuuid('2014-06-24 16:00:33+0700')) ALLOW FILTERING;
dateOf(time)
--------------------------
2014-06-24 16:00:31+0700
2014-06-24 15:59:32+0700
(2 rows)
如您所见,比较给出了错误的结果,但 timeuuid 不得大于 maxTimeuuid 并且必须大于 'minTimeuuid'(对于相同的日期时间,当然 =))。有人可以向我解释一下这种奇怪的行为吗?
TIA!
【问题讨论】:
标签: cassandra cql3 cassandra-2.0 cqlsh