列数据库作为键/值对的嵌套映射

尽管将列数据库视为具有特殊特点的表很简单了解,但它会造成混乱。

一般,像列和表这样的术语会当即让人联想到联系数据库的主意,并引导您这样规划架构。

这可能是有害的,并且一般会导致开发人员重新运用联系存储等列数据库。这当然是每个人都需求防止的一个设计陷阱。

永远记住,为工作运用正确的工具比工具本身更重要。

假如RDBMS是你需求的,那么就运用它。可是,假如您运用列数据库来扩展巨大的数据存储,则无需任何 RDBMS 包袱即可运用它。

一般,将列数据库视为一组嵌套映射更简单。映射或哈希映射(也称为相关数组)是键对及其相应的值。键必须是仅有的以防止抵触,值一般可所以任何字节数组。某些映射只能保存字符串键和值,但大多数列数据库没有此类约束。

毫不古怪,Google Bigtable是当前一代列数据库的开始创意来源,它被正式定义为稀疏、分布式、耐久、多维和排序的地图。

“Bigtable: A Distributed Storage System for Structured Data”,Fay Chang等人。

“数据模型”中对Bigtable的定义如下:

“Bigtable 是一个稀疏的、分布式的、耐久的多维排序地图。映射由行键、列键和时刻戳编制索引;映射中的每个值都是一个未解释的字节数组。

将运转的示例视为多维嵌套映射,您可以以类似 JSON 的表示方式创立前两级键,如下所示:

{"row_key_1" : {
    "name" : [
    ...
    },
"location" : {
    ...
},
"preferences " :{
    ...
},
"row_key_2" : {
    "name" :{
        ...
    },
"location" : {
    ...
},
"preferences" :{
    ...
},
"row_key_3" : {
    ...
}

第一级键是仅有标识列数据库中记录的行键。

第二级键是列系列标识符。

前面定义了三个列族 – 名称、位置和首选项。这三个显示为二级键。依照形式,您可能现已猜到第三级键是列标识符。每行在列族中可能具有一组不同的列,因而第三级的键在多维映射中的任何两个数据点之间可能会有所不同。加上第三级,是这样的:

{
   "row_key_1" : {
      "name" : {
         "first_name" : "Jolly", 
         "last_name" : "Goodfellow"
         }
      }
   },
"location" : {
   "zip": "94301" 
   },
"preferences" : { "d/r" : "D"}
"row_key_2" : { "name" : {
            "first_name" : "very",
            "middle_name" : "Happy",
            "last_name": "Guy" },
"location" : {
   "zip" : "10001"
   },
"preferences" : {
   "v/nv": "V"
   }
   }

最后,将版别元素添加到其中,可以扩展第三级以包括带时刻戳的版别。为了说明这一点,该示例运用恣意整数来表示时刻戳驱动的版别,然后,此行如下所示:

{"row_key_1" : "name" : {
	"first_name" : { 1: "Jolly" },
	"last_name" : { 1: "Goodfellow"}
},
"location" : { "zip": { 1 : "94301"}
"preferences" : { "d/r" : {
	1: "D", 
	5: "R"}
	}
}
...
}

这为面向列的数据库的面向映射的图片提供了线索

安置网络表

假如没有存储已爬网网页副本的所谓 Webtable 的典型示例,列数据库的讨论就不完整。

此类表除了存储与页面相关的特点外,还存储网页的内容。

此类特点可所以引用页面的定位点,也可所以与内容相关的 MIME 类型。

谷歌在其关于Bigtable的研讨论文中初次介绍了这个例子。

Webtable 运用反向网页 URL 作为 Web 的行键页。

因而,URL www.example.com 意味着行键 com. example.www。行键构成了面向列的数据库中数据行顺序的条件。因而,与 example.com 的两个子域相关的行,例如 www。example.com 和新闻 .example.com,当反向 URL 用作行键时,互相接近存储。这使得查询与域相关的所有内容变得愈加简单。

一般,内容、定位点和 MIME 充当列系列,这会导致一个类似于图下所示的基于列的表的概念模型

列数据库作为键/值对的嵌套映射

许多流行的 Bigtable 开源完成在其文档中都以 Webtable 为例。


本文正在参与「金石方案 . 瓜分6万现金大奖」