BigTable论文笔记
- 格式:docx
- 大小:170.78 KB
- 文档页数:5
缘起:BigTableGoogle的三篇论⽂,Google File System,MapReduce以及Big Table可以说是整个⼤数据领域的三驾马车,这⾥,我们简单介绍下这三驾马车基本都是⼲哈的,重点解读下Bigtable: A Distributed Storage System for Structured Data。
2003年的GFS:GFS是⼀个可扩展的分布式⽂件系统,主要解决传统单机⽂件系统中磁盘⼩,数据存储⽆冗余等问题;2004年的MapReduce:MapReduce是⼀个基于分布式⽂件系统(例如,GFS)的分布式计算框架,主要⽤来处理⼤规模数据集;2006年的BigTable:BigTable是⼀个⽤来管理结构化数据的分布式存储系统,其本质上⼀个分布式KV存储系统。
BigTable是个啥?BigTable是Google内部⽤来管理结构化数据的分布式存储系统,BigTable可以轻易地扩展到上千台机器,BigTable具有以下优点:1. 适⽤场景⼴泛:从需要⾼吞吐量的批处理作业到低延迟的⽤户数据服务,BigTable都可以胜任。
2. 可伸缩:集群规模可⽔平扩展,BigTable部署规模可以⼩到3~5台,⼤到数千台,从⽽⽀撑不同的数据量;3. ⾼性能:性能这个,想必不⽤我BB了吧,各位看官,你们怎么看呢?4. ⾼可⽤:BigTable是主从结构,不会产⽣单点故障;底层是GFS,数据冗余备份;这还不具有⾼可⽤嘛与关系型数据库不同,BigTable并不⽀持完整的关系数据模型,也就是说,BigTable是⼀个NoSQL数据库,BigTable为⽤户提供了⼀个简单的数据模型,该模型主要有以下两个特点:1. 客户端可以对数据的布局和格式动态控制;这点与关系型数据库有很⼤的差别,关系型数据库中,表创建完成后,表中存储的数据格式基本就固定了,列的数量及格式都⽆法再改变了,BigTable则不同,BigTable的列可以动态增加,完全由客户端控制。
bigtable工作原理Google Bigtable 是一种高性能,可扩展的分布式存储系统,用于存储结构化数据。
它的工作原理如下:1. 数据模型:Bigtable 的数据模型是一个由行键 (Row key),列族 (Column family),列限定符 (Column qualifier) 和时间戳(Timestamp) 组成的多维稀疏矩阵。
每一条数据都通过唯一的行键进行标识,列族用于组织相似的列,列限定符用于唯一标识每一个独立的列,时间戳用于版本控制。
2. 存储结构:Bigtable 将数据按行键的字典顺序进行排序,并将其分布存储在多个物理机器上的不同存储节点中。
数据以列族为单位进行存储,每个列族都可以包含成千上万个列限定符。
每行中的列限定符按照字典顺序存储。
3. 分布式存储和负载均衡:Bigtable 将数据分布在多个存储节点上,以实现数据的高可用性和负载均衡。
它使用一致性哈希算法将行键映射到不同的存储节点上,这样可以实现数据的横向扩展和高性能访问。
4. 数据索引:Bigtable 使用一个称为 SSTable (Sorted String Table) 的文件格式来存储数据。
SSTable 包括一个内存索引和一个磁盘索引,用于加快数据的查找和读取。
内存索引存储在内存中,而磁盘索引存储在多个存储节点上的本地磁盘上。
5. 数据访问:通过行键,列族和时间戳来访问数据。
Bigtable使用 Bigtable API 来进行数据的读取和写入。
在读取数据时,Bigtable 可以根据时间戳来获取最新的数据或指定特定的时间戳获取历史数据。
在写入数据时,Bigtable 使用批量写入和乐观并发控制来处理并发写入操作,以保证数据的一致性和可靠性。
总体来说,Bigtable 利用分布式存储和索引技术,将大规模结构化数据存储在分布式文件系统中,并通过多节点的负载均衡和分布式计算来保证数据的高可用性和性能。
科研文献阅读笔记模板一、文献基本信息1. 标题:本文研究了XXX领域的一个关键问题,题目为《XXX研究》2. 作者:XXX大学XXX实验室3. 发表期刊:XXX期刊,属于XXX领域知名期刊4. 发表时间:XXXX年XX月二、文献内容概述本文主要研究了XXX领域的一个关键问题,通过实验和数据分析,得出了XXX结论。
本文的主要内容包括:1. 问题描述:作者详细描述了XXX领域存在的问题,包括XXX、XXX等方面。
2. 实验设计:作者介绍了实验的设计和实施过程,包括实验方法、样本量、数据采集等。
3. 数据分析:作者对实验数据进行了深入的分析,得出了XXX结论。
4. 结论与展望:作者总结了本文的主要结论,并指出了未来的研究方向。
三、个人理解与思考在阅读文献的过程中,我对于XXX部分的内容有一些自己的理解和思考:1. 作者在实验设计中采用了XXX方法,这种方法是否具有普适性?是否适用于其他领域?2. 作者在数据分析中采用了XXX方法,这种方法是否具有可靠性?是否能够准确反映实际情况?3. 本文的结论是否具有普遍性?是否适用于其他类似情况?对于实际应用有何指导意义?四、文献亮点与不足本文的亮点在于XXX,例如:1. 作者通过深入分析数据,得出了一些具有创新性的结论。
2. 作者采用了一些新颖的方法和技术,提高了研究的可靠性和准确性。
然而,本文也存在一些不足之处:1. 实验设计和数据分析过程中可能存在一些主观因素,影响了结果的客观性。
2. 本文的结论是否具有普遍性还有待进一步验证。
五、参考文献在阅读文献的过程中,我参考了以下文献:1. 《XXX研究方法》作者:XXX2. 《XXX领域最新进展》作者:XXX等3. 《XXX技术与应用》作者:XXX等4. 其他相关文献……六、后续行动计划为了更好地理解和应用这篇文献,我计划进行以下行动:1. 深入阅读相关文献,了解该领域的背景知识和研究现状。
2. 尝试使用作者提出的方法和技术进行实验,验证其可行性和效果。
高项论文专题•论文专题学习o项目管理组需要的知识领域▪项目管理知识体系▪PMBOK指南▪软技能▪通用的管理知识体系▪理解项目的环境▪应用领域的知识、标准和规定o论文考核题目分类▪十大知识领域(单知识域,多知识域/整范进成质,资沟风采干)•整合管理(二制指管监实结)o制定项目章程o制定项目管理计划o指导与管理项目工作o管理项目知识o监控项目工作o实施整体变更控制o结束项目或阶段•范围管理(规收定创确控)o规划范围管理o收集需求o定义范围o创建WBSo确认范围o控制范围•进度管理(规活排估制控)o规划进度管理o活动定义o排列活动顺序o估算活动持续时间o制作进度计划o控制进度•成本管理(规估制控)o规划成本管理o估算成本o制定预算o控制成本•质量管理(规管控)o规划质量管理o管理质量o控制质量•资源管理(规估获建管控)o规划资源管理o估算活动资源o获取资源o建设团队o管理团队o控制资源•沟通管理(规管监)o规划沟通管理o管理沟通o监督沟通•风险管理(规识性量两应监)o规划风险管理o识别风险o实施定性风险分析o实时定量风险分析o规划风险应对o实施风险应对o监督风险•采购管理(规实控)o规划采购管理o实施采购o控制采购•干系人管理(识规管监)o识别干系人o规划干系人管理o管理干系人参与o监督干系人参与▪辅助知识域(安全、绩效、招投标等)▪高级项目管理知识o论文WBS-写作技巧-结构安排▪摘要(2段)•项目•管理▪项目介绍(450字左右)•背景•规模•发起单位•目的•.......▪过渡段(170字左右)•注重XX管理的原因▪管理要点(1500字左右)•管理知识(300-500字)o XX概念o XX过程o......•项目实践(1000字以上)o常见问题o解决方法o某一项目实施过程o编制XX文件▪结尾(200字左右)•认识•心得体会o论文写作万能8条▪万事源头-计划:各种计划、指定-讨论-修改-发布▪万能工具-会议:开踢会、沟通会、征求意见会、周例会、汇报会、评审会、总结会等、会前-会中-会后▪万能工具-德尔菲方法(专家意见法)▪万能输入-组织过程资产:有迹可循(经验、模板)▪关注干系人▪遵循变更流程▪项目经理与小伙伴的矛盾▪举例o十大知识域写作技巧▪整合管理(二制指管监实结)•重点过程及内容o项目章程:内容、作用o项目管理计划:作用、内容▪项目管理计划•范围管理计划•需求管理计划•进度管理计划•成本管理计划•质量管理计划•资源管理计划•沟通管理计划•风险管理计划•采购管理计划•干系人参与计划•变更管理计划•配置管理计划•范围基准•进度基准•成本基准•绩效测量基准•项目生命周期描述•开发方法▪项目文件•活动属性•活动清单•假设日志•估算依据•变更日志•成本估算•问题日志•经验教训登记册•里程碑清单•物质资源分配单•项目日历•项目沟通记录•项目进度计划•项目进度网络图•项目范围说明书•项目团队派工单•质量控制测量结果•质量测量指标•质量报告•需求文件•需求跟踪矩阵•资源分解结构•资源日历•资源需求•风险登记册•风险报告•进度数据•进度预测•干系人登记册•团队章程•测试与评估文件o新增管理项目知识过程o变更控制-8个步骤▪提出与接受变更申请▪对变更的初审▪变更方案论证▪项目变更更控制委员会审查▪发出变更通知并开始实施▪变更实施的监控▪变更效果的评估▪变更收尾,判断发生变更后的项目是否已纳入正常轨道o结束项目:项目总结会•问题和对策o缺乏项目章程▪表现形式•项目经理权威不够•成员不清楚自己的职责▪主要原因•组织管理体系不健全▪解决方法•全高层领导需要加强组织级项目管理的学习o没有项目管理计划▪表现形式•项目管理无章可循,随意性大▪主要原因•项目经理人员像盲人摸象,跟着感觉走▪解决方法•要理解凡事预则立、不预则废的意义,指定项目管理计划o项目管理计划不准确,大而全▪表现形式•计划流于形式,起不到实际作用▪主要原因•高层领导拍脑袋思想•计划编制人员没有理解项目的渐近明细性这一特点▪解决方法•尊重客观规律,用滚动式计划的理念来编制项目管理计划o项目管理计划的各个子计划太孤立▪表现形式•各个管理目标相互冲突▪主要原因•项目经理缺乏全局观培养全局观▪解决方法•培养全局观,让相关干系人充分参与计划的编制过程o指导项目执行工作不力▪表现形式•计划无法有效实施▪主要原因•外行领导内行•项目经理缺乏控制力•对计划的监控不到位▪解决方法•项目经理应当懂一点技术,或配备懂技术的助手来协助管理,加强监控,提升自己的控制力o没有阶段评审机制▪表现形式•质量等问题得不到及时发现▪主要原因•管理不规范•盲目抢进度▪解决方法•要认识到评审对项目的重要性o变更控制不规范▪表现形式•随意性变更太多•变更请求没有记录与评估•没有成立相应的CCB•变更后没有及时通知相关干系人▪主要原因•过分害怕客户•没有建立整体变更控制流程或者虽有但没有遵照执行▪解决方法•在客户面前有理有据有节,同时建立起一套行之有效的整体变更控制流程并遵照执行o项目收尾时没有形成有效的组织过程资产▪表现形式•今后的而类似项目仍然犯类似的错误▪主要原因•公司高层不重视,项目经理没有组织级的项目管理意识▪解决方法•整个组织的各级管理人员都要培养组织级的项目管理意识,为组织作长远打算▪范围管理(规收定创确控)•重点过程及内容o收集需求:工具、输出o定义范围:工具、输出、内容、o WBS:流程、形式、原则•问题和对策o缺乏可行的范围管理计划,或有计划但未执行▪表现形式•项目管理无章可循,随意性大▪主要原因•项目管理人员范围意识不强▪解决方法•制定切实可行的范围管理计划o产品范围描述有缺失▪表现形式•生产的产品不是客户真正需要的▪主要原因•需求不完整•未取得客户的签字•遗漏关键干系人的需求▪解决方法•识别出所有的主要干系人,并使用多种方法获取他们的需求,形成正式的需求文件,最终请客户签字仍可o范围说明书不严谨▪表现形式•给客户留下了很大的想象空间▪主要原因•过于相信与客户的关系•不负责任的工作态度▪解决方法•项目经理需要明白口说无凭的道理,在定义范围时,一定要本着严谨认真的态度,把产品范围与工作范围都写明白,以免影响将来的验收o WBS分解有缺陷或不够细致▪表现形式•遗漏项目管理工作与分包出去的工作•工作包太小或太大▪主要原因•没有掌握WBS分解的各项原则•对项目的工作内容缺乏足够的了解▪解决方法•熟练掌握WBS分解的各项原则,同时认真审核WBS成果o核实范围流于形式▪表现形式•客户不签字•检查走过场▪主要原因•客户怕担责任•项目经理过于相信客户•未能及时提供说明可交付成果的文档资料▪解决方法•不签字确认,此时不能往下走,但要想办法与客户沟通解决o范围变更控制不规范▪表现形式•与整体变更控制的情况类似▪主要原因•与整体变更控制的情况类似▪解决方法•与整体变更控制的情况类似o范围蔓延▪表现形式•客户不断要求增加合同与计划以外的工作▪主要原因•过于害怕客户•范围说明书不够严谨或未得到客户认可▪解决方法•在客户面前有理有据有节,并且要制定一份经过客户等相关干系人认可的项目范围说明书▪进度管理(规定排估制控)•重点过程及内容o定义活动:里程碑o活动排序:活动4种关系、活动依赖关系o估算活动时间:三点估算法、类比估算、参数估算o制定进度计划:网络图、如甘特图、关键路径法、资源优化o控制进度:压缩进度方法▪赶工▪快速跟进▪投入更多优质资源▪选派经验丰富高效的人员加入▪使用新技术▪加强阶段评审▪加强外包生产进度的监控,及时处理变更•问题和对策o缺乏可行的进度管理计划,或有计划但未执行▪表现形式•项目管理无章可循,随意性大▪主要原因•进度管理意识不强▪解决方法•制定切实可行的进度管理计划o活动顺序排列不合理▪表现形式•项目工作混乱▪主要原因•没有准确把握个活动之间的依赖关系▪解决方法•把各活动之间的依赖关系搞清楚,并且利用进度网络模板o活动历时估算不准确▪表现形式•估算活动历时过长或过短▪主要原因•没有相关经验•没有充分考虑到资源日历与资源数量的限制▪解决方法•在项目管理实践中积累经验,并充分考虑资源日历与资源数量的限制o进度计划不准确▪表现形式•项目进度超过预期或果断▪主要原因•没有考虑项目•过于乐观或悲观的估算•项目周期拖得太长•项目周期不现实▪解决方法•确保估算的合理性与现实性,并参考项目日历o进度控制不力▪表现形式•无法按照进度计划完成项目▪主要原因•没有考虑风险因素•对关键路径没有进行有效控制•没有及时发现偏差并采取合理的措施•项目经理的执行力差▪解决方法•为风险因素预留储备时间,高度关注关键活动,出现问题,要分析原因并及时采取应对措施▪成本管理(规估制控)•重点过程及内容o基本概念:成本分类、管理储备和应急储备o成本估算:工具o成本预算:流程、输出o成本控制:挣值分析•问题及策略o缺乏可行的成本管理计划,或有计划但未执行▪表现形式•项目管理无章可循,随意性大▪主要原因•成本管理意识差▪解决方法•制订切实可行的成本管理计划o估算不准▪表现形式•成本估算值过高或过低▪主要原因•经验不足,过于乐观或悲观•WBS分解不够细•估算方法使用不当•没有考虑间接成本的影响▪解决方法•准备一份足够细致的WBS,灵活使用各种估算方法,特别是用专家判断发来弥补自己的经验不足o预算中没有进行储备分析▪表现形式•遇到突发事件时,没有足够的费用应对▪主要原因•对项目的风险考虑不足▪解决方法•充分考虑各种风险因素,适当留有应急储备和管理储备o成本失控导致超出预算▪表现形式•无法在预算成本内完成项目▪主要原因•对信息系统项目认知不足•组织制度不健全•方法问题•技术制约▪解决方法•加深对项目各方面情况的了解,建立健全成本管理的规章制度,灵活运用挣值分析等方法与工具加强成本的控制▪质量管理(规管控)•重点过程及内容o质量管理理论:TQM、6α、ISO9000o规划质量管理:工具o管理工具:工具o控制质量:工具•问题及策略o缺乏可行的质量管理计划,或有计划但未执行▪表现形式•项目管理无章可循,随意性大▪主要原因•缺乏质量管理体系▪解决方法•制定切实可行的质量管理计划o质量控制工作没做好▪表现形式•测试不充分▪主要原因•对质量控制不重视•无法灵活运用各种控制工具▪解决方法•加强测试、评审等,运用多种控制工具技术o只有质量控制,没有质量保证▪表现形式•舍本逐末,无法解决根本问题▪主要原因•没有认识到质量保证的重要性▪解决方法•理解质量靠检查出来的o缺乏有效的技术评审机制▪表现形式•可交付成果的质量达不到要求▪主要原因•忽视了技术评审的重要性▪解决方法•加强技术评审o没有安排专门的质量保证与质量控制人员▪表现形式•程序员自己测试自己写的程序▪主要原因•人手紧张或者质量意识淡薄▪解决方法•从组织上保证有专人来做QA与QC的,并高度重视QA与QC的意义,以免流于形式o缺乏有效的配置管理▪表现形式•版本控制混乱•成员未按照流程管理配置项▪主要原因•对配置管理不够重视▪解决方法•加强配置管理▪资源管理(规估获建管控)•重点过程及内容o规划资源管理:工具、输出o估算活动资源:工具o获取资源:工具、如虚拟团队o建设团队:项目阶段、团队激励理论o管理团队:冲突管理▪撤退/回避▪缓和/包容▪妥协/调解▪强迫/命令▪合作/解决问题•问题及策略o缺乏可行的资源管理计划,或有计划但未执行▪表现形式•项目管理无章可循▪主要原因•缺乏资源管理体系▪解决方法•制定切实可行的额资源管理计划o找不到合适的团队成员▪表现形式•关键工作没人去做▪主要原因•薪水要求不高的,能力可能达不到要求,能力可以达到要求的,薪水要求可能不太高,导致超过预算•招聘时间紧▪解决方法•适当提高关键技术人员的待遇,灵活采用多种招聘方式,同时加强内部员工的培养与储备o团队成员扯皮推诿现象严重▪表现形式•成员都不想担责任▪主要原因•项目经理对团队成员的能力与特点不熟悉•职责分配不清楚▪解决方法•制定明确的职责分配矩阵o奖惩不明,成员干好干坏没区别▪表现形式•成员没有上进心▪主要原因•项目经理没有魄力,做和事佬▪解决方法•通过明确的规章制度来激励人,尽量创造多赢的局面o团队成员之间冲突严重▪表现形式•团队内耗大▪主要原因•项目经理未掌握解决冲突的技巧▪解决方法•提高管理冲突的能力与技巧,尽量创建多赢局面o团队绩效不高▪表现形式•项目完工遥遥无期▪主要原因•团队建设不到位▪解决方法•加强团队建设o团队成员离职率太高▪表现形式•团队成员换个不停▪主要原因•项目经理的领导力与软技能不够,成员对前景缺乏信心•工作压力大,待遇偏低•项目环境相对封闭,社会交往机会不足▪解决方法•项目经理需加强领导力与软技能的培养与提高,营造与团队成员的和谐关系,积极向公司申请相关政策,激励团队成员。
大学毕业论文读书笔记大学毕业论文读书笔记篇1[标题]:人工智能对未来职业市场的影响:一项研究探讨[研究背景]:随着人工智能(AI)的发展,它对职业市场的影响日益显著。
了解这个影响对于职业规划和个人发展至关重要。
[研究方法]:我在论文中使用了文献综述和实证分析相结合的方法进行研究。
我查阅了大量的学术文章和报告,以了解AI 对职业市场的影响。
[主要发现]:我发现AI已经在许多领域产生了显著影响,包括医疗保健、金融、物流和制造业。
例如,AI可以自动完成数据分析,提高工作效率,从而增加了就业机会。
另一方面,它也可能导致某些职业的消失,如卡车司机和数据分析员。
[个人观点]:我认为AI将对未来职业市场产生深远影响。
虽然某些职业可能会消失,但新的职业机会也将出现。
例如,AI 开发人员和AI数据科学家等职位将有很好的就业前景。
因此,我认为人们应该学习新技术,以适应这个不断变化的环境。
[结论]:总的来说,人工智能对未来职业市场的影响是复杂且深远的。
虽然一些职位可能会消失,但新的职位也将出现。
因此,我认为人们应该不断学习新技术,以适应这个不断变化的环境。
大学毕业论文读书笔记篇2题目:大学毕业论文读书笔记摘要:本文是大学毕业论文的读书笔记,主要介绍我在阅读毕业论文相关书籍时的体会和思考。
在这篇文章中,我会先简单介绍一下我所阅读的书籍及其背景资料,然后说明我所阅读书籍的主要内容和写作目的,再阐述我的理解和观点,最后提出建议和总结。
一、书籍介绍我所阅读的书籍是《大学教育的未来:变革、创新与领导力》,是美国教育专家罗纳德·W.托马斯和凯瑟琳·E.托马斯。
这本书主要介绍了大学教育的发展趋势和未来方向,包括变革、创新和领导力等方面。
通过大量的数据和案例分析,深入探讨了大学教育的未来发展方向,并提出了一些新的理念和思路。
二、主要内容这本书的主要内容包括了对大学教育未来发展的探讨和分析,包括变革、创新和领导力等方面。
《架构整洁之道》读书笔记(三)1、整洁架构常见系统架构,六边形架构(端⼝与适配器架构)、DCI架构、BCE架构。
共同设计⽬标:按照不同关注点对软件进⾏切割。
核⼼点:分层 + 依赖规则分析:1、分层:关注点分离思想分层:这些架构都会将软件切割成不同的层,⾄少有⼀个层是只包含软件的业务逻辑的,⽤户接⼝、系统接⼝属于其他层。
2、依赖规则代码依赖只能使由外向内,内层结构的代码不能包含有任何外层结构的信息1、越靠近圆⼼即越是稳定的,即代表⾼层策略,越外围表⽰是低层组件,2、依赖⽅式:从图中也可以看出,低层组件依赖⾼层组件(策略)3、业务实体层:包含业务实体,即应⽤的业务对象,封装最通⽤最⾼层的业务逻辑(单独某个业务实体的逻辑),它不应该受外界影响4、⽤户⽤例层:实现⽤户某个⽤例场景的业务逻辑封装,是对业务实体的组装、封装5、接⼝适配层:⽬的是进⾏数据的交换,包含有⽹关、控制器、展⽰器,如:实体层和⽤户实例层使⽤的数据转化成为持久层能使⽤的数据,⽐如数据库6、框架与驱动层:包含数据库、⽤户界⾯、web框架等每⼀种架构⼀定能在写系统的业务逻辑的时候有以下特征:1、与框架分离:系统架构不依赖于某个功能丰富的框架中的某个函数,框架被当作⼯具使⽤,不需要让让系统来适应框架。
2、可测试性:系统的业务逻辑可以脱离UI、数据库、Web服务及其他外部元素来测试。
3、与UI分离:UI必须能⾮常容易独⽴地修改。
⽽不能在改变UI的同时需要改变系统其他部分。
⽐如当把系统的UI从Web UI改成控制台UI,你并不需要改变任何业务逻辑的代码。
4、与数据库分离:能很⽅便地在Oracle,SQL Server,Mongo DB,BigTable,CouchDB或者其他数据库中进⾏切换和改变。
业务逻辑决不能依赖这些数据库。
个⼈思考:⽬前公司⼀直使⽤某种数据库,这个在⼀定时间内改变的可能性⽐较⼩!5、与外部结构分离:系统的业务逻辑并不需要知道任何外部的结构。
Bigtable/HBase的特点:1.Fundamentally Distributed(分布式存储)该项目从最初规划上,就是为海量数据服务的,当然分布式存储的思想也是扎根于其血脉中。
分布式系统主要需要考虑两个方面:partitioning(分区存储,也可以理解为通常说的Sharding)、replication(数据复制,主要是将数据复制成多份以提高可用性)。
2.Column Oriented(列式存储)和普通的RDBMS不一样,普通的RDBMS通常是行式存储的,一行数据是连续存在一段磁盘空间上的。
而列式存储是将各个列分别进行连续的存储。
也正是因此,它对于处理字段中的NULL字段,能够不占用过多的空间。
同时能够支持灵活松散的列定义。
也就是我们通常所说的schema-less。
3.Sequential write(顺序写磁盘)BigTable型系统的一个特点是其对写性能进行的优化。
它的写都是通过先记一条操作日志,然后直接写在内存中的数据集合,然后其集合按条件或定时将数据flush到磁盘。
这里涉及到的记操作日志或者数据flush到磁盘都会顺序的磁盘操作。
故而避免了磁盘随机操作造成的无谓的磁盘寻道时间。
4.Merged read(读操作数据合并)上面说到写操作是通过定时将数据直接flush到磁盘进行的,每次flush都会生成一个数据块,那可能造成一个数据在多个数据块中的情况,而在读的时候就需要将这多个版本中的值进行合并。
其中在判断一个数据块是否包含指定值时使用了bloom-filter算法。
5.Periodic Data Compaction(定期数据合并)同样是上面说到的,一个数据可能存在于多个数据块,如果我们不做处理,随着时间的推移,数据块会越来越多。
所以BigTable型系统会进行定时的数据合并。
在上面讲到的将内存中的数据直接flush到磁盘的过程中,flush之前进行了一次数据的排序操作,既是说存在磁盘中的块中的数据,都是顺序的,那么对一堆顺序的数据进行排重合并,其实和我们熟知的多路归并排序很相似。
在的表的标识符和T ablet的最后一行编码而成的。
METADATA的每一行都存储了大约1KB的内存数据。
在一个大小适中的、容量限制为128MB的METADATA T ablet中,采用这种三层结构的存储模式,可以标识2^34个T ablet的地址(如果每个T ablet存储128MB数据,那么一共可以存储2^61字节数据)。
客户程序使用的库会缓存T ablet的位置信息。
如果客户程序没有缓存某个T ablet的地址信息,或者发现它缓存的地址信息不正确,客户程序就在树状的存储结构中递归的查询T ablet位置信息;如果客户端缓存是空的,那么寻址算法需要通过三次网络来回通信寻址,这其中包括了一次Chubby读操作;如果客户端缓存的地址信息过期了,那么寻址算法可能需要最多6次网络来回通信才能更新数据,因为只有在缓存中没有查到数据的时候才能发现数据过期(alex注:其中的三次通信发现缓存过期,另外三次更新缓存数据)(假设METADATA的T ablet没有被频繁的移动)。
尽管T ablet的地址信息是存放在内存里的,对它的操作不必访问GFS文件系统,但是,通常我们会通过预取T ablet地址来进一步的减少访问的开销:每次需要从METADATA表中读取一个T ablet的元数据的时候,它都会多读取几个T ablet的元数据。
在METADATA表中还存储了次级信息(alex注:secondary information),包括每个T ablet的事件日志(例如,什么时候一个服务器开始为该T ablet提供服务)。
这些信息有助于排查错误和性能分析。
5.2 Tablet分配在任何一个时刻,一个T ablet只能分配给一个T ablet服务器。
Master服务器记录了当前有哪些活跃的T ablet服务器、哪些T ablet分配给了哪些T ablet服务器、哪些T ablet还没有被分配。
当一个T ablet还没有被分配、并且刚好有一个T ablet服务器有足够的空闲空间装载该T ablet时,Master服务器会给这个T ablet服务器发送一个装载请求,把T ablet分配给这个服务器。
Bigtable 结构化数据的分布式存储系统下2010-10-20【google论文四】Bigtable:结构化数据的分布式存储系统(下)搜索2010-10-1622:36:43阅读0评论0字号:大中小订阅转载请注明:作者phylips@bmy 7.性能评价我们建立了一个N个tablet服务器的Bigtable集群来丈量Bigtable伴随着N的变化的性能和可扩展性。
Tablet服务器配置成由含有1G内存400GIDE硬盘的1786个机器组成的GFScell写进。
N个客户端为这些测试天生工作负载。
(我们使用与tablet服务器相同数目的客户端来保证客户端不会成为瓶颈)。
每个机器有一个双核Opteron2GHz芯片,供运行的进程使用的足够的物理内存,一个gigabit以太网链路。
机器通过一个两级树状交换机网络连接,根节点总体带宽接近100-200Gbps。
所有机用具有相同的主机配置,因此任意两个机器间的往返时间小于1ms。
Tablet服务器和master,测试客户端,GFS服务器都运行在相同的机器集合上。
每个机器运行一个GFS服务器。
另外这些机器要么运行一个tablet服务器要么运行一个客户端进程,或者一些其他同时使用这些机器的job的进程。
R是测试集中Bigtable行关键字的个数,通过对它的取值进行选择使得每个tablet服务器每个基准测试读写接近1G的数据。
顺序写基准测试使用0-R-1作为行关键字。
这个行关键字空间又被划分为相同大小的10N个相同大小的区间。
这些区间通过一个中心调度器分配给N个客户端,当客户端处理完分配给它的前一个区间后就继续分配给它下一个区间处理{分配是动态的,中心调度器维护一个未分配集合,当发现某个客户端完成后,就给它下一个区间,而不是每个客户端一开始就分配了10个固定区间}。
这种动态分配有助于减轻客户端机器上的其他进程造成的性能影响。
在每个行关键字下我们写一个字符串,这个字符串是随机天生的,因此也是未压缩的。
bigtable应用场景
Bigtable作为一款分布式的键值存储系统,主要适用于需要处理大
规模数据并且需要高吞吐量和低延迟的应用场景。
以下是一些常见的Bigtable应用场景:
1. Web搜索引擎:Google采用Bigtable作为其搜索引擎的基础架构。
Bigtable可以支持海量的数据索引与查询,快速地返回搜索结果。
2. 社交网络:社交网络需要存储大量的用户信息、关系以及内容。
Bigtable可以帮助社交网络快速存储和检索这些信息,同时保证高并发
和低延迟。
3. 日志和事件处理:Bigtable可以很好地处理海量的日志和事件数据。
例如需要处理大量用户的访问日志以及业务的日志信息。
4. 物联网:物联网设备可以生成大量的传感器数据,包括温度、湿度、位置等信息。
通过Bigtable,可以很容易地存储和分析这些数据。
5. 金融服务:金融服务需要处理大量的交易数据以及用户资产信息。
Bigtable可以很好地管理这些数据,并且提供高可用性和数据安全保障。
总之,任何需要处理大规模数据且需要快速存储和检索的应用场景都
可以考虑使用Bigtable。
GoogleBigtable(中文版)温馨提示:本论文由厦门大学计算机系林子雨翻译自英文论文,转载请注明出处,仅用于学习交流,请勿用于商业用途。
[本文翻译的原始出处:厦门大学计算机系数据库实验室网站林子雨老师的云数据库技术资料专区/topic/research/documentation/cloud_database/][林子雨翻译的与Goolge Bigtable紧密相关的学术文章推荐]Google Spanner(中文版)[ChangDGHWBCFG06]Fay Chang, Jeffrey Dean, Sanjay Ghemawat, Wilson C. Hsieh, Deborah A. Wallach, Michael Burrows, Tushar Chandra, Andrew Fikes, Robert Gruber: Bigtable: A Distributed Storage System for Structured Data (Awarded Best Paper!). OSDI 2006:205-218.注:本论文英文原文PDF请见本贴的附件,本论文翻译的PDF版本也请见本贴的附件。
Bigtable: A Distributed Storage System for Structured DataFay Chang, Jeffrey Dean, Sanjay Ghemawat, Wilson C. Hsieh, Deborah A. Wallach, Michael Burrows, Tushar Chandra, Andrew Fikes, Robert Gruber{fay,jeff,sanjay,wilsonh,kerr,m3b,tushar,fikes,gruber}@google .comGoogle, Inc.本文翻译:厦门大学计算机系林子雨()翻译时间:2010年7月本文原始英文目录:Abstract1 Introduction2 Data ModelRowsColumn Families Timestamps3 API4 Building Blocks5 Implementation5.1 Tablet Location5.2 Tablet Assignment5.3 Tablet Serving5.4 Compactions6 RefinementsLocatity groupscompressionCaching for read performance Bloom filtersCommit-log implementation Speeding up tablet recovery Exploiting immutability7 Performance Evaluation Single-tablet-server performance Scaling8 Real applications8.1 Google Analytics8.2 Google Earth8.3 Personalized Search9 Lessons10 Related Work11 Conclusions Acknowledgements References[本文翻译的原始出处:厦门大学计算机系数据库实验室网站林子雨老师的云数据库技术资料专区/topic/research/documentation/cloud_database/]Google Bigtable (中文版)厦门大学计算机系教师林子雨翻译;翻译时间:2010年7月AbstractBigTable是一个分布式存储系统,它可以支持扩展到很大尺寸的数据:PB级别的数据,包含几千个商业服务器。
论文写作综述3000-8000字(5000)摘要800-1500字(1200)学术型传记【怎么发展、风格、对它的评价】1、对阅读范围中的某一点有兴趣2、对文献收集、归纳、总结期刊、专著【台湾硕士文库CSSCI 百科词典、辞海】过去10年的文章华师大图书馆、上海图书馆、上大图书馆感兴趣的章节细读文化史、美学史,对艺术家的研究、评价(批评)《中国美学史》、《美学范畴史》;《中世纪的末路》《中华竹韵》范景中图像学研究康德美的历程某人写了《XXXX》书,论述了XXXX观点,落实到XXXX地方,提供了XXXX新材料。
某人提出了XXXX,得在XXXX,失在XXXX。
作者、题目、简要XXXX与我论述之间的关系,他的研究对我有XXXX推进/XXXX不足。
综述最后说明自己要干什么。
语体风格提出问题、分析、反省、解决问题总述、第一阶段、第二阶段、第三阶段角注/尾注启示、原因分析、变化过程不要介绍、要研究标题——表达出所要阐述的问题核心目录——思考的过程展现一、 XXXXXXXX 对XXXXXXX 的启示(启示是什么?)首先、其次、再次、最后二、 XXXXXXXX 对XXXXXXX 的推动提出问题、分析问题提出问题、分析问题研究方法一、 历史唯物主义经济基础决定上层建筑经济基础决定上层建筑生产关系、生产力生产关系、生产力例如:肖像画例如:肖像画肖像画的产生做一解释【个人主义的觉醒】肖像画的产生做一解释【个人主义的觉醒】文艺复兴初期文艺复兴初期肖像画——自我——个人主义——个性(基督教无个性)肖像画——自我——个人主义——个性(基督教无个性)研究问题产生的社会原因研究问题产生的社会原因例如:荷兰风景画产生的原因。
【画家经济来源出问题、人对于自然地审美觉醒】人对于自然地审美觉醒】 例如:研究人物;【生活、经历、社会地位、文人圈子】【生活、经历、社会地位、文人圈子】二、 图像学谁在哪一年,用什么材料,在哪里,为了什么组织,出于什么原因,做了XXXXX 。
大学英语阅读笔记上了大学之后,我发现英语阅读变得越来越重要,也越来越有难度。
为了能够更好地应对各种英语阅读材料,我养成了做英语阅读笔记的习惯,这可真是一段充满酸甜苦辣的奇妙经历。
还记得刚开始做英语阅读笔记的时候,我就像一只无头苍蝇,完全不知道从哪里下手。
每次看到密密麻麻的英文文章,我的脑袋就开始嗡嗡作响。
那些生词就像一个个小怪兽,张牙舞爪地向我扑来,让我应接不暇。
有一次,我碰到了一篇关于历史文化的英语文章。
那篇文章里提到了各种古老的建筑和传统习俗,生词多得让我想哭。
我硬着头皮一个一个地查字典,把生词的意思写在旁边。
可是,等我查完了生词,再回头看文章的时候,发现自己已经忘了前面讲的是什么。
那种感觉,就像是在沙漠里走了很久,好不容易找到了水源,却发现水壶漏了个底朝天。
不过,我可没有轻易放弃。
我开始尝试着改变方法,不再是单纯地查生词,而是先通读一遍文章,大致了解一下主题和内容。
然后,再逐段进行精读,把重点的单词、短语和句子摘抄下来。
有一回,我读到了一篇关于科技发展的文章,里面讲到了最新的人工智能技术。
其中有一个句子特别长,结构也很复杂,我读了好几遍都没搞明白。
“The development of artificial intelligence has brought aboutrevolutionary changes in various fields, enabling machines to perform tasks that were once considered exclusively within the realm of humancapabil ities” 我盯着这个句子,嘴里不停地念叨着,就像在念咒语一样。
后来,我把这个句子拆分成了几个部分,一点点地去理解。
我发现,原来这个句子的主要结构是“development has brought about changes”,“in various fields”是地点状语,“enabling”是一个现在分词短语作结果状语。
大学英语长阅读笔记上了大学之后,才发现英语这门课可真是不简单,尤其是那些长篇阅读,简直就是一场“噩梦”。
但慢慢地,我也琢磨出了一套对付它们的办法,那就是做笔记。
还记得刚开始接触大学英语长阅读的时候,我整个人都是懵的。
那密密麻麻的英文单词,长长的句子,复杂的语法结构,看得我眼花缭乱。
有一次,老师布置了一篇关于科技发展对社会影响的长阅读,那篇文章足有好几页纸。
我硬着头皮读下去,读了半天,也没搞清楚文章到底在说啥。
感觉每个单词都认识,可组合在一起就像一团乱麻。
没办法,为了完成作业,我只能重新读。
这一次,我拿了一支笔和一个本子,准备边读边做笔记。
我先把文章的标题和作者记下来,心里想着:“先搞清楚是谁写的,万一后面要吐槽也得有个对象不是?”然后,我开始一段一段地读。
读到第一段的时候,发现了一个生词“phenomenon”,不知道啥意思,赶紧查字典,原来是“现象”的意思。
我就在本子上记下:“phenomenon 现象”。
接着往下读,又碰到了一个长句子:“The rapid advancement of technology has not only transfo rmedthe way we communicate but also has a profound impact on various aspectsof our daily lives, such as transportation, healthcare, and education” 我的天,这句子也太长了!我试着分析句子结构,发现“not onlybut also”是个重要的结构,就把它记下来,还在旁边写上“表示不仅而且”。
读着读着,我发现文章里提到了很多科技发展带来的具体例子,比如智能手机让人们随时随地都能获取信息,自动驾驶汽车可能会改变未来的交通方式等等。
我赶紧把这些例子简单地概括下来,写在本子上。
一边写一边想:“这些例子说不定考试的时候能用上呢!”就这样,我费了好大的劲,终于把整篇文章读完了,笔记也写了好几页。
摘要1.介绍2.数据模型3.API4.构建块5.执行BigTable执行包含主要三个部分,链接到每个客户端的库,一个master服务器,众多tablet 服务器,tablet服务器可以动态添加和删除以调整负载。
Master负责,分配tablet到tablet服务器,检测增加和失效的tablet服务器,平衡tablet服务器负载,GFS中错误输入输出文件收集,另外负责处理schema改变,比如table和行族column family创建。
每天tablet服务器管理tablet集,(平均每个tablet 服务器管理十到一千个tablet),负责处理已加载的tablet的读和写请求,当tablet变的很大的时候在划分。
像很多single-master结构的分布式存储系统一样,客户端不通过master传数据,客户端和tablet服务器交互直接读、写。
Master不负责保存tablet服务器的位置信息,大部分客户端从不与master交互;这样master负载很轻。
Bigtable存储大量table,每个table包含一个tablet集,每个tablet包含数据都associated with a row range。
初始化一个table包含一个tablet,当table变大,自动划分split成多个tablet,默认每个大约100-200M大小。
5.1 tablet位置采用三层等级类似与B+树来存储tablet位置信息。
第一层存储在chubby中的文件用来保持“根tablet”位置,“根tablet”将所有的tablet位置保存在一个特殊的“元数据表”。
每一个元数据tablet包含一组用户tablet的位置,在元数据table中,“根tablet”是第一个tablet,特殊的是从不划分split(分裂).6.改良7.性能评估8.真实的应用实例。
前记几年前在读Google的BigTable论文的时候,当时并没有理解论文里面表达的思想,因而囫囵吞枣,并没有注意到SSTable的概念。
再后来开始关注HBase的设计和源码后,开始对BigTable 传递的思想慢慢的清晰起来,但是因为事情太多,没有安排出时间重读BigTable的论文。
在项目里,我因为自己在学HBase,开始主推HBase,而另一个同事则因为对Cassandra比较感冒,因而他主要关注Cassandra的设计,不过我们两个人偶尔都会讨论一下技术、设计的各种观点和心得,然后他偶然的说了一句:Cassandra和HBase都采用SSTable格式存储,然后我本能的问了一句:什么是SSTable?他并没有回答,可能也不是那么几句能说清楚的,或者他自己也没有尝试的去问过自己这个问题。
然而这个问题本身却一直困扰着我,因而趁着现在有一些时间深入学习HBase和Cassandra相关设计的时候先把这个问题弄清楚了。
SSTable的定义要解释这个术语的真正含义,最好的方法就是从它的出处找答案,所以重新翻开BigTable的论文。
在这篇论文中,最初对SSTable是这么描述的(第三页末和第四页初):SSTableThe Google SSTable file format is used internally to store Bigtable data.An SSTable provides a persistent, ordered immutable map from keys to values, where both keys and values are arbitrary byte strings.Operations are provided to look up the value associated with a specified key, and to iterate over all key/value pairs in a specified key range. Internally, each SSTable contains a sequence of blocks (typically each block is 64KB in size, but this is configurable). A block index (stored at the end of the SSTable) is used to locate blocks; the index is loaded into memory when the SSTable is opened. A lookup can be performed with a single disk seek: we first find the appropriate block by performing a binary search in the in-memory index, and then reading the appropriate block from disk. Optionally, an SSTable can be completely mapped into memory, which allows us to perform lookups and scans without touching disk.简单的非直译:SSTable是Bigtable内部用于数据的文件格式,它的格式为文件本身就是一个排序的、不可变的、持久的Key/Value对Map,其中Key和value都可以是任意的byte字符串。
高效实现论文大纲笔记,SCI论文写作模板分享截至目前,笔者使用了50个 Obsidian第三方插件,就是为了能够让科研写作阅读更加方便。
研究Obsidian及其第三方插件的过程成为了个人兴趣,也让单调的写作变得生动、充满乐趣。
本期,笔者继续向大家介绍一款Obsidian第三方插件——Outliner,之前笔者已经介绍过Obsidian的视频插件、拆书插件、模板插件、思维导图插件等,多个插件配合应用才是Obsidian的强大原因。
文末分享了一个用Obsidian 整理好的 SCI 论文写作模板,可以直接下载使用。
介绍Outliner外挂之前,我们先聊聊大纲笔记——幕布APP,很多投必得粉丝都知道这款工具。
幕布用户可以在条目中编辑文字,还能进行很多Word 所不能的操作,比如用快捷键移动条目,用鼠标点击进入条目等等,如下图所示。
但是幕布 APP 的可扩展性很差,用户不能自定义其他功能。
其实像幕布 APP 这种大纲笔记的鼻祖是 Workflowy,如下图所示。
图中的 Todo 可以使用Outliner插件实现,图中的 Activities 可以使用 admonition 插件实现(这个留到下一期介绍)。
其实,Obsidian作为一个笔记工具,也可以实现大纲笔记,只不过是利用Outliner插件,用户可以建立自己的大纲笔记,完全免费,没有任何限制,甚至可以自定义样式(这个对用户能力要求比较高,暂不讨论)。
此外,幕布APP 可以将大纲笔记转换成思维导图,Obsidian同样可以实现大纲笔记转换成思维导图,其功能比幕布 APP 还要更加强大!做科研的小伙伴一定都知道大纲笔记的妙用,投必得分享过很多关于大纲笔记在科研写作阅读方面的用法。
接下来,笔者就详细介绍一下如何使用Obsidian实现大纲笔记。
Obsidian 外挂——OutlinerOutliner是一款让你的文字列表看上去像 Workflowy 的工具。
BigTable论文笔记2014年5月21日10:01简介Bigtable是一个分布式结构化数据存储系统。
bigtable实现为一个多维的map(可理解为一个四维的表:rowkey、 column family、 column、 timestamp):(row:string, column:string,time:int64)->string。
BigtTable中数据表的一个片段如图所示:组件Master1.创建表、删除表、调整表结构(列族)2.记录活跃的tablet3.为tablet服务器分配tablet4.记录了哪些tablet在哪些tablet server上5.记录还有哪些tablet没有分配6.检测新加入的或者过期失效的Table服务器7.对tablet服务器进行负载均衡8.对gfs上的文件进行垃圾回收Tablet Server一个BigTable集群存储了很多表,每个表包含了一个Tablet的集合,而每个Tablet包含了某个范围内的行的所有相关数据。
初始状态下,一个表只有一个Tablet。
随着表中数据的增长,它被自动分割成多个Tablet,缺省情况下,每个Tablet的尺寸大约是100MB到200MB。
tablet servet的功能如下:1.管理由master分配的一组tablet2.处理对这些tablet的读写操作3.当tablet过大时,进行分割(然后由master确定分割后的两个新的tablet有哪些tablet服务器接管)。
Client客户端使用bigtable提供的库对bigtable进行访问,有两种形式的客户端:cli (command line interface )和java api。
客户端会缓存Tablet的位置信息以提高读写效率。
对其他组件的依赖1.bigtable依赖gfs存储数据和日志文件。
2.bigtable依赖chubby:a.确保任意时刻只有一个masterb.存储BigTable数据的自引导指令的位置c.查找Tablet服务器,以及在Tablet服务器失效时进行善后d.存储BigTable每张表的列族信息e.存储访问控制列表如果chubby长时间无法访问,bigtable将会失效。
数据模型行1.表中rowkey可以是任意64K内的字符串和数字,以字典序排序2.对bigtable中一行的操作是原子的。
3.一行被分为多个tablet,bigtable中数据分布、负载均衡的控制都是基于tablet的。
列族1.列族(而不是列)属于表的schema,必须创建后才能使用(或者disable表->修改列族->enable表)。
2.表中一般最多几百个列族,但是可以有无限多个列。
取得某一列的语法是列族:列3.访问控制、磁盘内存的使用统计都是在列族的层面进行的。
时间戳1.在表的cell中,数据可以根据创建时的timestamp存放多个版本,timestamp为64位整数。
2.可以在列族上设置对timestamp的参数,保留最近一段时间的数据或者保留最近N个版本的数据。
Tablet1.一个BigTable集群存储了很多表,每个表包含了一个Tablet的集合,而每个Tablet包含了某个范围内的行的所有相关数据。
初始状态下,一个表只有一个Tablet。
随着表中数据的增长,它被自动分割成多个Tablet,缺省情况下,每个Tablet的尺寸大约是100MB到200MB。
2.一个tablet只能分配给一个tabletserver。
SSTable1.tablet按照列族分为多个store,每个store由一个memtable和多个SSTable,SSTable是bigtable中存储文件的基本单位(但不是分布式存储的基本单位,分布式存储的基本单位是GFS的block)2.SSTable是一个持久化的、排序的、不可更改的Map结构,map的key和value都是byte串。
从内部看,SSTable是一系列的数据块(默认64K),在文件尾部存储块索引。
打开SSTable的时候,索引被加载到内存。
每次查找都可以通过一次磁盘搜索完成:首先使用二分查找法在内存中的索引里找到数据块的位置,然后再从硬盘读取相应的数据块。
redologTablet的持久化状态信息保存在GFS上。
更新操作提交到REDO日志中。
在这些更新操作中,最近提交的那些存放在一个排序的缓存中,我们称这个缓存为memtable;较早的更新存放在一系列SSTable中。
为了恢复一个Tablet,Tablet服务器首先从METADATA表中读取它的元数据。
Tablet的元数据包含了组成这个Tablet的SSTable的列表,以及一系列的Redo Point,这些Redo Point指向可能含有该Tablet数据的已提交的日志记录。
Tablet服务器把SSTable的索引读进内存,之后通过重复Redo Point之后提交的更新来重建memtable。
数据读当对Tablet服务器进行读操作时,Tablet服务器会作类似的完整性和权限检查。
一个有效的读操作在一个由一系列SSTable和memtable合并的视图里执行。
由于SSTable和memtable是按字典排序的数据结构,因此可以高效生成合并视图。
读取数据的流程如下:1.读取本地chubby file中的root tablet的位置信息。
2.读取root tablet中的metadata所有tablet的位置信息(root tablet中存储了表metadata的所有的tablet的位置信息,实际上,root tablet就是metadata表的第一个tablet,只是root tablet永远不会被分裂)3.读取metadata表的所有tablet,这些tablet中保存了其他所有tablet的位置信息(每个metadata tablet保存了一个用户tablet的集合)。
在metadata表中,每行(大约1K)标识一个tablet的元信息,rowkey是由这个tablet的最后一行和表名编码而成的。
4.在metadata中找到目标tablet,到对应tablet server上读取数据信息。
5.客户端会缓存读取的tablet的位置信息,以提高读取效率。
数据写当对Tablet服务器进行写操作时,Tablet服务器首先要检查这个操作格式是否正确、操作发起者是否有执行这个操作的权限(通过对比chubby中的访问控制。
成功的修改操作会记录在提交日志里。
可以采用批量提交方式来提高包含大量小的修改操作的应用程序的吞吐量当一个写操作提交后,写的内容插入到memtable里面。
随着写操作的执行,memtable的大小不断增加。
当memtable的尺寸到达一个门限值的时候,这个memtable就会被冻结,然后创建一个新的memtable;被冻结住memtable会被转换成SSTable,然后写入GFS(Minor Compaction)。
MinorCompaction过程有两个目的:shrink(表示空间收缩)Tablet服务器使用的内存,以及在服务器灾难恢复过程中,减少必须从提交日志里读取的数据量。
在Compaction过程中,正在进行的读写操作仍能继续。
每一次Minor Compaction都会创建一个新的SSTable。
如果Minor Compaction过程不停滞的持续进行下去,读操作可能需要合并来自多个SSTable的更新;否则,我们通过定期在后台执行Merging Compaction过程合并文件,限制这类文件的数量。
Merging Compaction过程读取一些SSTable和memtable的内容,合并成一个新的SSTable。
只要Merging Compaction过程完成了,输入的这些SSTable和memtable就可以删除了。
合并所有的SSTable并生成一个新的SSTable的Merging Compaction过程叫作Major Compaction。
由非Major Compaction产生的SSTable可能含有特殊的删除条目。
而Major Compaction过程生成的SSTable不包含已经删除的信息或数据(Major Compaction会做删除而Minor Compaction不会)。
Bigtable循环扫描它所有的Tablet,并且定期对它们执行Major Compaction。
MajorCompaction机制允许Bigtable回收已经删除的数据占有的资源,并且确保BigTable能及时清除已经删除的数据(实际是回收资源。
数据删除后,它占有的空间并不能马上重复利用;只有空间回收后才能重复使用),这对存放敏感数据的服务是非常重要。
存储和负载均衡master中记录了所有活跃的tablet server、已分配的tablet所在的tabletserver以及未分配的tablet,当一个tablet没有被分配,master会寻找一个活跃的、有足够空闲空间的tablet server,让后向这个tablet server发送请求装载那个未分配的tablet。
容灾当Tablet服务器启动时,它在Chubby下创建一个独占锁。
Master服务器实时监控着这个目录(服务器目录),因此Master服务器能够知道有新的Tablet服务器加入了。
如果Tablet服务器丢失了Chubby上的独占锁—比如由于网络断开导致Tablet服务器和Chubby的会话丢失—它就停止对Tablet提供服务。
只要文件还存在,Tablet服务器就会试图重新获得对该文件的独占锁;如果文件不存在了,那么Tablet服务器就不能再提供服务了,它会自行退出。
当Tablet服务器终止时(比如,集群的管理系统将运行该Tablet服务器的主机从集群中移除),它会尝试释放它持有的文件锁,这样一来,Master服务器就能尽快把Tablet分配到其它的Tablet服务器。
Master服务器负责检查一个Tablet服务器是否已经不再为它的Tablet提供服务了,并且要尽快重新分配它加载的Tablet。
Master服务器通过轮询Tablet服务器文件锁的状态来检测何时Tablet服务器不再为Tablet提供服务。
如果一个Tablet服务器报告它丢失了文件锁,或者Master服务器最近几次尝试和它通信都没有得到响应,Master服务器就会尝试获取该Tablet服务器文件的独占锁;如果Master服务器成功获取了独占锁,那么就说明Chubby是正常运行的,而Tablet服务器要么是宕机了、要么是不能和Chubby通信了,因此,Master服务器就删除该Tablet服务器在Chubby上的服务器文件以确保它不再给Tablet提供服务。