【问题标题】:Creating composite COLUMNS (not keys) with CQL 3使用 CQL 3 创建复合列(不是键)
【发布时间】:2012-09-02 13:09:09
【问题描述】:

This article 讨论了 CQL 3 可用于在 Cassandra 1.1 中创建复合列的可能方式。它们只是想法。没有什么是官方的,Datastax 文档也没有涵盖这一点(只有复合键)。

据我了解,复合列是一组只有一个值的列。

如何使用 CQL 创建它们?

编辑

我将使用 C# 连接到 Cassandra。 CQL 看起来使用起来很简单,这就是我想使用它的原因。

【问题讨论】:

  • stackoverflow.com/questions/10950338/…同样的问题和答案是如果你使用多个主键,那么第一个用作分区键,其他代表复合列[指定主键中的所有列以模拟复合列的cli版本]
  • @Tamil 我知道。但是复合列可以是分开的。网上有很多这样的例子。可能希望有一个复合 PK 和多个复合列。
  • @Tamil,根据 The Paul 的说法,你是对的!
  • 很高兴您得出结论 :)
  • @Tamil 你显然在这方面工作的时间比我长。我将就如何帮助澄清他们的文档向 Datastax 提出建议。感谢您的帮助伙伴。

标签: c# cassandra composite cql


【解决方案1】:

我认为您混淆了几个概念。这很可能是 Datastax 文档的错误;如果您有什么好的建议可以在您有更好的图片后使其更清晰,我很乐意发送。

Datastax 文档中的“复合键”内容实际上是在谈论复合 Cassandra 列。造成混淆的原因是 CQL 3 中的行不直接映射到存储引擎行(使用 thrift 接口时使用的内容)。 CQL表上下文中的“复合键”仅表示由多个列组成的主键,由存储层的复合列实现

This article 是关于映射如何发生以及为什么 CQL 模型通常更容易思考的更好解释之一。

通过这种用法,第一个 CQL 列成为存储引擎分区键。

从 Cassandra 1.2(开发中)开始,还可以使用 CQL 创建复合存储引擎键,方法是在将存储在分区键中的 CQL 列周围的主键定义中放置额外的括号(请参阅CASSANDRA-4179 ),但这可能是例外,而不是规则。

【讨论】:

  • 谢谢你。现在说得通了。我很乐意为 Datastax 文档提供帮助。清晰的技术文档是我的专长之一。我确切地知道需要什么来明确这一点。如何联系您?
  • “创建复合存储引擎键”是指分区键吗?
  • 谁对这个答案投了反对票,为什么?如果您投反对票,请给出解释。
  • 不确定这是否能回答问题。引用的文档没有解释如何在表(不是列族)级别构建复合列,只解释复合键。
  • @ChrisGerken 我相信文档是问题所在,保罗的回答是正确的。例如,我回顾了 eBay 关于 Cassandra (ebaytechblog.com/2012/07/16/…) 的博客,Paul 所说的内容具有技术意义(现在我了解了这些术语的上下文)。我注意到 Cassandra 的工作方式存在巨大的混乱。其他人在 SO 上错误地回答了我。再次......文档有问题。
【解决方案2】:

使用 Cassandra,您可以按行存储数据。每行都有一个行键和一些列。每列都有一个名称和一个值。通常,列名和值(以及行键)是单个值(int、long、UTF8 等),但您可以在行键、列名和列值中使用复合值。复合值只是一些以某种方式序列化在一起的值。

随着时间的推移,已经开发了许多特定于语言的 API。这些 API 从我上面描述的理解开始,并相应地提供对列族的访问。 Hector,Java 客户端 API,是我最熟悉的,但还有其他的。

CQL 是作为一种以 SQL/JDBC 方式使用 Cassandra 表的方法而引入的。起初并非所有 Cassandra 功能都通过 CQL 得到支持,尽管随着时间的推移 CQL 变得越来越实用。

我不怀疑您需要复合列名称和值(我相信这就是您的要求)。问题是 CQL 尚未发展(据我了解)到该级别的本机支持。我不知道它是否会发生。

我建议您完成所需列族模式的定义,并在必要时使用复合值。完成后,查看可用于访问 Cassandra 列族的各种 API,然后选择最能支持所需架构的 API。

你还没有说你使用的是什么语言。如果您使用 Java 进行编码,那么我会推荐 Hector 而不是 CQL。

【讨论】:

  • 它是 C#。好的,我会等到 1.2 发布,看看是否有更新。否则我必须至少在表创建过程中使用其他东西。
  • 不准确;从 1.1 开始的 CQL 可以以比陈旧的 thrift 接口更强大、更简单的方式创建和处理复合键。从 1.2 开始,thrift 和 CQL 之间的区别正在扩大。毫无疑问,您应该将 CQL 3 用于任何新的 Cassandra 项目。
  • 我在 CQL 中看不到任何允许您在 CQL 表级别定义复合列名称或复合列值的内容。您可以定义复合行键,但这不是问题。
  • 问题是如何在 Cassandra 中创建复合列,而不是如何在 CQL 表级别定义它们。在 CQL 表级别创建复合列没有任何充分的理由; CQL 3 的全部意图是在高层次上转移对这种抽象的需求。
  • 那么我们将不得不对问题的解释产生分歧。用户不应该关心内部表示。不过,我很想知道问题的重新编辑是如何进行的。
【解决方案3】:

您确定要使用 CQL 创建它们吗?你的用例是什么?

【讨论】:

    猜你喜欢
    • 2012-08-31
    • 2015-01-08
    • 1970-01-01
    • 2015-09-27
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    • 2016-09-12
    • 2016-03-22
    相关资源
    最近更新 更多