Cassandra中的一行与key->值相同,其中value是超级列

时间:2018-02-22 22:23:03

标签: cassandra

我正在尝试创建Cassandra数据模型的心智模型。到目前为止,我得到的是数据的基本单位是一列(名称,值,时间戳)。超级列可以包含多个列(它具有名称,其值是映射)。 ColumnFamily的一个例子(我想它包含几个数据或行的条目)是

UserProfile = { // this is a ColumnFamily
phatduckk: {   // this is the key to this Row inside the CF
        username: "phatduckk", //column
        email: "phatduckk@example.com", //column
        phone: "(900) 976-6666"//column
    }, // end row
ieure: {   // another row in same CF. this is the key to another row in the CF

        username: "ieure",
        email: "ieure@example.com",
        phone: "(888) 555-1212"
        age: "66", // a differnet column than previous one.
        gender: "undecided" // a differnet column than previous one.
    },
}

问题1-对我而言,CF中的一行似乎只是一个键值对,其中值是一个超级列我是否正确?

问题2-(行键的)值是否可以是几个超级列的映射?我想的是我想创建一个包含用户名和地址的行,然后该行可以是键(用户ID)和值映射到两个超级列,C1(名字,姓氏)和C2(街道,国家)

1 个答案:

答案 0 :(得分:1)

我认为你试图绕过重新命名的(非常)旧的命名法,以减少它的混乱。

Table

{
  partition key: {          // partition
    clustering: {           // row
       key: value           // column
       key2: value          // column
       key3: value          // column
    }
    clustering2: {          // row
       key: value           // column
       ...
    }
    ...
  }
  ...
}

分区按密钥的murmur3哈希排序,用于确定哪些主机是副本。聚类键在它们中排序,并且行中的字段是固定的模式,每个字段都有一列。

使用超级列族,列族,超列,列和行命名只会让您在阅读过去6年中出现的任何内容时感到困惑。 Thrift甚至已被弃用,因为它的价值所以不计划你的应用程序。

提出问题

  

问题1-对我而言,CF中的一行似乎只是一个关键值   对,其中值是超级列我是否正确?

是的,但超级列按其键排序。如果phatduckk是使用降序的文本类型,则ieure将在ph之后。这样,您可以在pkgit push之间读取一些名称,并将它们从磁盘中拉出(在时间戳上进行聚类并查找数据范围时更有用)。

  

问题2-(行键的)值是否可以是几个超级的映射   列?我在想的是说我想用User创建一行   名称和地址然后该行可以是键(用户ID)和值映射到   两个超级列,C1(名字,姓氏)和C2(街道,国家)

你应该看看一些较新的文档。我认为你有正确的想法,但很难与C *现在的工作方式完全联系起来。尝试从

开始

https://academy.datastax.com/resources/ds101-introduction-cassandra https://academy.datastax.com/resources/ds220-data-modeling

作为一些做得很好解释的免费课程。