Google BigTable阅读笔记

【论文阅读笔记】Bigtable: A Distributed Storage System for Structured Data Bigtable 是 Google 设计的用于管理结构化数据的分布式存储系统,可扩展到数千台服务器存储 PB 级数据。它不是关系数据库,而是一种稀疏、分布式、持久性多维排序映射(K/V)。Bigtable被 60 多个 Google 产品使用,涵盖不同数据规模和延迟要求的应用,这得益于 BigTable 提供的简单数据模型可以使客户端动态控制数据的布局和格式。 阅读详情

Google BigTable阅读笔记


摘要
Google BigTable是一个分布式的结构化数据存储系统,用来存储海量的数据,这些数据分布在以千计数的普通PC集群上(GFS,MapReduce都是分布在这样的集群上)。
Google有很多项目都使用BigTable存储数据,如Web索引、Google地图、Google金融等。这些应用对存储量、响应速度、吞吐量需求各异,但BigTable还是成功成为一个灵活且高性能的解决方案。

1.概要
BigTable是一个分布式的结过婚数据存储系统,它存储着PB级别的数据。
BigTable的设计目标是:
(1)适用性广;
(2)扩展方便;
(3)高性能;
(4)高可用;

BigTable和数据库比较类似,它的实现参照了很多数据库的实现策略(并行数据库,内存数据库),但它提供了一套完全不同的接口;
BigTable不支持关系型模型,即不支持schema,它提供的模型允许用户动态控制数据的分布和格式;
BigTable视一切数据为字符串,用户可以把结构化或半结构化的数据串行化到字符串里,进行存储;

2.数据模型
BigTable是一个稀疏的、分布式的、持久化存储的多维排序map,map的索引是行名称、列名称、时间戳,value是只有用户能理解含义的二进制串。
(row:string + column:string + time:int64) => (string)
为什么设计成这样的数据模型呢?首先考虑一种常见的应用,存储网页(webtable):
URL为关键字,URL含有各种属性,每种属性有一定的历史,如下图


图一:网页存储片段

行(rows):
(1)表中的行是任意的字符串(64k上限),对每一行的读写都是原子的;
(2)BigTable通过行关键字组织数据,每个行都能动态分区,每个分区叫一个子表(tablet),子表是数据分布与负载均衡的最小单位;
(3)第二点保证了读取行中少数几列的数据时效率很高,应用层还能利用位置相关特性,将一些需要的数据放置在一起。
仍以存储网页为例:
能够以URL主域反转作为key,进行网页的存储,这样同一个主域下的网页都存在一起,能够提高查询效率。
com.google.maps/site1.html
com.google.maps/site2.html

列族(column families):
(1)列关键字组成的集合叫列族,列族是访问控制的基本单位;
(2)同一个列族下的数据通常类型相同;
(3)列族必须先创建才能使用,创建后,任何一个列关键字下都能存放数据。
(4)一张表可以有无限多个列;
一般来说,一张表中列族不能太多(几百个足以),并且列族在运行期间很少改变。
列族名称由 族名称(family)+限定符(qualifier)组成,其中:
(1)族名称必须是可打印字符;
(2)限定符可以是任意字符;
访问控制、磁盘以及内存的使用统计都是在列族层面进行的。仍以存储网页为例,权限控制能允许某些应用添加新的基本数据、某些应用读取基本数据并创建继承的列族、一些应用则只能浏览。

时间戳(timestamps):
(1)时间戳类型为int64,精度为毫秒;
(2)一份数据可以有多个时间戳版本,以避免版本冲突;
(3)不同时间戳版本的数据按时间戳降序排列,即最新的数据在最前面;
一般来说,只会保存某个数据的最近n个版本,可以设置参数定期进行垃圾收集。
以存储网页为例,存储的网页的时间戳是网页的抓取时间,垃圾收集机制能保证只存储最近3个版本的网页数据。

