当前位置: 首页 > 工具软件 > tstdb > 使用案例 >

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

步兴德
2023-12-01

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请求操作。



 类似资料: