自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 收藏
  • 关注

原创 postgresql的shared memory

postgresql是多进程的,这个 shared memory 就是多个进程中进行通信用的,是用共享内存实现的在 storage/ipc/ipci.c 中的 voidCreateSharedMemoryAndSemaphores(bool makePrivate, int port) 函数中主要包括shmem index table 类型是 hash table在shared m

2010-01-13 17:00:00 2358

原创 postgresql的内存分配

pg为了分配内存的时候,方便管理,不产生内存泄露,引入了MemoryContext,所有的内存全从MemoryContext 中进行分配,所有的MemoryContext构成一棵树,树的根结点为 TopMemoryContext ,TopMemoryContext 只初始化一次,在数据据库启动过程中完成初始化每次分配是从 CurrentMemoryContext ,上面进行分配的主要用

2010-01-13 17:00:00 1609

原创 postgresql中的spin lock

这是和硬件相关,使用操作系统底层函数实现的封锁,实现部分在 storage/lmgr/s_lock.c 中这种封锁的锁 就是一个整数, 且只有两个值,1 表时封锁,0 表示解锁,封锁就是调用系统函数将锁置为1, 解锁就是直接置0spin lock是其它封锁的基础,别的封锁全是在 spin lock 上面实现的

2010-01-13 16:59:00 686

原创 postgreSQL 的 lightweight lock

