我正在为下面的用例设计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
现在我将从上表中看到的是这样的-
但是我不确定如何设计查询模式以使我的两个用例都容易得到满足,为此设计表的正确方法是什么?在这里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)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 GMT
so you would fetch everything after that
类似Bigtable的数据库存储按其键排序的行。 Cassandra使用分区和聚类键的结合来保持数据的分布和排序;但是,您只能通过使用分区键来选择行! 用于上述查询的Cassandra存储层的可视化。
问题内容: 抱歉,没有描述的标题。我们继续进行编辑。 我有一张桌子: 每天都有一个条目,但是费率很少变化。我可以编写一个仅返回发生汇率变化的行的SQL查询吗?我正在使用SQLServer 问题答案: 如果我没看错,您不是要查找经过修改的行,而是要查找价格比前一天有所变化的行。此查询或类似的查询应该执行以下操作:
是否有一种方法可以使我在从索引中检索时,只获得文档的_source中的数据&而不是任何其他元数据,如_index、_type、_id和_score?
我收到以下JSON作为响应 我正在解析这个JSON,如下所示 这很好用。 我的问题是,如果JSON中缺少任何一个键,例如“名称”丢失,它就会断裂,我将无法定义 是否可以检查是否存在,然后重试? https://jsfiddle.net/o2gxgz9r/9078/ 关于我修改了json的答案 但是他自己的财产不起作用了? 请看这把小提琴 https://jsfiddle.net/o2gxgz9r/
我有一个web应用程序,它使用JSF中的数据表和Primefaces特性,以便它可以执行一些更动态的功能。在dataTable中,我有包含可编辑数据的行。我的最终目标是让用户能够编辑数据,单击save按钮,update语句将被执行以替换数据库中存在的内容。问题是,此时我不知道如何检测ArrayList中对象的更改。 我已经杀一儆百,看看有没有人能解决我的困境。听我说,我有一个代码制作了一个data
我制作了一个应用程序来教自闭症儿童学习交流。此应用程序适用于有限用户,因此用户需要向管理员注册才能使用该应用程序。 用户将他们的生物数据,如姓名、机构和“disetujui”发送到Firebase数据库。 应用程序发送“disetujui”默认值为0的信息。 管理员接受数据后,管理员将值“disetujui”设置为1,这样用户就可以登录应用程序。 现在,对于应用程序中的登录,我无法让应用程序知道值