-
BigTable知识点随记
2019-05-29 16:01:46BigTable没有Schema用户需要自定义 数据的下标是行和列的名字 ...列族:列关键字组成的集合叫做“列族”,列族在使用之前必须先创建,然后才能在列族中任何的列关键字下存放数据,一张表的列族不能太多(最多几百个...- BigTable没有Schema用户需要自定义
- 数据的下标是行和列的名字
- BigTable是一个稀疏的分布式的持久化存储的多维序列Map,Map(row:string, column:string,time:int64)
- 行:同一行关键字的读或者写都是原子的
- 列族:列关键字组成的集合叫做“列族”,列族在使用之前必须先创建,然后才能在列族中任何的列关键字下存放数据,一张表的列族不能太多(最多几百个)
- 时间戳:在BigTable中每一个数据项都可以包含同一份数据的不同版本,BigTable时间戳类型为64位整形精确到毫秒,有参数可以设置,只保存最后n个版本的数据
- BigTable支持单行事物处理,目前不支持通用的跨行事物处理
- BigTable内部存储的数据文件是Google SSTable格式的,SSTable是一个持久化排序的,不可更改的Map结构,Map是由K,V组成并且都是任意的Byte串,通常每个块大小是64KB,大小可配置
- SSTable定位数据块:
- 打开SSTable的时候,索引被加载到内存
- 每次查找都可以通过一次磁盘搜多完成(首先使用二分查找方法在内存中的索引里找到数据块的位置,然后再从硬盘读取的相应的数据块)
- BigTable依赖一个高可用的序列化的分布式锁服务组件叫做Chubby,Chubby由5个活跃副本,其中一个为Master,当有副本失效时使用Paxos算法来保证副本的一致性
- BigTable使用Chubby完成以下几个任务
- 确保在任何给定的时间内最多只有一个活动的Master副本
- 存储BigTable数据的有引导指令的位置
- 查找Tablet服务器,以及在Tablet服务器失效时进行善后
- 存储BigTable模式信息(每张表的列族信息)
- 以及存储访问控制列表
-
google bigtable 读书笔记
2011-10-29 17:26:591.一个行可以分成多个tablet(应该是一个...2.列关键字组成的集合叫做“列族“,列族是访问控制的基本单位。一张表中的列族不能太多(最多几百个),并且列族在运行期间很少改变。与之相对应的,一 张表可以有无限...1.一个行可以分成多个tablet(应该是一个tablet包含了相关的多个行记录),Tablet是数据分布和负载均衡调整的最小单位。这样做的结果是,当操作只读取行中很少几
列的数据时效率很高,通常只需要很少几次机器间的通信即可完成。
2.列关键字组成的集合叫做“列族“,列族是访问控制的基本单位。一张表中的列族不能太多(最多几百个),并且列族在运行期间很少改变。与之相对应的,一
张表可以有无限多个列。
3.BigTable内部存储数据的文件是Google SSTable格式的。SSTable是一个持久化的、排序的、不可更改的
Map结构,而Map是一个key-value映射的数据结构,key和value的值都是任意的Byte串。可以对
SSTable进行如下的操作:查询与一个key值相关的value,或者遍历某个key值范围内的所有的keyvalue对。也就是sstable可以进行range 操作?
4.相较于mysql,bigtable可以让用户定制一些数据存储和分布方式,从而提高性能。 -
Spark得到两个RDD值集合有包含关系的映射
2018-10-22 23:49:55问题场景: 有两个RDD的数据集A和B以及...以第一列所组成的元素作为关键字,第二列作为值的集合。现要求映射对,使得在该映射关系下,B的值集合可以覆盖A的值几何的元素。如上结果应该为:(b, d)。因为A中以b为键...问题场景
有两个RDD的数据集A和B(暂且分别称为新、老RDD)以及一组关于这两个RDD数据的映射关系,如下图所示:
以及A和B的各元素映射关系的RDD,如下图所示:
上述映射关系,代表元素a
和c
同义,若为url,则表示指向同一个页面,元素b
和d
同理。以第一列所组成的元素作为关键字,第二列作为值的集合。现要求映射对,使得在该映射关系下,B的值集合可以覆盖A的值几何的元素。如上结果应该为:
(b, d)
。因为A中以b
为键的集合为B中以d
为键的值集合的子集。
受到单机编程的思维定势,使用HashMap
实现,虽然可以运行,但是太慢啦啦,所以改用另一种思路,可以充分利用分布式的优点。解决方案
val data = sc.textFile("/user/wuzhongqiang/clean_data/baidubaike_source.20180801/").cache() //1.以左边的为key,进行分组,统计每一个key所对应的值集合 val groupData = data.map(item => { val key = item._1 val value = item._1 (key, value) }).groupByKey //2. 读取链接映射文件至map //(AKey, BKey) val projectionMap = sc.textFile("hdfs://projection").cache() // (AKey, BKey) val aData = projectionMap.map(item => (item._1, item._2)) // (BKey, AKey) val bData = projectionMap.map(item => (item._2, item._1)) // (AKey, (BKey, AValueSet)) val aKeyJoinData = aData.join(groupData) // (BKey, (AKey, BValueSet)) var bKeyJoinData = bData.join(groupData) // 交换新老键的位置,为后面的join做准备 (AKey, (BKey, BValueSet) ) bKeyJoinData = nbKeyJoinData.map(item => {(item._2._1, (item._1, item._2._2))}) //结果形式为(AKey, ((BKey, AValueSet), (BKey, BValueSet))) val aBData = aKeyJoinData.join(bKeyJoinData) aKeyJoinData.take(1).foreach(println) // oldUrl -> newUrl val resultMap = aBData.map(item => { val aValueSet = item._2._1._2.to[Set] val bValueAttrSet = item._2._2._2.to[Set] val subtractSet = aValueSet -- bValueAttrSet //若新的URL属性可以完全覆盖旧的url属性, 即 oldAttrSet与newAttrSet的差集为空 if(subtractSet.isEmpty) (item._1, item._2._1._1) else ("", "") }).filter(_._1 != "") resultMap.take(1).foreach(println)
-
【算法】基数排序——经典扑克排序,二维数组按列排序的出处
2014-04-28 19:11:22《桶排序 》中我们能够看到,数据值的范围越大,可能需要桶的个数也就越多,空间代价也就越高。对于上亿单位的关键字,桶排序是很不实用的。...一张牌有两个关键字组成:花色(桃 (1) 首先按照花色对所有《桶排序 》中我们能够看到,数据值的范围越大,可能需要桶的个数也就越多,空间代价也就越高。对于上亿单位的关键字,桶排序是很不实用的。基数排序是对桶排序的一种改进,这种改进是让“桶排序”适合于更大的元素值集合的情况,而不是提高性能。
多关键字排序问题(类似于字典序):
我们先看看扑克牌的例子。一张牌有两个关键字组成:花色(桃<心<梅<方)+面值(2<3<4<...<A)。假如一张牌的大小首先被花色决定,同花色的牌有数字决定的话。我们就有两种算法来解决这个问题。
(1) 首先按照花色对所有牌进行稳定排序,这样就可以将所有牌分成4组。然后同组的牌(同花色)再按照面值进行排序。
(2) 首先按照面值对所有牌进行稳定排序,然后按照花色再次对所有牌进行稳定排序。
显然,第一种方法需要将序列分割成几个子序列。而第二种方法则完全不需要。因此我们采用从次关键字排序开始的方法。
基数排序
上面的问题是多关键字的排序,但单关键字也仍然可以使用这种方式。
比如字符串“abcd” “aesc” "dwsc" "rews"就可以把每个字符看成一个关键字。另外还有整数 425、321、235、432也可以每个位上的数字为一个关键字。
基数排序的思想就是将待排数据中的每组关键字依次进行桶分配。比如下面的待排序列:
278、109、063、930、589、184、505、269、008、083
我们将每个数值的个位,十位,百位分成三个关键字: 278 -> k1(个位)=8 ,k2(十位)=7 ,k3=(百位)=2。
然后从最低位个位开始(从最次关键字开始),对所有数据的k1关键字进行桶分配(因为,每个数字都是 0-9的,因此桶大小为10),再依次输出桶中的数据得到下面的序列。
930、063、083、184、505、278、008、109、589、269
再对上面的序列接着进行针对k2的桶分配,输出序列为:
505、008、109、930、063、269、278、083、184、589
最后针对k3的桶分配,输出序列为:
008、063、083、109、184、269、278、505、589、930
性能分析
很明显,基数排序的性能比桶排序要略差。每一次关键字的桶分配都需要O(N)的时间复杂度,而且分配之后得到新的关键字序列又需要O(N)的时间复杂度。假如待排数据可以分为d个关键字,则基数排序的时间复杂度将是O(d*2N) ,当然d要远远小于N,因此基本上还是线性级别的。基数排序的空间复杂度为O(N+M),其中M为桶的数量。一般来说N>>M,因此额外空间需要大概N个左右。
但是,对比桶排序,基数排序每次需要的桶的数量并不多。而且基数排序几乎不需要任何“比较”操作,而桶排序在桶相对较少的情况下,桶内多个数据必须进行基于比较操作的排序。因此,在实际应用中,基数排序的应用范围更加广泛。
-
第3章表的创建和操作
2020-05-29 10:23:41组成表的各列的名称及数据类型,统称为表结构。 记录。每个表包含了若干行数据,它们是表的“值”,表中的一行称为一个记录。因此表是记录的有限集合。 字段。每个记录由若干个数据项构成,将构成记录的每个数据段... -
数据库的基本操作 Oracle
2020-05-11 16:06:21文章目录第三章 - 关系数据库标准语言 SQL3.1 SQL 概述3.1.1 结构化查询语言 SQL3.1.2 SQL 体系结构3.1.3 SQL 的组成3.1.3 SQL 的特点3.2 数据定义3.2.1 基本表的操作1. 定义基本表2. 修改基本表3. 删除基本表3.2.2 ... -
PostgreSQL的 SQL语言基本特性
2011-03-16 17:01:00这里的集群与“集群运算”里的集群的含义是不同的,它只表示多个数据库的集合。一个PostgreSQL实例(PostgreSQL数据库进程加上它们占用共享内存)只能管理一个数据库集群。 <br />2.SQL语言中关键字和没有用双... -
alin的学习之路(数据库篇:四)(oracle数据库表的操作,oracle其他对象:视图、索引、序列、同义词)
2020-08-17 21:40:43数据库表是基本的数据存储集合,由行和列组成。 数据库的表要注意命名规则: 必须以字母开头 必须在 1–30 个字符之间 允许包含的字符: A–Z, a–z, 0–9, _, $, 和 # 不能和用户定义的其他对象(表)重名 不能是... -
JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)
2013-05-07 17:18:0711.1 插曲:类的组成部分的名字 291 11.2 类中的修饰符 292 11.2.1 无修饰符类 292 11.2.2 类的可见性 293 11.2.3 final——让类不可被继承 295 11.2.4 理解final关键字 296 11.2.5 总结:类的修饰符 297 ... -
Java学习笔记93. 映射 Map
2018-03-15 22:00:12映射 Map 是一种双列的集合。它由Key 关键字, 和Value值,组成。给出一个关键字,就能访问到值。它们是一一对应的。这与数学上的映射的意义是一样的。下面用1个例子说明一下Map接口的简单用法Hash 哈希,代表哈希值... -
Java入门1·2·3:一个老鸟的Java学习心得.PART2(共3个)
2013-05-07 17:19:1411.1 插曲:类的组成部分的名字 291 11.2 类中的修饰符 292 11.2.1 无修饰符类 292 11.2.2 类的可见性 293 11.2.3 final——让类不可被继承 295 11.2.4 理解final关键字 296 11.2.5 总结:类的修饰符 297 ... -
Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)
2013-05-07 17:20:1211.1 插曲:类的组成部分的名字 291 11.2 类中的修饰符 292 11.2.1 无修饰符类 292 11.2.2 类的可见性 293 11.2.3 final——让类不可被继承 295 11.2.4 理解final关键字 296 11.2.5 总结:类的修饰符 297 ... -
数据库视频-入门知识
2019-11-09 16:22:55数据库概念:数据存放的地方,是有组织并可共享的数据集合,具有较小的冗余度,较高的数据独立性和易扩展性,可谓不同的用户使用。 数据模型:层次模型,从上往下 网状模型 关系模型 关系数据库:是由数据表和... -
MySQL知识点(部分、考试用)
2020-10-15 18:58:021、数据库表是一系列二维数组的集合,用来存储数据和操作数据的逻辑结构,它由纵向的列和横向的行组成,行被称为记录,是组织数据的单位;列被称为字段,每一列表示记录的一个属性。 2、主键主要用于唯一地标识表中... -
SQL基础
2014-05-08 15:45:20列是存储在表中的一块数据,行是一组能够描述某个事物的列的集合。一些语法约定:SQL关键字建议大写(本身不区分大小写),便于区分关键字和名称;数据库、表、列名称不能包含空格,可以使用下划线,首字母不建议... -
SQL与关系数据库理论
2011-10-22 19:51:00最初模式的一个回顾 最初的模型有3个主要的组成部分:结构,完整性和操作。 结构特性 关系是定义在类型上(也可以称之为域),一个类型基本上是值的概念池,从这个池中...换句话说,它是一个属性的集合,但常常不只是... -
mysql语句概览
2018-06-27 17:47:00数据库database:以某种有组织的方式存储的数据集合 表table:某种特定类型数据的结构化清单 模式schema:关于数据库和表的布局及特性的信息 列column:表中的一个...关键字key word:作为mysql语言组成部分的保... -
mysql知识点概览_mysql语句概览
2021-02-02 15:20:03数据库database:以某种有组织的方式存储的数据集合表table:某种特定类型数据的结构化清单模式schema...一列(或一组列),其值能够唯一区分表中每个行关键字key word:作为mysql语言组成部分的保留字无值no value:N... -
SQL增删改查基础语法学习笔记
2020-07-23 00:12:35表是相关数据项的集合,它由行和列组成。 SQL常用的关键字 SELECT -从数据中查询数据 UPDATE-更新数据库中的数据 DELETE-删除数据库中的数据 INSERT INTO-想数据库插入新数据 CREATE DATABASE-创建新的数据 ALTER ... -
c语言 词法编译器
2013-06-20 12:30:09(2) 关键字(从文法上看,关键字集合是标识符集合的子集合):if,else,for,while,do,int; (3) 常数:由0~9数字组成; (4) 运算符:+、-、*、/等 (5) 分界符,(、)、,、;等单分界符;还有双字符... -
LINGO软件的学习
2009-08-08 22:36:50如果限制派生集的成员,使它成为父集成员所有组合构成的集合的一个子集,这样的派生集成为稀疏集。同原始集一样,派生集成员的声明也可以放在数据部分。一个派生集的成员列表有两种方式生成:①显式罗列;②设置成员... -
结构体
2019-04-29 14:45:37关键字struct用于引入结构说明,由包含在花括号内一些列说明组成。其后跟的名字是可选的,结构标记用于命名结构。 一个结构说明定义一种类型,如 struct {....} x,y,z; 结构体说明之后没有定义变量表,则不... -
作业14-数据库
2017-12-23 20:54:00定义:按照某种规则组织起来的数据的集合. 关系型数据库:使用表来存储数据;每行是一条记录;一行由若干列组成. 主键:可以唯一确定一条记录的关键字。(必须有) MySQL数据库简单操作: 启动:启动MySQL直接在控制台... -
第二章 关系数据库系统
2019-12-18 16:27:43关系数据库是以关系模型为基础的数据库。关系模型由关系数据结构、关系操作和...码:也称为关键字或键,表中能唯一标识元组的最小属性集合。其中若不止一个码,则一个为主码,其他为候选码。 域:属性的取值范围。 ... -
最全的oracle常用命令大全.txt
2011-12-09 08:41:00ORACLE的数据字典是数据库的重要组成部分之一,它随着数据库的产生而产生, 随着数据库的变化而变化, 体现为sys用户下的一些表和视图。数据字典名称是大写的英文字符。 数据字典里存有用户信息、用户的权限信息、... -
《sql必知必会》学习笔记
2016-09-08 14:50:41distinct 关键字必须放在查询字段的最前面,作用于其后的所有查询字段(也就是查询出其后字段组成集合不同的就ok);单引号 sql中用单引号区分数字和字符,双引号不行;order by 其后除了跟列名进行排序外,还可以跟... -
C# for CSDN 乱七八糟的看不懂
2012-06-03 15:40:47//各个不同的元素的集合 int [] y12=new int[v11.Count]; //记录各个元素数量的数组 int xmax=0; //最大的一个元素的数量 for (i=0;i;i++) { j0=(object)v11[i]; if (y11.Contains(j0)) { y12[y11.IndexOf(j0)]++; ... -
VBSCRIPT中文手册
2010-11-12 10:13:06你可以找到在按字母排序的关键字列表中列出的 VBScript 语言的所有部分。如果你只想调阅某一部分,例如“对象”,那么语言的每一部分都有它自己更严密的章节。 如何查找呢?单击左边的某个标题,即显示该部分中包含... -
vb Script参考文档
2009-07-28 22:13:02你可以找到在按字母排序的关键字列表中列出的 VBScript 语言的所有部分。如果你只想调阅某一部分,例如“对象”,那么语言的每一部分都有它自己更严密的章节。 如何查找呢?单击左边的某个标题,即显示该部分中包含...