【发布时间】:2013-11-05 08:20:01
【问题描述】:
我正在为以下用例设计 Cassandra 列族架构。我不确定为以下用例设计 cassandra 列族的最佳方法是什么?我将为此使用 CQL Datastax Java 驱动程序..
下面是我的用例和我现在设计的示例模式 -
SCHEMA_ID RECORD_NAME SCHEMA_VALUE TIMESTAMP
1 ABC some value t1
2 ABC some_other_value t2
3 DEF some value again t3
4 DEF some other value t4
5 GHI some new value t5
6 IOP some values again t6
现在我将从上表中看到的是这样的 -
- 每当我的应用程序第一次运行时,我都会要求上表中的所有内容..意思是给我上表中的所有内容..
- 然后每隔 5 或 10 分钟,我的后台线程将检查此表,并要求只提供已更改的所有内容(如果该行有任何更改,则为整行)。这就是我使用的原因时间戳作为此处的列之一..
但我不确定如何设计查询模式,以便我的两个用例都能轻松满足,为此设计表的正确方法是什么?这里 SCHEMA_ID 将是我想使用的主键...
我将为此使用 CQL 和 Datastax Java 驱动程序..
更新:-
如果我使用这样的东西,那么这种方法有什么问题吗?
CREATE TABLE TEST (SCHEMA_ID TEXT, RECORD_NAME TEXT, SCHEMA_VALUE TEXT, LAST_MODIFIED_DATE TIMESTAMP, PRIMARY KEY (ID));
INSERT INTO TEST (SCHEMA_ID, RECORD_NAME, SCHEMA_VALUE, LAST_MODIFIED_DATE) VALUES ('1', 't26', 'SOME_VALUE', 1382655211694);
因为,在我的这个用例中,我不希望任何人每次都插入相同的SCHEMA_ID。SCHEMA_ID 应该是唯一的,只要我们在此表中插入任何新行。所以在你的例子中(@ Omnibear),有可能有人可以插入相同的 SCHEMA_ID 两次?我说的对吗?
关于type,您已将其作为额外列,在我的示例中,该类型列可以是record_name..
【问题讨论】:
-
突然想到:没有必要用 1 个表满足所有用例。 NoSQL 存储的原则之一是在有意义的时候采用冗余。您在分布式环境中工作,因此存储成本不高。如果您可以通过创建两个而不是一个表来解决问题 - 就这样做:-)
-
感谢 omnibear 的建议。但我想,我可以用我当前的表架构来实现我的第二个问题答案?正确的?如果是,那我该怎么做?有什么想法吗?
标签: java cassandra cql datastax-java-driver