gpt4 book ai didi

nosql - 列族概念和数据模型

转载 作者:行者123 更新时间:2023-12-02 12:51:16 24 4
gpt4 key购买 nike

我正在研究不同类型的 NoSQL 数据库类型,并尝试了解列族存储的数据模型,例如 Bigtable、HBase 和 Cassandra。

第一个模型

有些人将列族描述为行的集合,其中每行包含列[ 1 ], [ 2 ]。此模型的示例(列族大写):

{
"USER":
{
"codinghorror": { "name": "Jeff", "blog": "http://codinghorror.com/" },
"jonskeet": { "name": "Jon Skeet", "email": "jskeet@site.com" }
},
"BOOKMARK":
{
"codinghorror":
{
"http://codinghorror.com/": "My awesome blog",
"http://unicorns.com/": "Weaponized ponies"
},
"jonskeet":
{
"http://msmvps.com/blogs/jon_skeet/": "Coding Blog",
"http://manning.com/skeet2/": "C# in Depth, Second Edition"
}
}
}

第二个模型

其他网站将列族描述为一行中的一组相关列 [ 3 ], [ 4 ]。上一个示例中的数据以这种方式建模:

{
"codinghorror":
{
"USER": { "name": "Jeff", "blog": "http://codinghorror.com/" },
"BOOKMARK":
{
"http://codinghorror.com/": "My awesome blog",
"http://unicorns.com/": "Weaponized ponies"
}
},
"jonskeet":
{
"USER": { "name": "Jon Skeet", "email": "jskeet@site.com" },
"BOOKMARK":
{
"http://msmvps.com/blogs/jon_skeet/": "Coding Blog",
"http://manning.com/skeet2/": "C# in Depth, Second Edition"
}
}
}

第一个模型背后的一个可能的基本原理是,并非所有列族都具有像 USERBOOKMARK 那样的关系。这意味着并非所有列族都包含相同的键。从这个角度来看,将列族放置在外层感觉更自然。

名称“列族”意味着一组列。这正是第二个模型中列族的呈现方式。

这两个模型都是数据的有效表示。我意识到这些表示只是为了向人类传达数据;应用程序不会以这种方式“思考”数据。

问题

列族的“标准”定义是什么?它是行的集合,还是行中的一组相关列?

我必须写一篇关于这个主题的论文,所以我也对人们通常如何向其他人解释“列族”概念感兴趣。这两种模型似乎互相矛盾。我想使用“正确”或普遍接受的模型来描述列族存储。

<小时/>

更新

我已经选择了第二种模型来解释我论文中的数据模型。我仍然对您如何向其他人解释列族存储的数据模型感兴趣。

最佳答案

我认为 Cassandra 数据库遵循您的第一个模型。 ColumnFamily 是行的集合,它可以以稀疏方式包含任何列(因此,如果需要,每行可以具有不同的列名称集合)。一行中允许的列数几乎是无限的(Cassandra v0.7 中为 20 亿列)。

一个关键点是,根据定义,行键在列族中必须是唯一的 - 但可以在其他列族中重复使用。因此,您可以将同一键的不相关数据存储在不同的 ColumnFamilies 中。

在 Cassandra 中,这很重要,因为特定列族中的数据存储在磁盘上的相同文件中 - 因此将可能一起检索的数据项放在同一个 ColumnFamily 中会更有效。这在一定程度上是一个实际的速度问题,但也是一个将数据组织成清晰模式的问题。这涉及到您的第二个定义 - 人们可能会将有关特定键的所有数据视为“行”,但按列族进行分区。但是,在 Cassandra 中,它并不是真正的单行,因为对于同一行键,一个 ColumnFamily 中的数据可以独立于其他 ColumnFamily 中的数据进行更改。

关于nosql - 列族概念和数据模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3245267/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com