当前位置: 首页 > 知识库问答 >
问题:

如何理解Cassandra中的“灵活模式”?

卢宜然
2023-03-14

我是卡桑德拉的新手,在下面的维基百科中可以找到。

列族(CQL 3以来称为“表”)类似于RDBMS(关系数据库管理系统)中的表。列族包含行和列。每一行由行键唯一标识。每行都有多列,每列都有一个名称、值和时间戳。与RDBMS中的表不同,同一列族中的不同行不必共享同一列集,一列可以随时添加到一行或多行中

它说‘同一列族中的不同行不必共享同一列集',但如何实现呢?我几乎阅读了offical网站上的所有文件。

CREATE TABLE Emp_record(E_id int PRIMARY KEY,E_score int,E_name text,E_city text);
INSERT INTO Emp_record(E_id, E_score, E_name, E_city) values (101, 85, 'ashish', 'Noida');
INSERT INTO Emp_record(E_id, E_score, E_name, E_city) values (102, 90, 'ankur', 'meerut');

共有1个答案

燕璞
2023-03-14

Column家族源自Cassandra的原始设计,当时的数据模型看起来像Google BigTable或Apache HBase,通信使用Thrift协议。但这需要在应用程序内部定义模式,这使得从许多应用程序访问数据变得更加困难,因为您需要在所有应用程序中更新模式······

create tableinsert是很久以前引入的Cassandra查询语言(CQL)的一部分,取代了基于节俭的实现(Cassandra4.0完全删除了节俭支持)。在CQL中,您需要为表定义模式,其中需要提供列名和类型。如果您真的需要动态列,有几种方法(我将链接我已经写过的答案,这样就不会重复了):

  1. 如果有相同类型的值,可以使用一个列作为属性/列的名称,另一个列存储值,如下所述
  2. 如果有不同类型的值,还可以使用一列作为属性/列的名称,并为值定义多列--每种数据类型都有一列:inttext、...,并且只在相应的列中插入值(此处介绍)
  3. 您可以使用映射(在此描述)--它类似于第一个或第二个,但主要是为数量非常少的“动态列”设计的,此外还有其他限制,例如,需要读取完整的映射才能获取一个值,等等)
 类似资料:
  • 我正在尝试设计一个新的应用程序,它使用Cassandra而不是传统的SQL数据库。集群和水平扩容功能对我的用例特别有用。 我有这样的情况,我有多个记录,它们可能彼此非常不同。例如,如果我存储不同的运动信息,对于足球,我会存储两支球队、球员、半场和全场比赛后的结果、红牌、黄牌等信息,而如果是网球比赛,则会存储两名对手、盘数等信息。 我不希望每个运动都有一个表(有负载),并且希望能够添加新的运动,而不

  • 本文向大家介绍javascript中活灵活现的Array对象详解,包括了javascript中活灵活现的Array对象详解的使用技巧和注意事项,需要的朋友参考一下 前言 JavaScript中的Array对象,就是我们常说的数组对象,主要用于封装多个任意类型的数据,并对它们进行管理。 所有主流浏览器均支持Array对象。 大家都知道Array实例有这四个方法:push、pop、shift、unsh

  • 本文向大家介绍asp.net core中灵活的配置方式详解,包括了asp.net core中灵活的配置方式详解的使用技巧和注意事项,需要的朋友参考一下 前言 asp.net core支持外部文件和命令行参数方式来配置系统运行所需要的配置信息,我们从下面两个常用场景来具体说下具体使用方法。 一、监听地址及端口配置 1,命令行方式 asp.net core系统通过命令行方式启动,使用的命令如下: do

  • 问题内容: 我现在两次遇到问题,生产者线程会产生N个工作项,将它们提交给an ,然后需要等待,直到所有N个项都已处理完毕。 注意事项 N事先未知 。如果是这样,我将简单地创建一个然后具有生产者线程,直到完成所有工作。 使用a 是不合适的,因为尽管我的生产者线程需要阻塞(即,通过调用),但 无法表示所有工作都已完成 ,从而导致生产者线程停止等待。 我当前喜欢的解决方案是使用整数计数器,并在提交工作项

  • 本文向大家介绍如何理解JavaScript模块模式?,包括了如何理解JavaScript模块模式?的使用技巧和注意事项,需要的朋友参考一下 JavaScript本机不支持类,因此使用Module模式。这是为了将公共,私有方法和变量存储在单个对象中。为了使用和理解它,我们将解决匿名关闭问题,以显示由于未达到18岁年龄标准而导致的选民资格丧失。 示例 您可以尝试运行以下代码来了解JavaScript模

  • 我有一个应用程序屏幕,顶部有一个标题,底部有几个按钮,中心的其余部分有一个输入表单。 我试图实现的目标是:我希望输入表单子项(即不同的输入字段)在垂直轴上展开,以填充可用空间。当键盘打开并占据40%的屏幕时,我希望输入字段之间的所有灵活空间都缩小,如果这不足以显示所有内容,我希望“中心”部分是可滚动的,这样用户就可以找到其余的输入字段,现在隐藏在“下面”。 我使用的是与子列