3.API
BigTable提供了建立和删除表以及列族的API,修改集群、表、列族元数据的API,例如访问权限。
客户端程序能通过这些API对BigTable进行如下操作:
(1)写入或者删除BigTable中的值;
(2)从每行中遍历、查找BigTable的表中的数据子集;
(3)单行上的事务处理,利用这个功能,可以对一个行关键字下的数据进行原子的读-更新-写操作(BigTable并不支持跨行的事务操作);
(4)BigTable允许把数据项作为整数计数器;
(5)BigTable允许用户在服务器的地址空间执行脚本程序;
(6)BigTable可以和MapReduce一起使用,可以利用已开发的wrapper类,把BigTable当做MapReduce的输入和输出。

4.基础构件
BigTable是建立在其他几个Google基础构建基础上的高级别应用:
(1)BigTable使用GFS存储日志、数据文件;
(2)BigTable使用SSTable作为内部存储数据的格式;
(3)BigTable依赖于高可用、序列化的分布式所服务Chubby;

5.实现
BigTable包括三个主要组件:可链入客户端程序的库、一个Master服务器和多个子表(tablet)服务器;针对系统的负载情况,能够很容易的向集群中添加和删除子表服务器。
Master服务器主要负责以下工作:
(1)为子表服务器分配子表;
(2)检测加入或者失效的子表服务器;
(3)均衡子表服务器负载;
(4)对GFS上的文件进行垃圾回收;
(5)相关schema的修改与维护;
Tablet服务器主要负责的工作:
(1)管理子表集合;
(2)子表的读写处理;
(3)子表过大时,自动分隔;

和大部分的单Master分布式系统类似,数据流均不经过Master服务器,客户端直接和Tablet服务器通信,进行数据的读写。
BigTable的客户端程序不必通过Master服务器来获取子表的位置信息,大多数客户端程序甚至完全不用和Master交互。
一个BigTable集群存储了很多表,每个表包含一个子表集合,而每个子表包含某个范围内行的所有数据。初始状态下,每个表只有一个子表,随着数据量的增长,子表会自动分割为100M级别的多个子表。

5.1子表的位置
使用一个三层、类似B+数的结构存储子表的位置信息。


Google BigTable子表位置信息

图二:子表位置信息存储
(1)第一层是一个存储在Chubby中的文件,包含根子表(Root Tablet)的位置信息。
根子表包含了一个特殊的元数据(metadata)表里所有的子表位置信息。元数据表的每个子表包含一个用户子表的集合。
跟子表实际上是元数据表的第一个子表,它被特殊处理过–它永远不会被分割;
(2)第二层是其它各个元数据表,每个子表的位置信息都放在一个行关键字下面,这个关键字由子表所在表的标示符和子表的最后一行编码而成;
(3)第三册是用户子表表的位置信息;
客户端会在树状的存储结构查询子表的位置信息,并缓存这些信息。

5.2子表分配
任何时刻,一个子表只能分配给一个子表服务器。Master中记录了哪些可用的子表服务器,哪些子表分配给了哪些子表服务器等元信息。
当一个子表没有被分配,且某个子表服务器有足够的空间来装载子表,Master会发送装载控制指令给该子表服务器,完成子表的分配。
BigTable使用Chubby跟踪子表服务器的状态,当一个子表服务器启动时,在Chubby的指定目录下会创建一个唯一的文件,代表独占锁。
Master服务器实时监控这个目录,便能知道是否有新的子表服务器加入。如果丢失了独占锁,例如断网、会话丢失、子表服务器自然终止,就认为该子表服务器其停止了子表的服务。
此时Master服务器就会尽快的把子表分配给其他的子表服务器。
如果子表服务器挂掉之前来不及释放自己的独占锁也没有关系,Master会有定时心跳,尝试与子表服务器通信,若无回应,Master会主动解除Chubby上的文件锁。

Master启动时,必须要了解当前子表的分配状态,之后才能修改分配状态,启动步骤为:
(1)Master从Chubby获取唯一的Master锁,以防止集群进入其他的Master;
(2)Master扫描Chubby文件锁目录,获取正在运行的子表服务器列表;
(3)和所有子表服务器通信,获取所有子表分配信息;
(4)扫描元数据表获取所有子表的集合;

5.3子表服务


Google BigTable子表服务

图三:子表服务
如图所示,子表的持久化信息是保存在GFS上的。所有更新日志提交到重做(REDO)日志中。在这些更新操作中,最新提交的那些数据存放在一个排序的缓存中,我们称这个缓存为memtable;较早的更新存放在SSTable中。
为了恢复一个子表,子表服务器首先从元数据表中读取它的元数据,元数据包含组成这个子表的SSTable的列表,以及重做点(REDO point)的集合,这些重做点指向可能含有该子表数据的已提交日志。
子表服务器把SSTable的索引读进内存,通过再次执行重做点之后提交的更新再重建memtable。
(1)对子表服务器的写操作步骤:
检测操作格式,例如完整性;
检测发起者权限;
记录成功操作的日志;
写的内容插入到memtable里。
(2)对子表服务器的读操作步骤:
完整性与权限检查;
合并SSTable与memtable视图完成读数据的合并;

5.4数据压缩(compactions)
数据压缩分为三种:
(1)最小化压缩;
(2)合并压缩;
(3)最大化压缩;

随着写操作的执行,memtable的大小不断增加,当达到一个门限值时,就不再增长,而是转化为SSTable,写入GFS,这种压缩成为最小化压缩(Minor Compaction)
最小化压缩的目的:
(1)限制使用内存:memtable是在内存中的,必须限制大小;
(2)容灾恢复时,减少日志读取量:memtable中的数据是易失的,灾难恢复时,结合SSTABLE+最新的日志就能恢复所有数据;

每次最小化压缩会创建一个SSTable,如果一直实施最小化更新,创建更多的SSTable,则可能导致读操作来临时要读取多个SSTable上的更新数据以获取最新的结果;
解决该问题的方法是:定期后台合并SSTable和memtable的内容,组成的新有序SSTable,这个过程叫合并压缩(Merging Compaction),合并压缩完成后,合并之前的SSTable和memtable就能够被删除了。

合并所有SSTable的合并压缩称为最大化压缩(Major Compaction);最大化压缩是为了解决合并压缩中可能存在被删除数据。
BigTable定期循环扫描所有子表,执行最大化压缩。这种机制允许BigTable按时回收被删除的资源。

6.优化
为了达到对用户的高性能、高可用、高可靠性要求,做了如下优化:
(1)局部性分组(locality groups)
为了提高访问效率,通常不会一起访问的列族分割成不同的局部性分组,例如网页、网页元数据。
(2)压缩(compression)
压缩的目的是减少存储空间;
(3)缓存(Caching)
(4)bloom filter优化
bloom filter是一个经典数据结构:它能快速准备的判断一个元素不在一个集合中。
Google用它来优化判断SSTable的位置。
(5)日志提交实现
追加日志;
日志关键字排序;
(6)快速恢复
子表从一个子表服务器转移到另一个子表服务器时,必须先做一次最小化压缩;
这样做的好处是,新子表服务器装载子表时不需要从日志中进行恢复。
(7)不变性
SSTable是固化到磁盘上的,因此其访问无需同步;
删除也可以通过标记完成;

7.经验教训
(1)任何错误随时都可能发生:网络中断、协议错误、内存数据顺滑、时钟偏差、网络分区;
(2)添加特性需要慎重:分行事务真的需要么?
(3)监控尤其重要;
(4)简介的设计和编码会给维护和调试带来巨大的帮助;


Google分布式系统三大论文(二)Bigtable: A Distributed Storage System for Structured Data 修正了alex翻译版的几个欠妥之处 Bigtable:一个分布式的结构化数据存储系统 摘要 Bigtable是一个管理结构化数据的分布式存储系统,它被设计用来处理海量数据:分布在数千台通用服务器上的PB级的数据。Google的很多项目将数据存储在Bigtable中,包括Web索引、Google Earth、Google Finance。这些应用对Bigtable提出的要求差异非常大,无论 阅读详情

相关推荐

BigTable原理详解

BigTable是Google设计的分布式数据存储系统,用来处理海量的数据的一种非关系型的数据库,该pdf详细解释了bigtable的原理。 BigTable是非关系的数据库,是一个稀疏的、分布式的、持久化存储的多维度排序Map。Bigtable的设计目的是可靠的处理PB级别的数据,并且能够部署到上千台机器上。Bigtable已经实现了下面的几个目标:适用性广泛、可扩展、高性能和高可用性。Bigtable已经在超过60个Google的产品和项目上得到了应用,包括 Google Analytics、GoogleFinance、Orkut、Personalized Search、Writely和GoogleEarth。这些产品对Bigtable提出了迥异的需求,有的需要高吞吐量的批处理,有的则需要及时响应,快速返回数据给最终用户。它们使用的Bigtable集群的配置也有很大的差异,有的集群只有几台服务器,而有的则需要上千台服务器、存储几百TB的数据。

BigData入门(三):BigTable

1、BigTable简介 2、数据模型 3、BigTable所用到的构件 4、BigTable架构 1、BigTable简介 GFS是文件级别的分布式存储,那BigTable则是表级别的分布式存储。Bigtable 是一个分布式的结构化数据存储系统,它被设计用来处理海量数据:通常是分布在数千台普通服务器上的 PB 级的数据。Bigtable 的设计目的是可靠的处理 PB 级别的数...

蓬莱道人的博客 3916

HLM(多层线性模型)在stata中语句

在阅读CEPS中发现有些研究采用的是HLM模型,HLM简单来说用一个方程跑两个回归。举例,对学习成绩影响因素,不同层有不同的影响,如在个体层面上个体特征会对成绩产生影响,在学校层面学校排名等因素会对成绩产生影响,两种因素不在一个层面,每层造成的差异都不相同。 在找相关语句时候发现操作这个语句的软件大多是SPSS和HLM,对于stata操作者并不友好。因此,在有限资料中总结了HLM在stata中的语句,后面会附上学习视频和链接。 先放语句,后面对方程式一个大致解析。由于针对HLM有一本书的介绍,可能一篇文章无

weixin_44652251的博客 1万+

在gcp上开始使用bigtable

If you’ve never looked at it before Bigtable can seem a little unapproachable. In this tutorial we’ll get you past that and guide you through your first steps with Bigtable so you can start using this...

weixin_26717681的博客 951

攻击时间控制的动态逆三维制导律(源代码)

%参考文献:《攻击时间控制的动态逆三维制导律》,哈尔滨工程大学学报,2010 %编程难点:视线坐标系与参考坐标系间的转换关系 一、采用本文方法结果 二、偏航通道采用增广比例导引律

算法小站 2393

Arduino-CRSF库详解:嵌入式端CRSF协议解析与ELRS接收机集成

CRSF(Crossfire Serial Protocol)是一种面向FPV无人机的轻量级、高实时性串行通信协议,采用单总线异步传输与8位CRC-8校验机制,广泛应用于遥控链路与遥测交互。其核心在于帧同步(0xC8起始字节)、反相逻辑电平及无重传的广播式设计,对嵌入式平台的UART精度、电平匹配和状态机健壮性提出严苛要求。Arduino-CRSF库正是为资源受限MCU(如ESP32、STM32、ATmega328P)提供零配置、中断安全的协议解析能力,封装了CRC查表计算、超时恢复、多级同步验证等关键机制

weixin_35756690的博客 416

《Google-Bigtable》读书笔记

“Bigtable为客户提供了简单的数据模型,利用这个模型,客户可以动态控制数据的分布和格式,用户也可以自己推测底层存储数据的位置相关性。”这也就要求,表的结构是与业务紧密相关的,写代码的人,不得不去了解是如何存储的,否则查询效率会很低。 “Bigtable通过行关键字的字典顺序来组织数据”,这个与关系数据库看似一致,关系数据库不是有索引么,表呈现的时候也是按照字典序的,但是Bittable中的“组

胜利者的经验并不复杂,那就是寻找人生的关键点,并在关键时刻竭尽全力 1536

SAP S/4 FICO科目辅助余额表开发说明书(包括测试样例、程序代码仅作参考,不保证一定可以运行)

SAP S/4 FICO科目辅助余额表开发说明书(包括测试样例、程序代码仅作参考,不保证一定可以运行)

我好像病了的博客 329

BigTable读书笔记

对BigTable的原理、实现、优化进行简介

架构师专栏 3616

第 2 章:PassThrough 直通滤波

