- 博客(54)
- 收藏
- 关注
转载 Google的C++开源代码项目
v8 - V8 JavaScript EngineV8 是 Google 的开源 JavaScript 引擎。V8 采用 C++ 编写,可在谷歌浏览器(来自 Google 的开源浏览器)中使用。V8 根据 ECMA-262 第三版中的说明使用 ECMAScript,并在使用 IA-32 或 ARM 处理器的 Windows XP 和 Vista、Mac OS X 10.5 (L
2014-09-29 16:43:59 790
转载 分布式缓存系统 Memcached(一)——整体架构
分布式缓存出于如下考虑,首先是缓存本身的水平线性扩展问题,其次是缓存大并发下的本身的性能问题,再次避免缓存的单点故障问题(多副本和副本一致性)。分布式缓存的核心技术包括首先是内存本身的管理问题,包括了内存的分配,管理和回收机制。其次是分布式管理和分布式算法,其次是缓存键值管理和路由。什么是Memcached许多Web 应用程序都将数据保存到RDBMS中,应用服务器从中读取数据并在浏
2014-09-26 22:27:04 756
转载 Google之BigTable
2006年的OSDI有两篇google的论文,分别是BigTable和Chubby。Chubby是一个分布式锁服务,基于Paxos算法;BigTable是一个用于管理结构化数据的分布式存储系统,构建在GFS、Chubby、SSTable等google技术之上。相当多的google应用使用了BigTable,比如Google Earth和Google Analytics,因此它和GFS、MapRed
2014-09-25 10:18:14 517
转载 Hash和Bloom Filter
Hash(函数/表)Hash (中译为哈希,或者散列)函数在计算机领域,尤其是数据快速查找领域,加密领域用的极广。其作用是将一个大的数据集映射到一个小的数据集上面(这些小的数据集叫做哈希值,或者散列值)。Hash table(散列表,也叫哈希表),是根据哈希值(Key value)而直接进行访问的数据结构。也就是说,它通过把哈希值映射到表中一个位置来访问记录,以加快查找的速度。下面是一个典
2014-09-23 16:57:13 630
转载 LevelDB源码剖析之TableCache
7.1 TableCache简介TableCache缓存的是Table对象,每个DB一个,它内部使用一个LRUCache缓存所有的table对象,实际上其内容是文件编号{file number, TableAndFile*}。TableAndFile是一个拥有2个变量的结构体:RandomAccessFile*和Table*;TableCache类的主要成员变量有:
2014-09-23 15:38:17 958
转载 LevelDB源码剖析之SSTable_sstable文件的读取
6 SSTable之36.5 读取sstable文件6.5.1 类层次Sstable文件的读取逻辑在类Table中,其中涉及到的类还是比较多的,如图6.5-1所示。图6.5-1Table类导出的函数只有3个,先从这三个导出函数开始分析。其中涉及到的类(包括上图中为画出的)都会一一遇到,然后再一一拆解。本节分
2014-09-23 15:36:10 798
转载 LevelDB源码剖析之SSTable_sstable文件的创建
SSTable之26.4 创建sstable文件了解了sstable文件的存储格式,以及Data Block的组织,下面就可以分析如何创建sstable文件了。相关代码在table_builder.h/.cc以及block_builder.h/.cc(构建Block)中。6.4.1 TableBuilder类构建sstable文件的类是Tab
2014-09-23 15:32:43 631
转载 LevelDB源码剖析之SSTable_1(Block的创建与读取)
注原文:6 SSTable之1SSTable是Leveldb的核心之一,是表数据最终在磁盘上的物理存储。也是体量比较大的模块。6.1 SSTable的文件组织作者在文档doc/table_format.txt中描述了表的逻辑结构,如图6.1-1所示。逻辑上可分为两大块,数据存储区Data Block,以及各种Meta信息。1)文件中的k/v对是有
2014-09-21 21:43:35 733
转载 LevelDB源码剖析之Log_2
5 操作Log 2 5.3 读日志日志读取显然比写入要复杂,要检查checksum,检查是否有损坏等等,处理各种错误。5.3.1 类层次先来看看读取涉及到的类图,如图5.3-1。Reader主要用到了两个接口,一个是汇报错误的Reporter,另一个是log文件读取类SequentialFile。> Reporter的接口只有一个
2014-09-20 22:11:18 575
转载 LevelDB源码剖析之Log_1
5 操作Log 1分析完KV在内存中的存储,接下来就是操作日志。所有的写操作都必须先成功的append到操作日志中,然后再更新内存memtable。这样做有两个有点:1可以将随机的写IO变成append,极大的提高写磁盘速度;2防止在节点down机导致内存数据丢失,造成数据丢失,这对系统来说是个灾难。在各种高效的存储系统中,这已经是口水技术了。5.1 格式在
2014-09-20 22:09:44 523
转载 内存映射文件原理探索
原理首先,“映射”这个词,就和数学课上说的“一一映射”是一个意思,就是建立一种一一对应关系,在这里主要是只 硬盘上文件 的位置与进程 逻辑地址空间 中一块大小相同的区域之间的一一对应,如图1中过程1所示。这种对应关系纯属是逻辑上的概念,物理上是不存在的,原因是进程的逻辑地址空间本身就是不存在的。在内存映射的过程中,并没有实际的数据拷贝,文件没有被载入内存,只是逻辑上被放入了内存,具体到代码
2014-09-20 16:17:22 383
转载 Leveldb整体框架
数据分析与处理之二(Leveldb 实现原理)2011-12-04 21:24 by Haippy, 30699 阅读, 8 评论, 收藏, 编辑LevelDb日知录之一:LevelDb 101 说起LevelDb也许您不清楚,但是如果作为IT工程师,不知道下面两位大神级别的工程师,那您的领导估计会Hold不住了:Jeff Dean和Sanjay Gh
2014-09-20 14:18:18 721
转载 LevelDB源码剖析之Memtable(2)
4 Memtable之24.6 Comparator弄清楚了key,接下来就要看看key的使用了,先从Comparator开始分析。首先Comparator是一个抽象类,导出了几个接口。其中Name()和Compare()接口都很明了,另外的两个Find xxx接口都有什么功能呢,直接看程序注释:[cpp] view plaincopy
2014-09-19 09:51:59 726
转载 LevelDB源码剖析之Memtable(1)
http://blog.csdn.net/sparkliang/article/details/86044164 Memtable之1Memtable是leveldb很重要的一块,leveldb的核心之一。我们肯定关注KV数据在Memtable中是如何组织的,秘密在Skip list中。4.1 用途在Leveldb中,所有内存中的KV数据都存储在Memt
2014-09-19 09:49:48 1007
转载 友元函数、友元类、访问私有数据成员、友元关系
http://www.cnblogs.com/JCSU/articles/1044346.html友元函数(friend function)1. 什么是友元函数? 一个类的私有数据成员通常只能由类的函数成员来访问,而友元函数可以访问类的私有数据成员,也能访问其保护成员2. 友元函数的用处体现在哪里? 2.1 使用友元函数可提高性能,如:用友元函数重载操作符和生成
2014-09-17 12:01:00 506
转载 HashMap实现原理
文章来源于Alpha's学习笔记:http://blog.csdn.net/vking_wang/article/details/14166593HashMap目录(?)[-]HashMap的数据结构数组链表哈希表HashMap的存取实现putgetnull key的存取确定数组indexhashcode tablelength取模table
2014-09-17 09:39:00 446
原创 LevelDB源码剖析之SkipList
SkipList的基本原理及具体实现可参考:http://www.cnblogs.com/xuqiang/archive/2011/05/22/2053516.html(此文中SkipList的实现方式是把多层单链表叠加成一个SkipList链表,SkipList的每个节点中包含一个指向下一个Note的指针数组成员)。如图1:
2014-09-16 10:57:02 953
原创 Boost开发指南
第二章:计时器timer库 和日期时间库 date_time第三章:资源管理 ——智能指针(原始指针的代理类)smart_ptr库基本思想:用对象管理资源 RALL机制C++标准库中的auto_ptr:复制使用权转移(不支持引用计数) 不能用作STL容器元素Boost的smart_ptr库:(6个指针代理类)1、scoped_ptr:与auto_ptr类似,不能复制或者赋值
2014-09-10 16:57:00 974
原创 二 内存分配
内存基本处理工具:STL定义了五个全局函数,作用于未初始化空间上。这在容器的实现上很有帮助。Construct():用于构造Destroy():用于析构Uninitialized_copy():POD:直接用STL算法copy();non_POD:单个元素构造construct().对char*类型元素,直接内存底层操作快速移动:memmove()效率极高Uninitializ
2014-09-10 16:53:57 462
原创 八 配接器
第八章:配接器配接器都是仿函数,把被配接的对象经过改变接口以适合某种需要而来。为了方便使用,一般都为每个配接器仿函数提供一个辅助函数,以供外界调用。8.1、配接器分类: Functionadapter:改变仿函数接口Contianer adaper:改变容器接口:如 queue stackItearor adapter:改变迭代器接口: 1、Itearor ada
2014-09-10 16:49:52 525
原创 七 仿函数 functors
第七章:仿函数 functors1、STL算法接受一个函数指针或者仿函数对象作为其一个参数。但是普通函数指针不具备可配接能力。2、STL仿函数分类:按操作数个数分为 一元仿函数、二元仿函数。(STL不支持三元仿函数)。按功能:可分为 算术运算、关系运算、逻辑运算。 要使用STL的内建仿函数,需含.3、为了使仿函数具有可配接能力,每个仿函数需要定义自己的相应型别,如同迭代器
2014-09-10 16:47:46 548
原创 六 算法
第六章:算法for_each():为非质变算法,即不能通过该算法改变元素的值。 Lower_bound():在有序区间查找不小于value值得最小位置。返回迭代器Upper_bound():在有序区间查找不大于value值的最大位置。返回迭代器Binary_search():在有序区间查找不小于value值得最小位置。返回bool值:其内部调用lower_bound(),在查看
2014-09-10 16:45:28 370
原创 五 关联式容器 associative containers
第五章: 关联式容器 associative containers1、标准STL的关联容器: set multiset(多键集合) map(映射表) multimap(多键映射表)这些容器的底层机制都是RB_Tree(红黑树)完成。RB_Tree也是一个独立容器,但不开放给外界使用。2、此外,SGI STL还提供了一些关联容器:hashtable(散列表,已引入C++1
2014-09-10 16:42:34 813
原创 四 序列容器
第四章:序列容器1、序列容器:其中的元素都可有序,但未必有序。2、C++语言本身内置了序列容器:array。STL提供的序列容器:vector list deque,stack,queue,priority_queue. 其中stack queue只是对deque的包装,技术上称为配接器。 4.2、Vector:1、实现的关键技术在于:对其大小的控制以及重新配置时
2014-09-10 16:39:38 408
原创 三 迭代器(iterator)概念与traits编程技法
第三章 迭代器(iterator)概念与traits编程技法设计模式中,iterator模式的定义: 提供一种方法,使之能偶依序巡访聚合物(容器)的所含各个元素,而又无需暴露该聚合物的内部表达式。每一种STL容器都提供有专属迭代器。1、如何获取 迭代器相应型别(五种) 如:迭代器所指对象的型别(可用 模板函数的参数推导机制获取),而更加全面的解法 Traits编
2014-09-10 16:37:19 717
原创 一 STL概论与版本简介
STL 源码剖析 苞丁解牛,恢恢乎游刃有余第一章 STL概论与版本简介1.9.2 临时对象的产生与应用1、刻意产生临时对象:在型别名称后直接加一对小括号,并指定初值,如 shape(3,5)或 int(8);,调用相应的constructor且不指定对象的名称。及创建匿名临时对象。在STL中此技巧常用于仿函数与算法的搭配上。2、静态常数整数(static const i
2014-09-10 16:36:07 433
转载 POD数据类型
POD全称Plain Old Data——数据类型满足了”平凡的定义“和”标准布局“通俗的讲,一个类或结构体通过二进制拷贝后还能保持其数据不变,那么它就是一个POD类型。平凡的定义:1.有平凡的构造函数2.有平凡的拷贝构造函数3.有平凡的移动构造函数4.有平凡的拷贝赋值运算符5.有平凡的移动赋值运算符6.有平凡的析构函数7.不能包含虚函数8.不能包含
2014-09-10 16:32:38 935
转载 C++常用关键字(C++11更新)
C++常用关键字(C++11更新) typeid:获取表达式的类型,以std::type_info(类)表示结果,可能抛出std::bad_typeid。当操作数非多态类(引用)类型在编译时即可确定结果,否则需要在运行时取得结果,即RTTI。const std::type_info&ff=typeid(ee);//typeid:Theresult of a typeid express
2014-09-10 16:26:27 482
原创 C++新型类型转换
1.const_cast: 形式const_cast(expression),用来修改类型的const或volatile属性,除了const或volatile修饰以外,type与expression类型一样。它主要用于移除const2.static_cast:形式static_cast ( expression ),将expression转换为type类型。 没有运行时类型检查来保证转换的安
2014-09-10 16:21:39 471
原创 构造函数与初始化列表
构造函数与初始化列表: 构造函数的执行分为两步:成员初始化和一般计算(即构造函数体的语句)。对于类中的数据成员不放在初始化列表中,则会在执行构造函数体之前默认初始化;在初始化列表中的成员则在初始化列表中初始化,然后在执行函数体(第二步即一般计算)。因此在初始化列表中是初始化,即直接调用成员的构造函数构造成员;而在构造函数体内则是赋值,即覆盖之前默认的初始化值。这对于比较复杂的数据类型有
2014-09-10 16:20:37 467
原创 重载 覆盖 隐藏
重载、覆盖与隐藏1).重载:成员函重载、覆盖与隐藏1).重载:成员函数具有以下的特征时发生"重载"A.相同的范围(同一个类中)B.函数的名字相同C.参数类型不同(不能进行隐式类型转换)D.Virtual关键字可有可无2).覆盖(也叫"继承"):指派生类函数覆盖基类函数,特征是:A.不同的范围(分别位于基类与派生类中)B.函数名字相同C.参数相同D.基
2014-09-10 16:18:57 402
原创 第四章:function 语意学
第四章:function 语意学1、与普通函数相比,静态成员函数由于不是与任何的对象相联系,因此它不具有this指针。从这个意义上讲,它无法访问属于类对象的非静态数据成员,也无法访问非静态成员函数,它只能调用其余的静态成员函数和静态数据成员1)静态成员之间可以相互访问,包括静态成员函数访问静态数据成员和访问静态成员函数; 2)非静态成员函数可以任意地访问静态成员函数和静态数据成员;
2014-09-10 15:14:50 376
原创 第三章:Data语意学(The Semantices ofData)
第三章:Data语意学(The Semantices ofData)1、Data绑定:Class的data绑定发生在整个Class声明完(右大括号出现)。因此当data member 与全局data同名时,会选择绑定到data member。2、data member 的布局layout: class 中nonstatic datamembers 的声明顺序与其在class object
2014-09-10 14:42:33 450
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人