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