Skip to content

thoainguyen/key-value-store

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

Releases

No releases published

Packages

No packages published

Languages