我正在研究不同类型的 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"
}
}
}
第一个模型背后的一个可能理由是,并非所有列族都具有 likeUSER
和BOOKMARK
do 的关系。这意味着并非所有列族都包含相同的键。从这个角度来看,将列族放置在外层感觉更自然。
“列族”这个名称意味着一组列。这正是第二个模型中列族的呈现方式。
两种模型都是数据的有效表示。我意识到这些表示仅用于将数据传达给人类;应用程序不会以这种方式“思考”数据。
问题
列族的“标准”定义是什么?它是行的集合,还是一行中的一组相关列?
我必须写一篇关于这个主题的论文,所以我也对人们通常如何向其他人解释“列族”概念感兴趣。这两种模式似乎相互矛盾。我想使用“正确”或普遍接受的模型来描述列族商店。
更新
我已经决定使用第二种模型来解释我论文中的数据模型。我仍然对您如何向其他人解释列族商店的数据模型感兴趣。