关于1)Cassandra用于大量写入,多个节点上的大量数据。从这种设置中检索所有数据是大胆的,因为这可能涉及必须由一个客户端处理的大量数据。更好的方法是
使用分页 。2.0本身支持此功能。
关于2)关键是分区键仅支持EQ或IN查询。对于LT或GT(),请使用列键。因此,如果有必要按“类型”之类的ID对条目进行分组,则可以将其用作分区键,并使用timeuuid作为列键。这样可以查询比X更新的所有条目
create table test (type int, SCHEMA_ID int, RECORD_NAME text, SCHEMA_VALUE text, TIMESTAMP timeuuid, primary key (type, timestamp));select * from test where type IN (0,1,2,3) and timestamp < 58e0a7d7-eebc-11d8-9669-0800200c9a66;
更新:
你问:
有人可以两次插入相同的SCHEMA_ID?我对么?
是的,您始终可以使用现有的主键进行插入。该主键上的值将被更新。因此,为了保持唯一性,通常在主键(例如timeuuid)中使用UUID。它是一个唯一值,包含时间戳记和客户端的MAC地址。有关此主题的文档非常出色。
一般建议:
- 首先写下您的查询,然后设计模型。 (用例!)
- 您的查询定义了数据模型,而数据模型又主要由 主键 定义 。
因此,在您的情况下,我只是在上面修改我的架构,如下所示:
CREATE TABLE TEST (SCHEMA_ID TEXT, RECORD_NAME TEXT, SCHEMA_VALUE TEXT, LAST_MODIFIED_DATE TIMEUUID, PRIMARY KEY (RECORD_NAME, LAST_MODIFIED_DATE));
允许此查询:
select * from test where RECORD_NAME IN ("componentA","componentB") and LAST_MODIFIED_DATE < 1688f180-4141-11e3-aa6e-0800200c9a66;the uuid corresponds to -> Wednesday, October 30, 2013 8:55:55 AM GMTso you would fetch everything after that


