tstdb一个快速简单的key-value store

本文详细介绍了tstdb中bufpool的内存管理机制,包括buffer_t和buffer_pool的数据结构及其操作函数,并概述了tstdb的网络流程,如使用select接受客户端连接及多线程服务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

tstdb is based on a data structure called "Ternary Search Tree",and it is compatible with memcached. More over, it supports prefix searching and range searching.

tstdb的bufpool管理

#ifndef BUFFERPOLL
#define BUFFERPOLL

#define BUF_UNIT_SIZE 512

struct buffer_t{
	char data[BUF_UNIT_SIZE];
	int size;
	int next;
};
typedef struct buffer_t buffer_t;

struct buffer_pool{
	buffer_t * base;
	int head;
};

typedef struct buffer_pool bp_t;

bp_t* bp_new(unsigned int n_items);

buffer_t* alloc_buf(bp_t *this);

buffer_t* get_buf(bp_t *this,unsigned int nth);

void free_buf(bp_t *this , buffer_t* buf);

#endif

函数的作用就不说了,主要说说数据结构。

struct buffer_pool的成员base是一个buffer_t类型的指针。通过这个指针可以形成一个链表或者是数组,head变量时用来指示这个buffer_pool的开始位置,或者是访问的位置。

struct buffer_t{
	char data[BUF_UNIT_SIZE];
	int size;
	int next;
};
这里的next变量时用来连接下一个buffet_t结构体的。但是不是指针的形式,而是一个整数型。

初始化的时候,讲这个next变量设置成[0,n-1],当用户请求n个buffer_t大小的内存的时候。这个next变量和head变量二者结合起来一起对base这个指针指向的数据块进行管理。


tstdb的网络流程:

主要是使用select来accept客户端的连接。开始的时候,初始化到isten一个sockfd,然后创建多个epoll,数量和待会创建的线程数量一样。

在accept前面,创建一定数量的线程,服务客户端的I/O请求操作。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值