cassandra - cassandra 真的是 NoSQL 数据库吗?
问题描述
我是 cassandara 和 NoSql 数据库的新手。根据我的理解,当您说它是 NoSQL 时,这意味着它应该在您插入值时接受所有数据(它是无模式的)。即我在 cassandra 中创建了一个表,它包含 5 个字段。第一个插入查询我只插入了5个值,就成功了。接下来我尝试了 6 个值,它抛出错误,说存在不匹配的列名/值(第 6 个字段)。如果 cassandra 是 NoSQL,那么应该将第 6 个字段插入到表中。
我做了这个谷歌。很少有人建议说用户更改查询以更改架构。如果是这种情况,我也可以在 SQL 中使用 alter schema。那为什么我需要使用 NoSQL?
我的理解正确吗?
不匹配的列名/值 com.datastax.driver.core.exceptions.InvalidQueryException:不匹配的列名/值
解决方案
是的,Cassandra 是一个 NoSQL 数据库。NoSQL数据库可以广义地定义为以非关系方式(No SQL)存储和维护数据,可以轻松存储Web规模数据,可以横向扩展并且通常是分布式的数据库。Cassandra 勾选了所有被称为 NoSQL 数据库的框。
回到您关于模式要求的问题。Cassandra 曾经提供(仍然作为弃用的功能提供)使用thrift
API 在旅途中添加列。Thrift API 将在 Cassandra 4.0 中完全删除。Cassandra 现在支持基于模式的 CQL。
您仍然可以设计您的表以使用 CQL 动态添加列,例如
CREATE TABLE keyspace.table_name (
partition_key text,
column_name text,
column_value text,
PRIMARY KEY ((partition_key),column_name));
现在,您可以将所有由column_name
和column_value
组成的partition_key
行以及按 排序的行分组column_name
。
推荐阅读
- html - 使用 html 和 css 中的 div 使元素偏离中心
- c++ - 递归如何在此代码中工作,并且在不满足 if 条件后不会终止?
- openapi - 如何覆盖 OpenAPI 组件中特定属性的示例?
- c++ - 字符串类型是头文件还是在标准命名空间中?
- java - :compileJava 在本地项目()依赖项上的多模块项目上一直失败“错误:包 xyz 不存在”
- python - 如何将我的基本文本和回合制纸牌游戏转换为通过终端运行的多人游戏?
- python - Scrapy-Spash 不爬行
- java - 从 Intent putExtra 设置数据不起作用
- python - 线子图(时间序列)中的注释(图例文本)
- excel - 将多个工作簿复制并粘贴到一个工作簿中