PostgreSQL的数据存储(二)---数据缓存区和数据存储层的接口
2017-03-13 18:50
525 查看
2 数据缓冲区和数据存储层之间的接口
2.1 存储访问接口层
位于buffer下层的代码,是数据存储层,但数据缓冲区和数据存储层之间,有一个接口存在,位于src/backend/storage/smgr;这一接口,规定了数据缓冲区和数据存储层之间如何交互,如何发生关联。PG的结构良好,很多层之间,可以很好的分离,这点也体现在了本文所讲述的接口之间。接口层,通过抽象,规定了两层之间,发生关联的点;通过定义这些关联的点动作和出入口参数,完整描述了接口层的概貌。
在数据缓冲区的文档中,讲述了ReadBufferExtended函数极其调用的ReadBuffer_common子函数中,可能都涉及的、类似smgrXXX函数的调用,如smgrread,这是buf层的函数发现buf中没有相应的数据可向数据访问层提供,则buf管理器直接向数据库存储层要求IO,使得被要求的数据能够进入buf。
关键数据结构如下:
typedef struct f_smgr
{
void (*smgr_init) (void); /* may be NULL */
void (*smgr_shutdown) (void); /* may be NULL */
void (*smgr_close) (SMgrRelation reln, ForkNumber forknum);
void (*smgr_create) (SMgrRelation reln, ForkNumber forknum,
bool isRedo);
bool (*smgr_exists) (SMgrRelation reln, ForkNumber forknum);
void (*smgr_unlink) (RelFileNodeBackend rnode, ForkNumber forknum,
bool isRedo);
void (*smgr_extend) (SMgrRelation reln, ForkNumber forknum,
BlockNumber blocknum, char *buffer, bool skipFsync);
void (*smgr_prefetch) (SMgrRelation reln, ForkNumber forknum,
BlockNumber blocknum);
void (*smgr_read) (SMgrRelation reln, ForkNumber forknum,
BlockNumber blocknum, char *buffer);
void (*smgr_write) (SMgrRelation reln, ForkNumber forknum,
BlockNumber blocknum, char *buffer, bool skipFsync);
BlockNumber (*smgr_nblocks) (SMgrRelation reln, ForkNumber forknum);
void (*smgr_truncate) (SMgrRelation reln, ForkNumber forknum,
BlockNumber nblocks);
void (*smgr_immedsync) (SMgrRelation reln, ForkNumber forknum);
void (*smgr_pre_ckpt) (void); /* may be NULL */
void (*smgr_sync) (void); /* may be NULL */
void (*smgr_post_ckpt) (void); /* may be NULL */
} f_smgr;
static const f_smgr smgrsw[] = {
/* magnetic disk */
{mdinit, NULL, mdclose, mdcreate, mdexists, mdunlink, mdextend,
mdprefetch, mdread, mdwrite, mdnblocks, mdtruncate, mdimmedsync,
mdpreckpt, mdsync, mdpostckpt
}
};
相关文章推荐
- PostgreSQL的数据存储(三)---数据缓存区和数据存储层的接口
- PostgreSQL的数据存储(三)---数据缓存去和数据存储层的接口
- PostgreSQL的数据存储(二)---数据缓存去和数据存储层的接口
- Google App Engine中的数据存储(1)-JDO与JPA接口
- 简单说说:qt中数据存储方法(接口)的思路
- PostgreSQL的数据存储(十四)---数据存储
- PostgreSQL的数据存储---目录
- PostgreSQL的数据存储(十八)---数据存储的优化
- ClientDataset作为缓存提交数据,后台分析并存储数据
- javascript数据缓存策略之本地存储
- PostgreSQL的数据存储(十二)---数据存储
- PostgreSQL的数据存储(十一)---数据存储
- 修改ODI接口中的目标存储数据模型信息
- qt中数据存储方法(接口)的思路应用1(thinkvd开发日志)
- PostgreSQL的数据存储(四)---虚拟文件管理
- PostgreSQL的数据存储(十三)---数据存储
- 服务器数据存储 主流磁盘接口详解
- PostgreSQL的数据存储(五)---数据存储
- PostgreSQL的数据存储(十六)---数据存储
- Postgresql存储过程--更新或者插入数据