nosql – 列系列概念和数据模型

前端之家收集整理的这篇文章主要介绍了nosql – 列系列概念和数据模型前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在调查不同类型的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"
    }
  }
}

第二种模式

其他站点将列族描述为行内的一组相关列[4].以前的例子的数据,以这种方式建模:

{
  "codinghorror":
  {
    "USER": { "name": "Jeff","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",Second Edition"
    }
  }
}

第一个模型背后的一个可能的原因是,并不是所有的列系列都具有像USER和BOOKMARK这样的关系.这意味着并非所有的列系列都包含相同的键.从这个角度来看,将列家族置于外层是比较自然的.

名称“列族”表示一组列.这正是在第二个模型中列列如何呈现.

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

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

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

更新

我已经在第二个模型中解决了我的论文中的数据模型.我仍然对如何将列家族商店的数据模型解释给其他人感兴趣.

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

一个关键点是,按照定义,行键必须在列系列中是唯一的,但可以在其他列系列中重新使用.因此,您可以在不同的ColumnFamily中存储与相同键无关的数据.

在Cassandra中这是重要的,因为特定列系列中的数据存储在磁盘上的相同文件中 – 因此将同一列ColumnFamily中可能一起检索的数据项放在一起更为有效.这部分是一个实际的速度关注,也是将您的数据组织成一个明确的模式的问题.这涉及到您的第二个定义 – 可以将所有关于特定键的数据视为“行”,而是由Column Family进行分区.但是,在Cassandra中,它不是一个单行,因为一个ColumnFamily中的数据可以独立于其他ColumnFamily中相同行键的数据进行更改.

猜你在找的NoSQL相关文章