当前位置:   article > 正文

Google三大论文(一)BigTable:一个分布式的结构化数据存储系统_bigtable是是一个( )、( )、( )、( )的、并以“键-值”(key-value)对形式

bigtable是是一个( )、( )、( )、( )的、并以“键-值”(key-value)对形式存储

最近硬着头皮读完了Google的三大论文,现在简单来聊一下自己关于BigTable的了解。

一、什么是BigTable

Bigtable是一个分布式的结构化数据存储系统,它被设计用来处理海量数据:通常是分布在数千台普通服 务器上的PB级的数据。Google的很多项目使用Bigtable存储数据,包括Web索引、Google Earth、 Google Finance。这些应用对Bigtable提出的要求差异非常大,无论是在数据量上(从URL到网页到卫 星图像)还是在响应速度上(从后端的批量处理到实时数据服务)。尽管应用需求差异很大,但是,针对 Google的这些产品,Bigtable还是成功的提供了一个灵活的、高性能的解决方案。

在很多方面,Bigtable很像一个数据库:它实现了很多数据库的策略。并行数据库和内存数据库已经实现了可扩展和高性能,但是Bigtable与这些系统相比提供了不同的接口。Bigtable不支持全关系型的数据模型,BigTable为客户端提供了一种简单的数据模型,客户端可以动态地控制数据的布局和格式,并且利用底层数据存储的局部性特征。Bigtable将数据统统看成无意义的字节串,客户端需要将结构化和非结构化数据串行化再存入Bigtable。

二、数据模型

论文中对BigTable是这样描述的:Bigtable是一个稀疏的、分布式的、持久化存储的多维度排序Map 。接下来对其关键字进行解释:

1、Map

      这个东东想必大家都会了解,无非就是一个key-value对,Bigtable的键有三维,分别是行键(row key)、列键(column key)和时间戳(timestamp),行键和列键都是字节串,时间戳是64位整型;而值是一个字节串。可以用 (row:string, column:string, time:int64)→string 来表示一条键值对记录。

2. 持久化

        Persistence(持久性)只是表示当你的程序结束或数据入口关闭后,你保存在map中的数据会被持久化,这个和其他的持久化存储方式没区别。

3. 分布式

       BigTable构建在分布式文件系统上,以便底层文件存储可以在独立机器阵列之间传播。BigTable可以运行在Google File System上。数据以类似的方式在多个参与节点中复制,以便数据在基于独立冗余磁盘阵列的系统中的光盘之间进行条带化。

4. 有序

       与大多数Map实现不同,在BigTable中,键值对以严格的字母顺序保存。 也就是说,键“aaaaa”的存储行应该在键“aaaab”的旁边,并且距离具有键“zzzzz”的存储行非常远。回到我们的map示例,排序后的版本如下:

  1. {
  2. "1" : "x",
  3. "aaaaa" : "y",
  4. "aaaab" : "world",
  5. "xyz" : "hello",
  6. "zzzzz" : "woot"
  7. }

因为这些系统往往是特别庞大的,并且数据是分布式存储,所以这种排序功能其实非常重要。具有类似键的行的空间优势确保了当一个操作必须扫描表格时,查询最感兴趣的内容将彼此靠近。需要注意的是,在HBase和BigTable中的value是不被排序的,只有key被排序。除了这个,其他的和普通的map实现是一样的。

5.多维度

       Bigtable不是关系型数据库,但是却沿用了很多关系型数据库的术语,像table(表)、row(行)、column(列)等。这容易让读者误入歧途,将其与关系型数据库的概念对应起来,从而难以理解论文。但如果跳脱出关系型数据库的思想,而把BigTable只是想成一个简单的三维表,那么就可以解释得通了。读到一篇介绍BigTable的文章,里面对数据模型的理解个人感觉非常到位,这里引用他的解释来进行介绍(原文地址https://blog.csdn.net/opennaive/article/details/7532589#):

  • 行键可以是任意字节串,通常有10-100字节。行的读写都是原子性的。Bigtabl
本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/428102
推荐阅读
相关标签
  

闽ICP备14008679号