最新的 cassandra 是不是仍然支持各个行具有不同的列?
Posted
技术标签:
【中文标题】最新的 cassandra 是不是仍然支持各个行具有不同的列?【英文标题】:Does the latest cassandra still support the individual rows to have different columns?最新的 cassandra 是否仍然支持各个行具有不同的列? 【发布时间】:2020-07-09 08:33:03 【问题描述】:我是 cassandra 的新手,我正在查看官方文档。我发现 cassandra 中的表概念与 RDBMS 非常相似。
https://cassandra.apache.org/doc/latest/cql/index.html会教我如何创建表、插入表等
但下面是来自https://www.tutorialspoint.com/cassandra/cassandra_data_model.htm。
它说与不固定列族架构的关系表不同,Cassandra 不强制单个行具有所有列。 下图显示了 Cassandra 列族的示例。
我的问题是我在当前的 cassandra 中找不到这个设计,下面是我运行一些简单的插入命令的屏幕截图。
由于我只插入了两列INSERT INTO emp (emp_id, emp_city) VALUES (5, 'abc'),所以其余的都会设置为null,和一般的rdbms很相似。 p>
那么你能告诉我如何在第一张图片中实现“不同的行有不同的列”吗? 非常感谢。
【问题讨论】:
【参考方案1】:当您省略特定列的数据时,Cassandra 不会插入 null
。读取数据时返回null
,数据丢失。最好使用sstabledump
检查数据在磁盘上的放置情况。例如,对于我的数据:
cqlsh:test> select * from test.st1;
id | c1 | s1 | v1
----+------+----+------
10 | null | 10 | null
1 | 1 | 2 | 1
1 | 2 | 2 | 1
2 | 10 | 3 | null
(4 rows)
对于最后一行,我可以看到我没有实际数据,因为 cells
是空的:
"partition" :
"key" : [ "2" ],
"position" : 97
,
"rows" : [
"type" : "static_block",
"position" : 144,
"cells" : [
"name" : "s1", "value" : 3, "tstamp" : "2019-04-12T14:33:47.198445Z"
]
,
"type" : "row",
"position" : 144,
"clustering" : [ 10 ],
"liveness_info" : "tstamp" : "2019-04-29T12:49:31.450239Z" ,
"cells" : [ ]
]
但如果我明确插入null
:
cqlsh:test> insert into test.st1(id, s1, c1, v1) values (3, 10, 3, null);
然后我会在cells
里面看到它作为墓碑在数据文件中:
"partition" :
"key" : [ "3" ],
"position" : 0
,
"rows" : [
"type" : "static_block",
"position" : 39,
"cells" : [
"name" : "s1", "value" : 10, "tstamp" : "2020-07-09T09:19:39.751467Z"
]
,
"type" : "row",
"position" : 39,
"clustering" : [ 3 ],
"liveness_info" : "tstamp" : "2020-07-09T09:19:39.751467Z" ,
"cells" : [
"name" : "v1", "deletion_info" : "local_delete_time" : "2020-07-09T09:19:39Z"
]
]
【讨论】:
感谢空解释,但如何实现'不同行不同列,如第 1 行有'a'、'b'、'c' 列,第 2 行有'c' 列, 'd','e'?我知道它不能像mysql那样在rdbms中实现。 只需使用insert into table (a, b, c) values (...)
和insert into table (c, d, e) values (...)
谢谢,我插入6行数据,用sstabledump导出,发现三行在md-2-big-Data.db,其他三行在md-1-big -Data.db,为什么?
因为这就是 Cassandra 的工作方式。它不会就地修改数据,而是将所有更改(插入/更新/删除)附加到文件中,然后在读取或压缩期间对数据进行协调。请阅读 DataStax 架构指南了解更多详情:docs.datastax.com/en/dse/6.7/dse-arch/index.html以上是关于最新的 cassandra 是不是仍然支持各个行具有不同的列?的主要内容,如果未能解决你的问题,请参考以下文章
在Cassandra 3.0多节点集群中回收磁盘空间的最佳实践
Stargate REST API 是不是支持 Cassandra 批量查询?
如果您有最新版本的 jquery,livequery 是不是仍然有用?