自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 资源 (6)
  • 收藏
  • 关注

原创 postgresql笔记几则

1. select count(*) from A,统计所有数据包括null数据,这里会使用到聚合索引,如果判断聚合suoyou

2014-06-07 13:51:16 707

原创 Postgresql手册事务隔离级别笔记

阅读Postgresql

2014-04-12 15:10:02 2349

原创 postgresql外键的实现

postgresql创建外键后会在表pg_constraint

2014-04-12 14:31:44 3296

原创 HBase上region操作append加了行锁为什么还要mvcc等待之前的操作完成?

Hbase region上在做修改操作时有两个关键的lock: updatesLock,rowlock.updatesLock保证memstore的刷新和其上的修改不能同时发生,memstore刷新时加写锁,其它情况加读锁.rowlock顾名思义就是操作那一行的lock.操作时先updatesLock上的写锁,然后是rowlock如append操作代码如下(下面的代码来自于hbase0

2014-01-10 19:21:54 1803

原创 mysql在做每次子查询时是否会缓存上次子查询的结果?

以前一直以为数据库在做子查询时会重新做全部的查询,后来发现postgresql在做子查询时如果来自父查询的参数未发生改变,那么其是可以直接计算结果而不用再次执行子查询的,那么mysql是怎么处理的呢,再次翻出mysql(5.6.10)的源码简单调试了下发现以下结论:1. 在执行子查询无关的exists not exists时如:select  * from a where exists

2014-01-05 18:47:31 4076

原创 mongodb 分片的思考

通过前面源码的分析感觉mongodb的分片加上replset就是全部了,啥问题都应该解决了,后来看到了foursquare发生mongodb宕机事件,看了一下宕机事件的分析,当时阅读代码还并未阅读到分片部分,但是准备阅读分片时就决定一定要仔细将分片机制研究清楚,然后可以分析下foursquare宕机原因.后来阅读完分片代码后明白了其分片策略,当时怎么也想不通为什么会产生shard不平衡的状况呢,一

2012-12-27 21:35:01 1596

原创 mongodb源码分析(二十五)mongos writeback

这里的writeback也许可以翻译成回写,是指发生如下情况,来自mongos对mongod的数据请求,但是请求时发现版本不对了(发生了chunk的迁移)那么这里的请求将得不到响应,这里的请求需要以某种方式回到mongos,然后再次发往正确的mongod,这就是所谓的writeback.下面直接来看代码.先来看一份简化了的插入操作代码.void receivedInsert(Message&

2012-12-27 21:08:22 2375 2

原创 mongodb源码分析(二十四)mongos数据的平衡

本文将分析mongodb中数据平衡的策略.先来看看流程.mongodb开启一线程banlance专门负责数据的平衡工作,其查看系统中所有的shard,发现有不平衡的情况就选择将其中shard服务器的chunk迁移到其它服务器让整个系统达到平衡.来看看平衡策略.1. shard数据大小超过了shard配置的数据大小,从中选取chunk迁移到别处.2. 找到shard中有违法tag规则的chu

2012-12-27 15:43:57 2657

原创 mongodb源码分析(二十三)mongos chunk的迁移

本文我们分析一个chunk的迁移,下文中将分析mongodb的shard平衡策略,之所以分开成两篇文章分析是因为chunk的偏移设计命令太多,太长.下面首先来看看chunk的迁移流程.1.  将要迁移chunk端A首先记录chunk迁移数据的位置.2. 通知远端B,让其执行_recvChunkStart开始chunk的迁移.3. B端首先从A端system.indexes读取索引,并将

2012-12-26 21:40:41 3830

原创 mongodb源码分析(二十二)mongos chunk的拆分

本文我们分析mongodb chunk的拆分,chunk的分拆分两种情况.1. chunk范围[min,max]这表明这个chunk还没拆分,第一次拆分考虑到后面插入更多的数据,所以拆分时chunk将从实际的最大值max1处拆分,拆分后的chunk范围如下:[min,max1),[max1,max].对于这种[value,max]的拆分拆分点选择这个chunk的最小值min1,得到[value

2012-12-25 20:34:35 3953 1

原创 mongodb源码分析(二十一)mongos 查询与添加

本来简单讲讲mongos对于查询 添加 的流程,修改和删除的处理流程简单其也与添加差不多不再分析,对于添加 修改和删除,mongos都只是将其发往正确的mongod服务器让其处理,对于查询稍微麻烦点,因为查询多个mongod服务器的结果回来时汇总需要mongos自身完成其排序.下面来看具体代码吧,在mongos的初始化部分我们已经知道向mongos发送的请求,其处理函数是Request::proc

2012-12-25 16:10:46 2743

原创 mongodb源码分析(二十)mongos分片的配置

本文描述分片设置命令的流程.在分析分片设置命令流程前先来看看configserver服务器config数据库中各个collection的作用.version:   保存当前configserver的版本信息,这个是随mongodb升级而变动的.settings: 保存分片系统设置信息如chunksize大小,balancer配置信息.shards:   保存shard中的配置信息包括每

2012-12-24 20:23:50 5055 1

转载 MongoDb Architecture

转载一篇mongodb架构的文章,原文地址MongoDb Architecture需要翻墙.NOSQL has become a very heated topic for large web-scale deployment where scalability and semi-structured data driven the DB requirement towards

2012-12-23 13:19:29 1883

原创 mongodb源码分析(十九)mongos的初始化以及连接池分配回收

mongos是mongodb提供的自动分片组件,在提供分片功能的mongodb系统中,几乎所有的请求都将通过mongos转发到mongod中,然后mongos再汇总,最后返回给客户端.本来就来分析分析mongos的初始化,为后面通过mongos的查询,删除,修改,增加记录 mapreduce aggregate以及mongos的自动分片与负载均衡做准备.下面来看代码,其入口为mongo\s\ser

2012-12-19 17:44:10 5127 1

原创 mongodb源码分析(十八)replication replset tags

本无意写这篇文章,但是之前在分析replset时有一个线程一直没弄明白其作用,后来偶然间在阅读tags时搞明白了notifierthread的作用,tags的实现过程很隐晦.不仔细阅读,很难弄明白,所以这里专门写一篇文章来分析replset tags的实现.首先来看看一份带tags的replset config.这里的dc可以理解为datacenter或者任何自己觉得好理解的词,dc后

2012-12-18 20:54:36 1877

原创 mongodb源码分析(十七)replication replset状态转换图

本文接上面两篇分析replset模式的文章,来看看replset的状态转换图.看不到全图的请看这里:replication replset状态转换图        本图中某些部分并未画到.1. 服务器进入RS_SHUNNING状态后如果配置更改后其会再次进入RS_SECONDARY等状态.2. 心跳协议无法连接时是自己端将远端服务器标识为RS_DOWN,远端服务器处于什么状

2012-12-17 15:25:57 1439

原创 mongodb源码分析(十六)replication replset同步以及状态的切换

上一篇文章分析了replset的初始化,下面我们继续分析replset的同步部分,这里涉及到2个线程,一个函数.producerThread: 对于非primary的服务器,选取一个目标服务器并从其读出操作日志.startsyncthread:  从producerthread处读取操作日志然后replay.msgCheckNewState函数: 负责各个服务器状态的切换,seco

2012-12-16 22:00:08 3517 1

原创 mongodb源码分析(十五)replication replset模式的初始化

相对于主从模式,replset模式复杂得多,其中的主从对应于这里的primary,secondary概念,primary和secondary之间可以切换,primary掉线后能够自动的选取一个secondary成为新的primary,当然这里也是有限制的,本文将会分析到.首先来看replset模式用到的几个集合.local.oplog.rs: 记录replset模式下的操作日志,mas

2012-12-14 17:01:10 6071

原创 mongodb源码分析(十四)replication主从模式

mongodb提供数据的复制机制,老的master/slave和新的replset模式,本文分析老的master/slave机制,replset在下一篇文中分析.master/slave机制是一台主服务器,其它的从服务器,从服务器从主服务器中读出操作记录,然后在自己这端重现操作,达到和主服务器一致的目的.主从服务器是启动时设定的,之间无法动态的切换,其提供数据的备份机制,默认情况下从服

2012-12-13 19:26:15 1932

原创 mongodb源码分析(十三)持久化

先来看看持久化的流程.默认情况下持久化是开启的,需要关闭启动时--nodur或者--nojournal.在开启journal时mongodb保留了多数据库的两份映射,每一个文件有两个映射的初始地址_view_write和_view_private,_view_private是为了持久化而生的.这就是为什么用mongostat查看系统信息时会看到vsize是mapped的2倍多了,因为一

2012-12-13 13:14:38 4597

原创 由mongodb的栈大小引起的疑问

今天在QQ群聊天时一个群友问mongodb接收一个连接时产生一个线程来处理,线程的栈是多大10M吗.我记得阅读代码时看到过对于linux系统设置的栈大小是1M,但是群友通过cat  /proc/proc_id/task/thread_id/limits查看时Max stack size为10M啊,并不是1M,我也不理解,为什么会这样回去重新阅读代码发现没错啊,确实设置的是1M的栈大小.

2012-12-12 15:54:24 1477

原创 mongodb源码分析(十二)数据的更新

相对于删除操作,更新操作复杂得多,因为其操作很多,mongodb提供了很多更新的操作符,另外还要考虑到更新时如果原来的数据doc空间不够还得删除原来的doc再添加新的doc,相当于做了两次操作,这里的过程同样会影响collection中所有的索引.下面来看代码吧,更新操作的入口为: void receivedUpdate(Message& m, CurOp& op) {

2012-12-11 21:04:40 6116

原创 mongodb源码分析(十一)数据的删除

本文我们将删除,删除操作概括起来就是遍历将collection中数据对应的索引删除,然后是删除数据,最后将删除的空间加入到之前文章描述的deletelist中.下面我们来看具体的代码吧.删除的入口是receiveDelete函数. void receivedDelete(Message& m, CurOp& op) { DbMessage d(m);

2012-12-10 21:38:05 2106

原创 mongodb源码分析(十)数据的插入

本文我们分析mongodb中数据的插入流程.插入的简单流程可以归结于如下:1. 如果存在对应collection则从collection中分配空间,然后将数据保存到分配的空间中,不存在则先从database中分配对应的collection,若database不存在则分配database,建立xx.ns和xx.0 等文件.2. 根据插入数据更新collection中的索引.下面来看代码,

2012-12-10 21:08:39 3768

原创 mongodb源码分析(九)mongodb的存储管理

1.  mongodb中能够保存的最大collection数目.mongodb官网(Using a Large Number of Collections,)的信息如下:By default MongoDB has a limit of approximately 24,000 namespaces per database. Each namespace is 628 bytes

2012-12-10 19:29:29 4671

原创 mongodb源码分析(八)查询4之mongod文档的匹配

前面用两篇文章讲解了游标的产生流程,下面我们将继续讲解文档的匹配过程.查询的流程很简单就是取出document然后与条件比对,比对成功,在开启shard时还要继续查看当前document是否在在当前的chunkManager中,最后将查看当前文档是否已经记录了,若已经记录则跳过,需要排序则这里将满足要求的文档排序.          当我使用mongodb时我对于查询有几个疑问1.

2012-12-06 16:01:05 3563 1

原创 mongodb源码分析(七)查询3之mongod的cursor的产生(续)

上一篇文章我们说道了mongod对于QueryPlan的选取,由于篇幅过长,所以另起一篇文章接上一篇文章继续谈plan的实际查询流程.        上一篇文章说完了QueryPlanSet::make我们回到:MultiPlanScanner::init. // if _or == false, don't use or clauses for index sele

2012-12-05 18:32:58 2655 2

原创 mongodb源码分析(六)查询3之mongod的cursor的产生

上一篇文章分析了mongod的数据库加载部分,下面这一篇文章将继续分析mongod cursor的产生,这里cursor的生成应该是mongodb系统中最复杂的部分.下面先介绍几个关于mongodb的游标概念.basicCursor: 直接扫描整个collection的游标,可设置初始的扫描位置,扫描为顺序扫描.ReverseCursor: 反向扫描游标,相对于顺序扫描,这里是

2012-12-05 16:22:11 9441 1

原创 mongodb源码分析(五)查询2之mongod的数据库加载

上一篇文章分析到了客户端查询请求的发送,接着分析服务端的处理动作,分析从服务端响应开始到数据库正确加载止,主要流程为数据库的读入过程与用户的认证.        mongod服务对于客户端请求的处理在mongo/db/db.cpp MyMessageHandler::process中,其中调用了函数assembleResponse完成请求响应,我们就从这个函数开始入手分析,代码很长,删

2012-12-04 18:32:21 3442 1

原创 mongodb源码分析(四)查询1之mongo的查询请求

在之前的2篇文章中分别分析了mongod和mongo的启动流程,下面开始将分析mongodb的查询,由于查询部分流程比较长,将分成mongo端的请求,mongod端的数据库的加载,mongod query的选取,mongod文档的匹配与数据的响应几部分来分析。         首先进入mongo的查询请求部分.mongo的查询请求部分归纳起来很简单就是将请求分装成一个Message结构,然后将

2012-12-04 13:32:40 8859 1

原创 mongodb源码分析(三)mongo的启动

mongo是mongodb的一个C++写的javascript交互式的可执行客户端。为了分析mongod对于服务请求的响应,这里分析下mongo。先来看看mongo的启动,mongo的启动代码在mongo/shell/dbshell.cpp中。其支持两个javascript 引擎,因为用visual stdio2012调试时默认编译的是spidermonkey,那么就分析spidermonkey那

2012-12-03 20:47:28 5517 1

原创 mongodb源码分析(二)mongod的启动

mongod是mongodb的存储服务器,其代码入口在mongo/db/db.cpp中,mongod的大部分代码都在mongo/db这个文件夹中。int main(int argc, char* argv[]) { int exitCode = mongoDbMain(argc, argv); ::_exit(exitCode); } static int mo

2012-12-03 18:35:55 5960 1

原创 mongodb2.2源码分析(一)概述

学习了一段时间的mongodb,有必要写些文章记录下自己的研究结果。后面我将陆续对mongodb2.2的查询,插入,删除,修改,日志等等部分实现流程进行分析,分析将覆盖mongo,mongod,mongos三部分。网上已经有一篇对于mongodb的源码分析:http://www.cnblogs.com/daizhj/category/260889.html我在学习mongodb时也参考过,作者写得

2012-12-03 15:54:15 5518

LINUX C常用函数

包括信号啊 进程啊 字符操作啊等等 网上找的资源

2009-04-25

GNU make中文手册3.8

GNU make中文手册ver3.8. 详细的的GNU MAKE使用手册

2009-04-08

fltk-2.0.x-r6671在VC6.0下编译的静态库

实在费了好多事,才编译通过了的。那家伙的工程下少了个文件。所以想要点分。见谅。

2009-03-25

windows网络编程第二版英文版源代码

windows网络编程第二版英文版源代码 有C++和vb

2009-03-25

windows网络编程第二版英文版

讲讲WinSock,是windows网络编程内容。英文第二版

2009-03-25

软件加密与解密 加密与解密的姊妹篇

软件加密与解密 加密与解密的姊妹篇 讲解加密与解密

2009-03-25

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除