LWLocks are normally used to protect not-very-long sections of computation typedef struct LWLock{slock_t   mutex;          /* Protects LWLock and queue of PGPROCs */bool   releaseOK;    

2010-01-13 16:58:00 1058

原创 postgreSQL 的 dynamic hash table

dynamic hash table 是只存在于内存中,不向硬盘写的,为了便于内存查找的数据结构,不是indexdynamic hash table 既可以存在本进程的私有内存,也可以存在共享内存中,dynamic hash table 中存在多个directory, 每个directory存在多个 segment, 每个segment其实就是 bucket 链表的首指针,hash 值相同

2010-01-13 16:57:00 1106

原创 postgreSQL 中的 Lock

typedef struct LOCK{/* hash key */LOCKTAG   tag;    /* unique identifier of lockable object *//* data */LOCKMASK grantMask;   /* bitmask for lock types already granted */LOCKMASK waitMask;   /* bitm

2010-01-13 16:55:00 2917

原创 memcachedb 分析

memcachedb 是 memcached 加了一个存储层,就是用Berkeley DB来存储数据,最新版本是1.20,分析了一下,感觉就是从网下到的版本就是把memcached 和 Berkeley DB的简单拼装,并没有用到两者紧密的结合起来,之所以会这样,一种可能是网上发布的版本是简化过的,实际使用的版本没有发布网上公布的memcachedb 1.20 ,并没有用到HASH,每次取

2010-01-13 15:32:00 995

原创 Lemur的参数文件

Lemur Toolkit是一个新兴的实验系统。它由卡耐基-梅隆大学(CMU)开发,在2001年公布了第一个公开的版本,目前最新版本是4.6。其特点是在检索中引入了语言模型,更重要的是,它不仅是一个完整的检索系统,而且是以工具包的形式提供的。各功能模块都有良好的封装,并提供清晰的源代码和丰富的文档说明,研究者使用它搭建自己的实验系统易如反掌。 Lemur Toolkit的设计目标是促进和帮助在

2010-01-12 16:11:00 2800 2

原创 Lemur生成索引

2.2生成索引 Lemur Toolkit建立对XML文档建立索引的过程,和其它检索系统很相似,主要分为文档的解析,去除stopword和取词根,统计tf,存入硬盘。过程如图一所示。 2.2.1 TextTokenizer 这部分是把XML文档拆分成对应的单词和元素结点的集合,生成的结构体为TokenizedDocument。其中单词是存在向量terms中,对应的位置是通过

2010-01-12 16:10:00 1873 2

原创 Lemur的Disk Index 一

Disk Index主要是把Memory Index存储到硬盘上的文件组织。它由一系列的物理文件组成。存储方式主要有Bulk tree和普通文件,XML三种类型。  Bulk tree是Btree的一种简化形式,相当于静态的Btree,Key可以为字符串或整数,Value是一个指定长度的字符数组,大小不能大于8K,在Bulk tree的实现代码中没有结点的分裂和合并算法,所以插入时必须把要

2010-01-12 16:08:00 1297

原创 Lemur的disk index

Manifest主要保存索引的XML文档集的统计信息和索引的元素结点的统计信息。一个示例如下:      Apr 10 2008                   1             2             9             8             35231             5799             

2010-01-12 16:03:00 1148

原创 Lemur的查询执行

语言模型 语言模型假设每个XML文档都会产生一个不同的模型,这个假设可以充许对每个XML文档运用统计原理来评估它的模型以及为每个XML文档打分。我们把每个XML文档看成是一组单词的序列,每个XML文档的语言模型是一组单词集合的概率分布。在大部分的时候,XML文档的概率分布被认为是多维的,例如,多维柏努利概率分布。一种简单而有效的计算单词w出现在XML文档的概率的方法是P(w |D): 

2010-01-12 16:02:00 986

原创 Lemur的检索过程

Lemur的检索过程如下图所示,主要包括语句的解析,索引的查找,打分和排序三个部分,具体过程如图四所示。    查询执行是按以下步骤执行的:1.        根据查询语句中要查询的单词term去frequentString或infrequentString中找出倒排索引在invertedFile中的起始位置和长度。2.        根据1中得到的invertedFile中的起始位置

2010-01-12 16:01:00 1265

原创 如何实现DWR的多人同时开发

这几天研究了一下DWR,觉的有了这个东东后,Ajax就非常Easy了,可以说是不用学了,我用的是1.1.1的版本,2.0的版本目前还在开发,具体的网址是http://getahead.ltd.uk/dwr/documentation,里面说的很简单,对Web开发比较熟的化,一天就能全学会,不过要做好的话,还是需要在工作中遇到具体的问题再具体解决,再和Spring和Hibernate一结合的化,感觉

2010-01-12 15:45:00 622

原创 用jawin动态生成word

最近一个项目要用JAVA动态生成WORD,采用了几种方案,如POI等,最终选择了jawin,这是一个在java环境下操作dll或lib的工具,其实就是把VBA写的脚本改在JAVA下能运行的.经过几天的试验,终于可以生成图片,生成表格,文字对齐,设置字体和颜色了,实际的项目中又对它进行了封装,我这里只把简化的版本发布出来,希望对大家有些帮助.package ww.examples.jawin;

2010-01-12 15:44:00 1343

原创 postgresql 的buffer 的clock sweep 算法

typedef struct sbufdesc{BufferTag tag;    /* ID of page contained in buffer */BufFlags flags;    /* see bit definitions above */uint16   usage_count; /* usage counter for clock sweep code */unsigned r

2010-01-12 11:00:00 1830

原创 postgreSQL 的 page

page的结构如下* +----------------+---------------------------------+* | PageHeaderData | linp1 linp2 linp3 ...     |* +-----------+----+---------------------------------+* | ... linpN |           |* +---

2010-01-12 10:59:00 964

原创 postgresSQL的锁总结

总共有三种锁 spin, lwlock, lockspin个数没有限制,做为其它锁的一部分,没有等待队列,就一种锁方式,使用系统调用实现lwlock个数有限制,队列数组实现,短时间修改内存时使用,有等待队列,可以等待,在共享内存中,一个锁对应两种锁方式,排它和共享,lock个数有限制,hash实现,进程或事务上锁,可以等待,在共享内存中,一个锁对应多种封锁方式

2010-01-12 10:58:00 886

原创 在ubuntu8.04中单步调试postgresql

先装readline包sudo apt-get install libreadline5-dev zlib1g-dev安装flex,为安装postgis使用sudo apt-get install flex(1)PostgreSQL 的安装tar jzvf postgresql-8.3.1.tar.bz2cd postgresql-8.3.1.tar.bz2./configure --prefix

2010-01-12 10:53:00 6995

原创 在VS2008上面单步调试pgsql9.2

对于9.2 用vs2008对于flex总报错,把bison下的 libintl3.dll regex2.dll libiconv2.dll m4.exe 向flex\bin下面拷一份msvc\buildenv.pl 中的内容 $ENV{PATH}=$ENV{PATH}.';C:/pg/bison/bin;C:/pg/diffutils/bin;C:/pg/flex/bin;C:/pg/ge

2010-01-12 10:51:00 1576 1

原创 Bitmap分析

在bitmap中用一位来表示page是否被占用,1表示被占用,0表示没被占用,计算机里面处理的位数最少的变量是byte,所以也就是8位做为一个整体来对待,8位表示的整数是从0到255,firstHoleSize [] lastHoleSize [] maxHoleSize [] maxHoleOffset [] 是四个固定的数组,每个数组都有256个元素,对应从0到255的整数,每个整数的二进

2010-01-12 10:50:00 1734 1

原创 MetaTable

fastdb 只有一个MetaTable,内容如下metaTableFields[] = {         { "name", dbField::tpString, sizeof(dbVarying),           offsetof(dbTable, name)},        { "fields", dbField::tpArray, sizeof(dbVarying),    

2010-01-12 10:49:00 1777

原创 数据库文件组织结构

dbHeader(4096).......| index(默认512*1024) ....... | shadowIndex(默认512*1024) ........| bitmap page (默认计算出来是9个,4*4096,占用的置1,表示已占用).........| page(4096) | page(4096) | ............ fastdb只有一个数据文

2010-01-12 10:48:00 2406

原创 fastdb的事务与恢复

请先看fastdb自带的文档,这里只对里面进行一些解释 fastdb只支持multiple-readers-single-write的封锁机制,就是说当是写锁时会封锁整个数据库,不充许进行其它操作,在看源代码时,也没找到死锁检查的部分,只找到了读锁向写锁升级的部分,而且封锁会持续到事务结束才放弃,这种锁机制造成了事务的实现也比较简单,当向数据库中更新一条记录时,1.要申请新的空间,

2010-01-12 10:47:00 1614

原创 fastdb中的数据字典

在程序的启动过程中,第一项任务,在没执行main函数之前,通过REGISTER宏定义,把表的结构存储在一个全局变量的列表中static dbTableDescriptor* chain;,由于此时数据库还没有启动,所以结构只存储在内存中,在硬盘上是不存在的,当调用数据库的open函数时,里面调用loadScheme函数,把内存中的表结构存储到硬盘上,这个函数还可以进行反向操作,就是把硬盘上已有

2010-01-12 10:47:00 1358

原创 fastdb中记录的插入,更新,和删除,查询

记录的插入记录的插入首先从内存中的dbTableDescriptor链表中找到对应的表oid,从硬盘上读取dbTable,之后分配记录空间,把记录存入硬盘,分配记录的oid,根据dbTable中的lastRow,把新的记录链入双向链表中,如果有索引的话,找出对应的字段更新索引,dbTableDescriptor链表相录于数据字典的作用, 更新和删除,也是这个过程,查询的过程,大致也

2010-01-12 10:46:00 2738 1

原创 fastdb的索引

索引主要分为 hashTable, Rtree, TtreehashTalbe 比较简单,直接看代码就行Rtree 就是最简单的Rtree实现,和从网上找到的其它代码区别不大,没有R*tree, R+tree之类的改进,现在默认是两维,查询是根据递归实现的,删除的时候,也是先删除,之后再最新插入 下面主要分析Ttree,请先看下面的论文A study of index stru

2010-01-12 10:45:00 1659

原创 fastdb的REPLICATION SUPPORT

先看文档中的 Fault tolerant support 部分primary node 和 standby node 在主数据文件之外,还多了一个以 cnt 为后缀的文件,这个文件里面存储的是整数数组,有物理上能存多少个页面,这个数组就有多在,数据的每一个元素与一个页面相对应,是只增不减的,当这个页面更新过之后,这个整数就递增,不一定是递增1。这个文件主要是为了增量恢复,当primary n

2010-01-12 10:43:00 1523

原创 memcached 分析

/* powers-of-N allocation structures */typedef struct {    unsigned int size;      /* sizes of items */    unsigned int perslab;   /* how many items per slab */    void **slots;           /* list

2010-01-12 10:39:00 651

原创 memcached 分析二

/*** Structure for storing items within memcached.*/typedef struct _stritem {    struct _stritem *next;    struct _stritem *prev;    struct _stritem *h_next;    /* hash chain next */    rel_time_t    

2010-01-12 10:37:00 648

空空如也

空空如也

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

TA关注的人

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