我正在尝试创建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(街道,国家)
答案 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
之后。这样,您可以在pk
和git push
之间读取一些名称,并将它们从磁盘中拉出(在时间戳上进行聚类并查找数据范围时更有用)。
问题2-(行键的)值是否可以是几个超级的映射 列?我在想的是说我想用User创建一行 名称和地址然后该行可以是键(用户ID)和值映射到 两个超级列,C1(名字,姓氏)和C2(街道,国家)
你应该看看一些较新的文档。我认为你有正确的想法,但很难与C *现在的工作方式完全联系起来。尝试从
开始https://academy.datastax.com/resources/ds101-introduction-cassandra https://academy.datastax.com/resources/ds220-data-modeling
作为一些做得很好解释的免费课程。