【问题标题】:Creating column family or table in Cassandra while working Datastax API(which uses new Binary protocol)在使用 Datastax API(使用新的二进制协议)时在 Cassandra 中创建列族或表
【发布时间】:2013-04-12 08:07:34
【问题描述】:

我已经开始使用 Cassandra 数据库。我打算使用Datastax API 来更新/读取/读取 cassandra 数据库。我对这个 Datastax API(它使用新的二进制协议)完全陌生,我也找不到很多文档,其中有一些适当的例子。

当我使用 Netflix 客户端(Astyanax 客户端)使用 Cassandra CLI 时,我创建了这样的列族-

create column family profile
with key_validation_class = 'UTF8Type'
and comparator = 'UTF8Type'
and default_validation_class = 'UTF8Type'
and column_metadata = [
  {column_name : crd, validation_class : 'DateType'}
  {column_name : lmd, validation_class : 'DateType'}
  {column_name : account, validation_class : 'UTF8Type'}
  {column_name : advertising, validation_class : 'UTF8Type'}
  {column_name : behavior, validation_class : 'UTF8Type'}
  {column_name : info, validation_class : 'UTF8Type'}
  ];

现在我尝试使用 Datastax API 做同样的事情。因此,要开始使用 Datastax API,我是否需要以上述不同的方式创建列族?或者,只要我尝试使用 Datastax API 将数据插入 Cassandra 数据库,上面的列家族就可以正常工作。

如果上面的列族不起作用,那么-

首先,我创建了如下所示的 KEYSPACE-

CREATE KEYSPACE USERS WITH strategy_class = 'SimpleStrategy' AND strategy_options:replication_factor = '1';

现在我很困惑如何创建表?我不确定哪种方法是正确的?

我应该这样创作吗?

CREATE TABLE profile ( id varchar, account varchar, advertising varchar, behavior varchar, info varchar, PRIMARY KEY (id) );

还是我应该这样创作?

CREATE COLUMN FAMILY profile ( id varchar, account varchar, advertising varchar, behavior varchar, info varchar, PRIMARY KEY (id) );

还有怎么加-

crd as DateType
lmd as DateType

在使用 Datastax API 时在上面的表或列族中?

任何帮助将不胜感激。

【问题讨论】:

  • 你所说的datastax API是什么意思??? OpsCenter 还是 datastax java-driver?
  • @abhi,Datastax java-driver.

标签: cassandra command-line-interface cql cql3


【解决方案1】:

无论您使用关键字 TABLE 还是 COLUMNFAMILY,两者都是相同的(同义词)。我猜想关键字 TABLE 是在 CQL3 中引入的。所以你可以在你的陈述中使用任何一个。

第二个问题,添加DateType,你应该使用时间戳。

CREATE COLUMNFAMILY sample (rowkey text, ts timestamp, PRIMARY KEY(rowkey));

INSERT INTO sample (rowkey, ts ) VALUES ( '1','1366354711797');
// ts value is basically the System.currentTimeMillis(), I mean a long value

【讨论】:

  • 谢谢。 varchar 和 text 有什么区别?我的大部分列都需要字符串数据类型。那么在这种情况下我应该使用 varchar 还是 text 呢?
  • 酷。谢谢。关于我的另一个 question 的任何想法
  • 可能会晚几个小时。现在有点忙。不用担心,如果它在我的范围内,我肯定会回答。无论如何,这个答案都不能解决您的问题,因为我认为状态为未接受。
【解决方案2】:

在 cassandra 中键空间或数据库是相同的,就像明智的列族和表一样。

Cassandra在语法上更像Mysql,支持hql(类似于sql)

cassandra 中的表可以这样创建:

CREATE TABLE users (
user_name varchar,
password varchar,
gender varchar,
session_token varchar,
state varchar,
birth_year bigint,
PRIMARY KEY (user_name));

更多信息在这里:Cassandra Tutorials

【讨论】:

  • Cassandra 教程的链接无效:(
【解决方案3】:

@neel4soft - 有了 Cassandra,事情就变得简单了。因此,为了让人们更轻松,正在稳步进行重命名过程,以使从 SQL 到 CQL 的过渡对新手来说更容易。然而,CQL 不应该被认为是 SQL 的亲戚,而应该是它母亲身边的第三个堂兄,换句话说,不是近亲。因此,将其与 MySQL 进行比较是对其功能的不当形象。

【讨论】:

    【解决方案4】:

    使用 cassandra-cli 和 cqlsh 创建表/列族时几乎没有区别。

    其中之一是,如果我们使用 cassandra-cli 创建表,它将以紧凑的存储格式创建,无法进一步更改。

    在cqlsh中,除非我们在创建表/列族时特别提到,否则不会以这种格式创建。

    【讨论】:

      【解决方案5】:

      列族是有序列的集合,它是行的容器,它存储在 Cassandra Keyspace 中,我们可以在一个 Keyspace 中创建多个列族。

      列族也称为 RDBMS 表,但列族不等于表。

      每个列族都存储在磁盘上的单独文件中。每行都有一个唯一的键,称为行键。 Cassandra 也有 Super Column Family 的概念,它允许通过保存一组不同的列进行嵌套访问。

      在Column Family中,我们可以设置数据的默认排序,可以做压缩表,可以使用compact存储,可以设置数据的过期时间。

      【讨论】:

      • 它与问题有什么关系?
      猜你喜欢
      • 2013-04-12
      • 1970-01-01
      • 2013-12-06
      • 2020-07-24
      • 2012-06-07
      • 2014-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多