Key value store sử dụng btree làm cấu trúc dữ liệu cho database engine, xử lý bài toán reader/writer, xây dựng non-blocking I/O server, dùng thread pool, message queue,..
Ghi chú: linux system, networking
B0. Theo hướng dẫn kvstore/README.md để chạy thành công
- Cấu trúc project:
.
├── client
│ ├── client.c
│ └── CMakeLists.txt
├── include
│ ├── bnode.h
│ ├── btree.h
│ ├── kvstore.h
│ ├── kvpair.h
│ ├── server.h
│ ├── thpool.h
│ └── utils.h
├── server
│ ├── CMakeLists.txt
│ └── server.c
└── src
├── bnode.c
├── btree.c
├── kvstore.c
└── thpool.c
- btree.h: định nghĩa cấu trúc btree.
- btree.c : các hàm hiện thực btree.
- bnode.h : định nghĩa cấu trúc bnode.
- utils.h : các hàm đọc ghi bnode xuống file, và đọc ghi meta data để build tree.
- kvpair.h : định nghĩa struct key value.
- server.c : hiện thực server, socket nonblocking, giao tiếp với btree.
- client.c : hiện thực client, cung cấp kvstore-cli và autotest.
- thpool.c : hiện thực threadpool, message queue.
- kvstore.h : cung cấp interface giao tiếp với kvstore.
- kvstore.c : hiện thực kết nối server, process các method insert, search, delete.
- B1: Đầu tiên, chạy chương trình kvstore phía server như ở trên, để cung cấp kvstore service.
- Có hai option
-c
và-l
:- Dùng
-c
khi muốn tạo mới dữ liệu - Dùng
-l
khi muốn chạy kvstore trên dữ liệu cũ
- Dùng
- Có hai option
kvstore/server/sbuild $ ./server
using `./server -c` for create new or `./server -l` for load%
-
B2: copy hai file kvstore.h, và kvstore.c vào project bên thứ ba.
-
B3: Các API hỗ trợ:
/* giá trị db dùng để truyền vào các method sau này, HOST, PORT là hostname và port của dbserver, nếu db < 0, thì có lỗi xảy ra*/
int db = connect_kvstore(HOST, PORT);
/*hàm này set giá trị key-value trong kvstore, nếu key đã tồn tại thì giá trị được ghi đè, hàm trả về "OK"*/
char *result = kvstore_set(db, key, value);
/* trong đó key (char*) là khóa, value là giá trị trả về, trả về NULL nếu lỗi xảy ra.*/
char *value = kvstore_get(db, key);
/*hàm này xóa cặp key-value trong kvstore, trả về "OK" nếu thành công và "not exist!" nếu key không tồn tại*/
char *result = kvstore_delete(db, key);
/*hàm này dùng để đóng kết nối kvstore*/
void close_kvstore(db);