BigTable是Google设计的分布式数据存储系统,用来处理海量的数据的一种非关系型数据库。
BigTable是非关系的数据库,是一个稀疏的、分布式的、持久化存储的多维度排序Map。Bigtable的设计目的是可靠地处理PE级别的数据,并且能够部署在上千台机器上。Bigtable已经实现了下面几个目标:适应性广泛、可扩展、高性能和高可用性。
在很多方面,Bigtable和数据库很类似:它使用了很多数据库的实现策略。并行数据库和内存数据库已经具备可扩展性和高性能,但是Bigtable提供了一个和这些系统完全不同的借口。Bigtable不支持完整的关系数据模型;与之相反,Bigtable为客户提供了简单的数据模型,利用这个模型,客户可以动态控制数据的分布和格式(对Bigtable而言,数据是没有格式的,用数据库领域的术语说,就是数据没有schema,用户自己去定义schema),用户也可以自己推测底层存储数据的位置相关性。数据的下表是行和列的名称,名称可以是任意的字符串。Bigtable将存储的数据都是为字符串,但是Bigtable本身不去解析这些字符串,客户程序通常会把各种结构化或者半结构化的数据串行化到这些字符串里。通过仔细选择数据的模式,客户可以控制数据的位置相关性。最后,可以通过Bigtable的模式参数来控制数据是存放在内存中还是硬盘上。
特点:
1、适合大规模海量数据,PB级数据
2、分布式、并发数据处理,效率极高
3、易于扩展,支持动态伸缩
4、适用于廉价设备
5、适用于读操作,不适合写操作
6、不适用于传统关系数据库
Bigtable不是关系型数据库,但是却沿用了很多关系型数据库的术语,像table、row、column等。这容易让读者误入歧途,将其与关系型数据库的概念对应起来,从而难以理解。
本质上说,Bigtable是一个键值(key-value)映射。它是一个稀疏的、分布式的、持久化的、多维的排序映射。
Bigtable的键有三维,分别为行键(row key),列键(column key)和时间戳(timestamp)。行键和列键都是字符串,时间戳是64位整形;而值是一个字符串。可以用(row:string,column:string,time:int64)->string来表示一条键值记录
table{
// ...
"aaaaa" : { //一行
"A:foo" : { //一列
15 : "y", //一个版本
4 : "m"
},
"A:bar" : { //一列
15 : "d",
},
"B:" : { //一列
6 : "w"
3 : "o"
1 : "w"
}
},
// ...
}
本质上说Bigtable是一个键值映射。