Cassandra 卡桑德拉表格建模
假设一个表有数千列,其中行记录中的大多数数据为空。其中一列是一个ID,这个ID是预先知道的Cassandra 卡桑德拉表格建模,cassandra,Cassandra,假设一个表有数千列,其中行记录中的大多数数据为空。其中一列是一个ID,这个ID是预先知道的 select id,SomeRandomColumn from LotsOfColumnsTable where id = 92e72b9e-7507-4c83-9207-c357df57b318; SomeRandomColumn是数千列中的一列,在大多数情况下是唯一包含数据的列。SomeRandomColumn不是包含数据的列 是否有一个CQL查询可以执行类似的操作 select {Only Co
select id,SomeRandomColumn
from LotsOfColumnsTable
where id = 92e72b9e-7507-4c83-9207-c357df57b318;
SomeRandomColumn是数千列中的一列,在大多数情况下是唯一包含数据的列。SomeRandomColumn不是包含数据的列
select {Only Columns with data}
from LotsOfColumnsTable
where id = 92e72b9e-7507-4c83-9207-c357df57b318;
select ColumnHint.{DataColumnName}
from LotsOfColumnsTable
where id = 92e72b9e-7507-4c83-9207-c357df57b318;
CREATE TABLE IF NOT EXISTS WideProductInstance (
Id uuid,
ColumnDataName text
PRIMARY KEY (Id)
);
谢谢
是否有一个CQL查询可以执行类似的操作
选择{仅包含数据的列}
来自LotsOfColumnsTable
其中id=92e72b9e-7507-4c83-9207-c357df57b318代码>
不,你不能那样做。这很容易解释。为了能够知道列包含数据,Cassandra需要读取它。如果它必须读取数据,因为工作已经花费在磁盘上,它只会将这些数据返回给客户机
如果Cassandra能够过滤出null列,您将得到的唯一节省是在网络带宽上
我在考虑加入一个“提示”列,指向包含数据的列,但这感觉是错误的,除非有一个CQL查询看起来像这样,只有一个查询
您的想法就像在另一个表中存储一个包含实际数据且不为空的所有列的列表。这听起来像是一个不好的连接,不受支持。如果您需要在阅读原始表格之前阅读此参考表格,那么您必须在许多地方阅读,而且这将非常昂贵
所以,也许我真正的问题是,我如何在卡桑德拉复制我可以用蒙多布做的事情
不要试图将相同的功能从Mongo复制到Cassandra。这两个数据库具有根本不同的体系结构。你要做的是对你的功能用例进行推理。“我想如何从Cassandra那里获取数据?”从这一点出发,设计一个合适的数据模型。Cassandra数据模型是通过查询设计的
最好的建议是在观看一些Cassandra数据模型视频(它是免费的)。如果一行中有一个空列,则该列为空。您可以执行SELECT*。Cassandra将只返回现有数据。我不明白你为什么需要更多?