c
文章平均质量分 75
gswen
这个作者很懒,什么都没留下…
展开
-
leveldb源码剖析-sstable
leveldb中存储数据的文件格式称为sstable。它的存储格式如下图所示 从sstable的格式可以看出,在一个sstable文件中,除了包含核心的key-value数据的data block区域外,还有其他几个数据区。这些额外的数据区域主要是用于组织data block,使得在读的时候可以快速地从sstable中找到所查找的key对应的value。下面我们来分析一下sstable中的各原创 2017-03-20 15:03:24 · 1358 阅读 · 1 评论 -
Nginx源码剖析--HTTP请求的分阶段处理的初始化
前言Nginx作为一个http服务器,核心任务就是处理HTTP请求。在接收到请求时,Nginx框架首先解析http请求,将解析结果放在ngx_http_request中,由于http是在tcp上工作的,因此解析可能会持续一段时间。nginx用状态机完成对HTTP请求的异步解析。整个解析过程都是由Nginx框架代码完成,不需要用户介入。当解析得到完整的http请求后,就开始处理http请求。ng原创 2017-11-16 15:42:57 · 594 阅读 · 0 评论 -
Nginx源码剖析--server和location的组织
前言我们知道,Nginx的配置文件的http块中一般会存在多个server块,每个server块中也会有多个locations块,而每个location块中也允许有多个location块。前面我们在分析http模块的配置结构体的时候也看到,这些块是通过上一级的ngx_http_core_module模块创建的配置结构体管理的。比如http块中的所有server块都是由ngx_http_core_mo原创 2017-11-04 17:04:37 · 1584 阅读 · 0 评论 -
Nginx源码剖析--HTTP模块初始化概述
前言前面讲了HTTP模块配置结构体的组织以及各个server,location块为了能够实现快速查找而使用的组织数据结构。这些内容都属于HTTP模块的初始化部分。除了之前讲的内容之外,HTTP初始化还包括其他内容。我们将在这部分讲述这些内容。对HTTP模块的初始化是从‘ http’关键字开始的。也就是说,当配置文件解析器在配置文件中读到http关键字,则会开始根据http块中的配置信息初始化http原创 2017-11-10 15:40:34 · 867 阅读 · 0 评论 -
Nginx源码剖析--HTTP模块配置结构体在conf_ctx中的组织
前言http模块配置结构体组织架构问题解决方案总结前言上一篇文章介绍了event模块的配置结构体的初始化以及模块中的一些初始化函数,比如init_process函数。这些工作都是在服务器启动之前必须完成的。 在介绍event模块的配置结构体初始化时,我们知道event模块的解析是从events{}“events”关键字开始的。也就是说与event模块相关的所有配置项都必须在配置文件的ev原创 2017-10-21 15:00:40 · 1226 阅读 · 2 评论 -
Nginx源码剖析--ngx_cycle_t的初始化
前言前一篇介绍了ngx_cycle_t中各个成员的具体含义,虽然许多成员具体作用和实现方式我们没有深究,但也有了一个初步的了解。这篇文章将介绍ngx_cycle_t的初始化过程,主要是在ngx_init_cycle函数中完成的,之所以说主要,因为ngx_cycle_t的初始化还会依赖于一个old_cycle,这个old_cycle的初始化是在main中完成的。ngx_init_cycle的函数原型如原创 2017-09-30 19:19:14 · 881 阅读 · 0 评论 -
nginx源码剖析--从main函数开始
八九月份找好工作之后,着实懒散了一段时间。现在回想起来,九月份没有做一件有意义的事情,成天都是胡思海想。现在工作基本上定下来了,打算这段时间直到毕业,好好学习几个方面的知识:后台开发数据存储后台开发上主要是打算吃透nginx。为了达到这个目的,这段时间会写一系列的nginx源码剖析的文章。由于水平实在有限,可能会写相当长的时间,并且写的时候也会有许多问题。不过我总是会尽自己最大的努力的。想起来原创 2017-09-30 14:22:52 · 893 阅读 · 0 评论 -
leveldb源码剖析--MemTable
前言根据前一篇可以知道,leveldb在磁盘中的存储模型是sstable,sstable总的来说就是存储一个一个的key-value信息序列以及一些管理信息。用户一般是通过leveldb的用户接口Status Put(const WriteOptions&, const Slice& key, const Slice& value);或者Status Write(const WriteOptions原创 2017-03-24 16:00:47 · 1201 阅读 · 0 评论 -
C语言中的变长数组 data[0]
本文装载自:http://www.cnblogs.com/Anker/p/3744127.html主要是在看leveldb源码时, SkipList::Node里面的port::AtomicPointer next_[1]定义有点不解,因此上网搜到下面这篇讲解,做个笔记。前言今天在看代码中遇到一个结构中包含char data[0],第一次见到时感觉很奇怪,数组的长度怎么可能为0呢?于是上网搜了一下这转载 2017-03-14 19:18:15 · 853 阅读 · 0 评论 -
leveldb源码剖析---版本管理
所谓的版本,简单地说,指的是leveldb中各个level层的文件信息。显然,随着compaction的进行和新的memtable写入生成新的sstable,版本会不断变化。版本除了记录各层的文件信息外,还记录各层关于compaction的的信息,比如在对于当前版本,最适合进行compaction的level是哪层,以及这层中最适合compaction的是哪个文件等信息。和版本相关的类主要是以下三个原创 2017-03-29 13:19:26 · 1947 阅读 · 4 评论 -
leveldb源码剖析---DBImpl::MakeRoomForWrite函数的实现
前言前面我们说过,leveldb用户通过调用write或者put函数向数据库中写入数据实际上是将数据写入到levedb的Memtable中。我们也曾经提到过,leveldb中有两个MemTable,分别是imm_和mem_,其中imm_是不可写的,因此实际上我们将数据写入到mem_中。leveldb提供持久化,也就是需要将内存中的数据保存到磁盘上,也就是前面说的以sstable的形式将数据持久化。在原创 2017-03-27 16:34:28 · 2585 阅读 · 0 评论 -
Nginx源码剖析--HTTP请求各阶段的具体作用
前言Nginx将HTTP请求分为11各阶段进行处理。每个阶段包含零到多个handler处理函数。分阶段处理的目的是增加灵活性,方便模块介入。HTTP请求处理主要分为一下11个阶段:typedef enum { NGX_HTTP_POST_READ_PHASE = 0, NGX_HTTP_SERVER_REWRITE_PHASE, //对server对应的uri的转换 NGX_HT原创 2017-11-26 10:37:29 · 718 阅读 · 0 评论