rbtree和hash的全量持久化操作。rbtree的二进制安全。
粗略测试。
This commit is contained in:
55
kvstore.h
55
kvstore.h
@@ -31,7 +31,10 @@
|
||||
#define BIN_SAFE 1
|
||||
|
||||
#define KVS_CMD_LOG_FILE "kvs_cmd_log.db"
|
||||
#define KVS_ARRAY_FILE "kvs_array.db"
|
||||
#define KVS_ARRAY_FILE "kvs_snap_array.db"
|
||||
#define KVS_RBTREE_FILE "kvs_snap_rbtree.db"
|
||||
#define KVS_HASH_FILE "kvs_snap_hash.db"
|
||||
|
||||
|
||||
|
||||
// typedef int (*msg_handler)(char *msg, int length, char *response);
|
||||
@@ -41,7 +44,11 @@ extern int reactor_start(unsigned short port, msg_handler handler);
|
||||
extern int proactor_start(unsigned short port, msg_handler handler);
|
||||
extern int ntyco_start(unsigned short port, msg_handler handler);
|
||||
|
||||
|
||||
extern int init_cmd_log(const char *file, int *logfd);
|
||||
extern int destroy_cmd_log(int logfd);
|
||||
extern int kvs_save_cmd_to_logfile(const uint8_t *cmd, size_t len, int logfd);
|
||||
extern int kvs_replay_log(const char *logfile, int logfd);
|
||||
extern int ksv_clear_log(int logfd);
|
||||
|
||||
#if ENABLE_ARRAY
|
||||
|
||||
@@ -112,6 +119,38 @@ int kvs_array_exist(kvs_array_t *inst, char *key);
|
||||
#define RED 1
|
||||
#define BLACK 2
|
||||
|
||||
#if BIN_SAFE
|
||||
typedef uint8_t KEY_TYPE; // key
|
||||
|
||||
typedef struct _rbtree_node {
|
||||
unsigned char color;
|
||||
struct _rbtree_node *right;
|
||||
struct _rbtree_node *left;
|
||||
struct _rbtree_node *parent;
|
||||
KEY_TYPE *key;
|
||||
uint32_t key_len;
|
||||
KEY_TYPE *value;
|
||||
uint32_t value_len;
|
||||
} rbtree_node;
|
||||
|
||||
typedef struct _rbtree {
|
||||
rbtree_node *root;
|
||||
rbtree_node *nil;
|
||||
} rbtree;
|
||||
|
||||
typedef struct _rbtree kvs_rbtree_t;
|
||||
|
||||
int kvs_rbtree_create(kvs_rbtree_t *inst);
|
||||
void kvs_rbtree_destroy(kvs_rbtree_t *inst);
|
||||
int kvs_rbtree_set(kvs_rbtree_t *inst, const void *key, uint32_t key_len, const void *value, uint32_t value_len);
|
||||
void* kvs_rbtree_get(kvs_rbtree_t *inst, const void *key, uint32_t key_len, uint32_t *out_valuelen);
|
||||
int kvs_rbtree_del(rbtree *inst, const void *key, uint32_t key_len);
|
||||
int kvs_rbtree_mod(kvs_rbtree_t *inst, const void *key, uint32_t key_len, const void *value, uint32_t value_len);
|
||||
int kvs_rbtree_exist(kvs_rbtree_t *inst, const void *key, uint32_t key_len);
|
||||
|
||||
int kvs_rbtree_save(kvs_rbtree_t *inst, const char* filename);
|
||||
int kvs_rbtree_load(kvs_rbtree_t *inst, const char* filename);
|
||||
#else
|
||||
#define ENABLE_KEY_CHAR 1
|
||||
|
||||
#if ENABLE_KEY_CHAR
|
||||
@@ -144,7 +183,7 @@ char* kvs_rbtree_get(kvs_rbtree_t *inst, char *key);
|
||||
int kvs_rbtree_del(kvs_rbtree_t *inst, char *key);
|
||||
int kvs_rbtree_mod(kvs_rbtree_t *inst, char *key, char *value);
|
||||
int kvs_rbtree_exist(kvs_rbtree_t *inst, char *key);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#endif
|
||||
@@ -152,9 +191,6 @@ int kvs_rbtree_exist(kvs_rbtree_t *inst, char *key);
|
||||
|
||||
#if ENABLE_HASH
|
||||
|
||||
#define MAX_KEY_LEN 128
|
||||
#define MAX_VALUE_LEN 512
|
||||
#define MAX_TABLE_SIZE 1024
|
||||
|
||||
#if BIN_SAFE
|
||||
#define MAX_TABLE_SIZE 1024
|
||||
@@ -186,9 +222,14 @@ int kvs_hash_del_bin(kvs_hash_t *h, const void *key, uint32_t key_len);
|
||||
int kvs_hash_exist_bin(kvs_hash_t *h, const void *key, uint32_t key_len);
|
||||
int kvs_hash_count(kvs_hash_t *h);
|
||||
|
||||
int save(kvs_hash_t *h, const char* filename);
|
||||
int kvs_hash_save(kvs_hash_t *inst, const char* filename);
|
||||
int kvs_hash_load(kvs_hash_t *inst, const char* filename);
|
||||
#else
|
||||
|
||||
#define MAX_KEY_LEN 128
|
||||
#define MAX_VALUE_LEN 512
|
||||
#define MAX_TABLE_SIZE 1024
|
||||
|
||||
#define ENABLE_KEY_POINTER 1
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user