{"id":21113452,"url":"https://github.com/thoainguyen/key-value-store","last_synced_at":"2025-04-13T05:50:59.724Z","repository":{"id":144377881,"uuid":"176693669","full_name":"thoainguyen/key-value-store","owner":"thoainguyen","description":"Key value Database using B Tree","archived":false,"fork":false,"pushed_at":"2019-10-27T09:18:41.000Z","size":1882,"stargazers_count":9,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-26T22:35:45.063Z","etag":null,"topics":["b-tree","database","fsync","key-value-store","nonblocking","reader-writer","select","threadpool"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thoainguyen.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-03-20T08:57:55.000Z","updated_at":"2025-02-24T14:55:49.000Z","dependencies_parsed_at":null,"dependency_job_id":"db106e05-4e20-43b8-a4d5-0c2a4622e979","html_url":"https://github.com/thoainguyen/key-value-store","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoainguyen%2Fkey-value-store","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoainguyen%2Fkey-value-store/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoainguyen%2Fkey-value-store/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoainguyen%2Fkey-value-store/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thoainguyen","download_url":"https://codeload.github.com/thoainguyen/key-value-store/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248670501,"owners_count":21142901,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["b-tree","database","fsync","key-value-store","nonblocking","reader-writer","select","threadpool"],"created_at":"2024-11-20T01:43:56.055Z","updated_at":"2025-04-13T05:50:59.715Z","avatar_url":"https://github.com/thoainguyen.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Key Value Store\n\nKey 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,..\n\n## Xây dựng kiến thức\n\n\u003e Ghi chú: [linux system](./docs/kvstore-impl.md), [networking](./docs/network.md)\n\n\n## Hướng dẫn cài đặt\n\nB0. Theo hướng dẫn [kvstore/README.md](kvstore/README.md) để chạy thành công\n\n* Cấu trúc project:\n\n```sh\n.\n├── client\n│   ├── client.c\n│   └── CMakeLists.txt\n├── include\n│   ├── bnode.h\n│   ├── btree.h\n│   ├── kvstore.h\n│   ├── kvpair.h\n│   ├── server.h\n│   ├── thpool.h\n│   └── utils.h\n├── server\n│   ├── CMakeLists.txt\n│   └── server.c\n└── src\n    ├── bnode.c\n    ├── btree.c\n    ├── kvstore.c\n    └── thpool.c\n```\n\n* [btree.h](./kvstore/include/btree.h): định nghĩa cấu trúc btree.\n* [btree.c](./kvstore/src/btree.c) : các hàm hiện thực btree.\n* [bnode.h](./kvstore/src/bnode.c) : định nghĩa cấu trúc bnode.\n* [utils.h](./kvstore/include/utils.h) : các hàm đọc ghi bnode xuống file, và đọc ghi meta data để build tree.\n* [kvpair.h](./kvstore/include/kvpair.h) : định nghĩa struct key value.\n* [server.c](./kvstore/server/server.c) : hiện thực server, socket nonblocking, giao tiếp với btree.\n* [client.c](./kvstore/client/client.c) : hiện thực client, cung cấp kvstore-cli và autotest.\n* [thpool.c](./kvstore/src/thpool.c) : hiện thực threadpool, message queue.\n* [kvstore.h](./kvstore/include/kvstore.h) : cung cấp interface giao tiếp với kvstore.\n* [kvstore.c](./kvstore/src/kvstore.c) : hiện thực kết nối server, process các method insert, search, delete.\n\n## Dùng kvstore đối với mã nguồn bên thứ ba:\n\n* B1: Đầu tiên, chạy chương trình kvstore phía server như ở trên, để cung cấp kvstore service.\n  * Có hai option `-c` và `-l`:\n    * Dùng `-c` khi muốn tạo mới dữ liệu\n    * Dùng `-l` khi muốn chạy kvstore trên dữ liệu cũ\n\n```sh\nkvstore/server/sbuild $ ./server\nusing `./server -c` for create new or `./server -l` for load%\n```\n\n* B2: copy hai file **kvstore.h**, và **kvstore.c** vào project bên thứ ba.\n\n* B3: Các API hỗ trợ:\n\n```c\n/* 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 \u003c 0, thì có lỗi xảy ra*/\nint db = connect_kvstore(HOST, PORT);\n/*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\"*/\nchar *result = kvstore_set(db, key, value);\n/* trong đó key (char*) là khóa, value là giá trị trả về, trả về NULL nếu lỗi xảy ra.*/\nchar *value = kvstore_get(db, key);\n/*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*/\nchar *result = kvstore_delete(db, key);\n/*hàm này dùng để đóng kết nối kvstore*/\nvoid close_kvstore(db);\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthoainguyen%2Fkey-value-store","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthoainguyen%2Fkey-value-store","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthoainguyen%2Fkey-value-store/lists"}