Skip to content

Latest commit

 

History

History
77 lines (62 loc) · 3.09 KB

README.md

File metadata and controls

77 lines (62 loc) · 3.09 KB

Key Value Store

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,..

Xây dựng kiến thức

Ghi chú: linux system, networking

Hướng dẫn cài đặt

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.

Dùng kvstore đối với mã nguồn bên thứ ba:

  • 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-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ũ
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);