通过设置某个维度(如 x、y、z 或 rgb)的取值范围,仅保留该范围内的点,从而达到**点云裁剪(裁边)**或过滤异常值的目的。所有在该范围之外的点会被移除(可选是否保留);点云中包含背景、地面或传感器噪声,需要过滤;通过 z 轴过滤,只保留桌面上方的物体;多轴组合过滤(如同时过滤 x、y、z);可用于地面剔除、车载点云预处理等场景。不支持一次过滤多个字段,可多次调用;仅处理某一层或某一区域的点云数据。原始点云中包含地面、墙面、背景等;在区域裁剪、前景提取中广泛使用;设定一个轴(如z轴);

yumeiguo的博客 337

博途PLC S7-1200/1500 ModbusTcp通信SCL代码篇(轮询)

博途PLC MODBUS TCP的详细讲解和注意事项,可以参看下面这篇博文,这里不在赘述。这篇作为SCL代码篇主要给出SCL语言下的轮训写法和注意事项。博途PLC1200/1500PLC ModbusTcp通信(轮询处理)_RXXW_Dor的博客-优快云博客。............

RXXW_Dor的博客 8423

论文学习笔记:BigTable

前言:Google大数据处理的3篇核心论文 《The Google File System》:http://research.google.com/archive/gfs.html 《MapReduce: Simplified Data Processing on Large Clusters 》:http://research.google.com/archive/mapreduce

依然的专栏 3147

rknn-toolkit推理yolov5-face.rknn模型--python代码

import os import urllib import traceback import time import sys import numpy as np import cv2 from rknn.api import RKNN ONNX_MODEL = 'yolov5s.onnx' RKNN_MODEL = 'yolov5s.rknn' IMG_PATH = './bus.jpg' DATASET = './dataset.txt' QUANTIZE_ON = True BOX_THR.

C/C++、嵌入式开发、深度学习算法、模型部署与推理优化 3079

Google Bigtable论文阅读理解笔记

1.数据模型 原文:A Bigtable is a sparse,distributed,persistent multi-dimensional sorted map. 六个关键词,分别是: sparse:稀疏 distributed:分布 persistent:持久化 multi-dimensional:多维 sorted:有序 map:位图 下面以一个具体示例,更直观的理解上述六个关键...

山不转的博客 719

【C语言趣味教程】(0) 专栏介绍

这是一套C 语言趣味教学专栏,目前正在火热连载中,欢迎猛戳订阅!本专栏保证篇篇精品,继续保持本人一贯的幽默式写作风格,当然,在有趣的同时也同样会保证文章的质量,旨在能够产出"有趣的干货" !本系列教程不管是零基础还是有基础的读者都可以阅读,可以先看看目录!标题前带星号 (*) 的部分不建议初学者阅读,因为内容难免会超出当前章节的知识点,面向的是对 C 语言有一定基础或已经学过

有道无术, 术尚可求。有术无道, 止于术。 2万+

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Google三驾马车-Bigtable-论文笔记

什么是Bigtable相比于传统的关系型数据库,bigtable 提供了分布式的非结构化的数 据存储,但没有提供sql的语义,所以是数据NoSQL的数据库。事实上它还是一个分布式的多层map的存储的结构Building Blocks在bigtable 用了其他的很多的Google的组件。使用Google分布式文件系统(GFS)存储日志和数据文件。BigTable还依赖一个高可用的、持久化的分布式锁...

sherlockke的博客 1038

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

bigtable google 论文阅读

结构化数据的分布式存储系统 bigtable 摘要: bigtable在google公司内部的多种应用场景,无论是大数据规模,还是实时性高的场景,都能灵活的提供解决方案。应对的是PB级别以上的数据。下面介绍具体的bigtable架构   1.introduction: 将bigtable与数据库进行比较,有很多实现策略都很相似。并行数据库和主存数据库都实现了扩展性和高性能。不同的是,bi...

bigbugss的博客 1390

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

【论文感悟1】Google Bigtable

阅读Google Bigtable之感悟   之前对ApacheHadoop的一系列产品有所研究,追根溯源,在拜读了Google的三篇经典论文之后,自己对衍生自Google这几篇论文的Hadoop家族的产品有了更加深刻的认识。   这篇博客是对GoogleBigtable这篇论文的读后感,因水平有限,本文只是作为自己学习的小结,文中有不妥之处,还请批评指正。  

