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

如何在cassandra中创建支持任何列的表结构?

劳法
2023-03-14

我有一个表,其列如下所示:

  • 符号
  • 区域
  • 国家
  • 位置
  • 日期
  • 计数

我创建了如下表:

CREATE TABLE IF NOT EXISTS INFO (symbol varchar, region varchar, country varchar, location varchar, date date,count varint, PRIMARY KEY(symbol,date));
    null

简单地说,我想要支持where子句中所有或任意数量列的表结构。

在卡桑德拉有可能做到这一点吗?

共有1个答案

程祺
2023-03-14

在我看来,你需要学习一些Cassandra数据建模。我建议您访问https://academy.datastax.com/courses并观看一些课程(更具体地说是DS210和DS220),它们在简单注册后是免费的。在我看来,这是学习卡桑德拉最好的方法。我知道它们很长,但它们非常有用。

来回答你的问题。在查询中总是必须指定分区键(在本例中是符号),这就是为什么:当插入数据时,Cassandra将对主键进行散列,并将数据存储在负责该散列的节点上(这称为范围)。因此,如果集群中有1000个节点,并且运行指定的选择查询之一,那么Cassandra如何知道哪个节点有数据呢?使用ALLOW FILTERING可以在所有节点中搜索所需的数据,但可以想象,这对性能的影响很大。下面是一个更好地理解的参考:https://www.datastax.com/dev/blog/the-most-mealth-the-to-know-in-cassandra-data-modeling-the-primary-key

解决这个问题的方法是创建多个数据相同但分区键不同的表。是的,这会产生很多冗余数据,但这真的那么糟糕吗?

第二个代价是您必须进行多次写入以保持表的一致性。但是与SQL数据库相比,Cassandra的数据写入速度非常快。读取更昂贵,但这在您的情况下并不重要,因为无论如何您只能读取一次数据。

那么你实际应该怎么做呢?

在您的情况下,您必须为所需的每个新分区键创建一个新表。即创建4个以日期、国家、位置和地区作为分区键的新表。

select * from info where symbol='AAA' AND count < 5;
CREATE TABLE IF NOT EXISTS INFO (symbol varchar, region varchar, country varchar, location varchar, date date,count varint, PRIMARY KEY(symbol,date,count,));
 类似资料:
  • 我正在尝试创建列表列表,其中大列表表示纸张包含小列表表示问题的集合,问题列表由问题字符串及其ID组成。在这里我的代码: 现在我没有错误地制作问题列表,但是当我尝试创建更大的列表时,Visual Studio无法将可变问题类型识别为类型,哪里错了?

  • 我有一个包含100列的数据框: 我有一个列名列表: 结构列表=['column4','column3','column2'] 预期架构: 目前,我正在对以下值进行硬编码: 是否有一种方法可以动态传递列表中的值?

  • 我不熟悉java和springboot。我正在尝试使用springboot创建一个CRUD应用程序。我使用MySQL存储数据。 员工模式- 员工资源库- 员工控制员- 上面的控制器在JSON对象数组表单中给出了结果,如下所示 但我需要以下表格的回复 非常感谢你的帮助。

  • 问题内容: 用Java创建链接列表的最佳方法是什么? 问题答案: 对于熟悉Java的开发人员来说,显而易见的解决方案是使用java.util中已经提供的LinkedList类。说,但是,由于某种原因,你想进行自己的实现。这是一个链接列表的快速示例,该链接列表在列表的开头插入新链接,从列表的开头删除并循环浏览列表以打印其中包含的链接。对此实现的增强包括使其成为双向链接列表,添加从中间或结尾插入和删除

  • 我想列个这样的单子。请帮帮我.谢了。

  • 问题内容: 如何在Django(Python)中像Google App Engine(Python)中的ListProperty属性一样创建ListField ?我的数据是这样的名单:3,4,5,6,7,8。 我必须定义什么属性,以及如何从中获取值? 问题答案: 使用你可以使用的类型来重新研究它。但这有一些假设,例如你不在列表中存储复杂类型的事实。出于这个原因,我曾经强制只将简单的内置类型作为成员