djy572568633的专栏 1278

BigTable论文阅读-个人翻译

更多文章欢迎来沈小黑的菜园转转啦啦啦~~ Bigtable是2005年谷歌的论文:《Bigtable: A Distributed Storage System for Structured Data》中介绍的一种分布式存储系统,后来被Hadoop社区实现为HBase。读懂这篇论文,那么理解HBase也就非常容易了。本篇博客略去了性能评估、API和应用实例的部分,只讲比较关键的设计与机制部分。这篇论

沈小黑的博客 2321

关于Google的GFS、MapReduce、BigTable三大技术资料

MapReduce/GFS/BigTable三大技术资料 首先是在孟岩博客中发现以下内容: Google的三大核心技术MapReduce、GFS和BigTable的论文都已经被翻译成高质量的中文;三篇论文的链接地址如下: MapReduce: http://blog.youkuaiyun.com/active1001/arch

Harrytsz的博客 2186

Bigtable: A Distributed Storage System for Structured Data阅读笔记

脚本采用谷歌专为数据处理开发的一种名为Sawzall的语言编写。不支持脚本向Bittable写入数据,主要用于数据转换、任意表达式过滤和聚合汇总。真实世界的分布式系统故障远比理论复杂内存与网络数据损坏、巨大的时钟漂移、机器卡死、非对称网络分区、底层系统(如 Chubby)的 Bug、GFS 配额溢出以及计划内外的主机维护。应对手段:在 RPC 机制中强制引入了校验和以对抗数据损坏。消除模块之间的盲目信任。例如,系统不再假设 Chubby 某项操作只会返回几种固定的标准错误代码。

rootzhang123的博客 379

google bigtable论文原文_CTR论文笔记[1]:Wide&Deep

感觉自己对CTR的论文读的太少,因此后续会在专栏记录一下阅读论文的笔记和心得。2016年Google发表了文章《Wide & Deep Learning for Recommender Systems》,本文主要记录了在读论文时的笔记和一些心得。一、论文笔记1、目的:同时解决Memorization和Generalization问题。Memorization:根据人工经验和业务背景,选择可...

weixin_39928648的博客 197

Google论文、开源与云计算

文章目录一.Google论文与开源二.Google论文简介2.1 起源2.2 基础设施2.3 计算分析系统2.4 存储&数据库2.5 AI三.总结 一.Google论文与开源 自1998年成立,至今Google已走过20个年头。在这20年里,Google不断地发表一些对于自己来说已经过时甚至不再使用的技术的论文,但是发表之后总会有类似系统被业界实现出来,也足以说明google的技术至少领先业界数年。在Amazon不断引领全球云计算浪潮开发出一系列面向普罗大众的云产品的同时;Google也在不断引领构

独立开发,substack顶级编辑 1万+

【大数据】bigtable,分布式数据库的鼻祖

看懂这一篇,就能理解分布式数据库的核心,详聊分布式数据库的鼻祖bigtable。

BugMan的博客 6164

bigtable

BIGTABLE 一个结构化数据的分布式数据存储系统,主要解决大数据量存储的问题。 数据模型为: Rows 通过行键来指定,例如com.cnn.www Column Families  Column keys are grouped into sets called column families, which form the basic unit of access control.

用小弟弟思考的程序员 700

google bigtable论文原文_SCI论文阅读与写作必备翻译工具

在阅读和写作SCI文献时,选择一款合适并且好用的翻译软件将会对我们的工作起到事半功倍的效果。今天我们就来总结一下那些适合生物医药类专业的好用的翻译工具。01Google浏览器翻译Google 浏览器的语言翻译功能强大,不仅支持中英互译,还有法、德、日、韩、捷克语等多种语言,并且可以自动检测语言。Google浏览器翻译操作十分简单,且界面友好,最重要的是不会有弹出广告。可以直接将要翻译的内...

weixin_39664994的博客 449
上一篇: Google MapReduce阅读笔记
下一篇: Hypertable 简介 (Hypertable一个 C++ 的Bigtable开源实现)
cool_time
博客等级 码龄19年 2粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值