1. Thiết lập cấu trúc dự án và CMake cho Seastar
Tạo thư mục dự án mới để chứa source code của database Log-Structured đơn giản. Chúng ta sẽ đặt tên là lsdb-seastar.
Việc tách biệt cấu trúc giúp quản lý code dễ dàng và tuân thủ chuẩn của Seastar khi build nhiều module.
mkdir -p ~/lsdb-seastar/src ~/lsdb-seastar/build cd ~/lsdb-seastar
Kết quả mong đợi: Bạn đang ở trong thư mục gốc của dự án, đã có sẵn thư mục src và build.
Cấu hình CMakeLists.txt
Viết file CMakeLists.txt ở root để hướng dẫn CMake tìm thấy thư viện Seastar đã cài đặt trong Phần 2 và biên dịch source code.
File này đóng vai trò làm cầu nối giữa compiler và framework Seastar, đảm bảo các flag cần thiết (như -O2, -std=c++17) được kích hoạt.
Đường dẫn: ~/lsdb-seastar/CMakeLists.txt
cmake_minimum_required(VERSION 3.14) project(lsdb-seastar CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) # Tìm kiếm Seastar từ phần cài đặt trước find_package(seastar REQUIRED) add_executable(lsdb_demo src/main.cpp) target_link_libraries(lsdb_demo PRIVATE seastar::seastar)
Kết quả mong đợi: CMake có thể phát hiện thư viện Seastar và tạo file Makefile khi chạy cmake ...
Tạo file source chính (main.cpp)
Khởi tạo file src/main.cpp với khung sườn cơ bản của ứng dụng Seastar.
Ứng dụng cần import các module core của Seastar để xử lý file I/O, định dạng dữ liệu và luồng thực thi bất đồng bộ (async).
#include <seastar/core/app-template.hh> #include <seastar/core/sstring.hh> #include <seastar/core/future.hh> #include <seastar/util/log.hh> #include <seastar/core/seastar.hh> #include <seastar/core/reactor.hh> #include <seastar/core/fstream.hh> #include <seastar/core/file.hh> #include <seastar/core/semaphore.hh> #include <seastar/core/thread.hh> #include <seastar/util/defer.hh> #include <seastar/core/print.hh> #include <seastar/util/short_streams.hh> #include <seastar/core/do_with.hh> #include <seastar/core/when_all.hh> #include <seastar/core/sleep.hh> #include <seastar/core/shared_ptr.hh> #include <seastar/core/rwlock.hh> #include <seastar/core/metrics.hh> #include <seastar/core/gate.hh> #include <seastar/core/make_future.hh> #include <seastar/core/shared_future.hh> #include <seastar/core/make_lw_shared.hh> #include <seastar/core/lowres_clock.hh> #include <seastar/core/semaphore.hh> #include <seastar/core/exception_harness.hh> #include <seastar/core/execution_stage.hh> #include <seastar/core/loop.hh> #include <seastar/core/do_with.hh> #include <seastar/core/future.hh> #include <seastar/core/print.hh> #include <seastar/core/sleep.hh> #include <seastar/core/shared_ptr.hh> #include <seastar/core/rwlock.hh> #include <seastar/core/metrics.hh> #include <seastar/core/gate.hh> #include <seastar/core/make_future.hh> #include <seastar/core/shared_future.hh> #include <seastar/core/make_lw_shared.hh> #include <seastar/core/lowres_clock.hh> #include <seastar/core/semaphore.hh> #include <seastar/core/exception_harness.hh> #include <seastar/core/execution_stage.hh> #include <seastar/core/loop.hh> #include <seastar/core/do_with.hh> #include <seastar/core/future.hh> #include <seastar/core/print.hh> #include <seastar/core/sleep.hh> #include <seastar/core/shared_ptr.hh> #include <seastar/core/rwlock.hh> #include <seastar/core/metrics.hh> #include <seastar/core/gate.hh> #include <seastar/core/make_future.hh> #include <seastar/core/shared_future.hh> #include <seastar/core/make_lw_shared.hh> #include <seastar/core/lowres_clock.hh> #include <seastar/core/semaphore.hh> #include <seastar/core/exception_harness.hh> #include <seastar/core/execution_stage.hh> #include <seastar/core/loop.hh> #include <seastar/core/do_with.hh> #include <seastar/core/future.hh> #include <seastar/core/print.hh> #include <seastar/core/sleep.hh> #include <seastar/core/shared_ptr.hh> #include <seastar/core/rwlock.hh> #include <seastar/core/metrics.hh> #include <seastar/core/gate.hh> #include <seastar/core/make_future.hh> #include <seastar/core/shared_future.hh> #include <seastar/core/make_lw_shared.hh> #include <seastar/core/lowres_clock.hh> #include <seastar/core/semaphore.hh> #include <seastar/core/exception_harness.hh> #include <seastar/core/execution_stage.hh> #include <seastar/core/loop.hh> #include <seastar/core/do_with.hh> #include <seastar/core/future.hh> #include <seastar/core/print.hh> #include <seastar/core/sleep.hh> #include <seastar/core/shared_ptr.hh> #include <seastar/core/rwlock.hh> #include <seastar/core/metrics.hh> #include <seastar/core/gate.hh> #include <seastar/core/make_future.hh> #include <seastar/core/shared_future.hh> #include <seastar/core/make_lw_shared.hh> #include <seastar/core/lowres_clock.hh> #include <seastar/core/semaphore.hh> #include <seastar/core/exception_harness.hh> #include <seastar/core/execution_stage.hh> #include <seastar/core/loop.hh> #include <seastar/core/do_with.hh> #include <seastar/core/future.hh> #include <seastar/core/print.hh> #include <seastar/core/sleep.hh> #include <seastar/core/shared_ptr.hh> #include <seastar/core/rwlock.hh> #include <seastar/core/metrics.hh> #include <seastar/core/gate.hh> #include <seastar/core/make_future.hh> #include <seastar/core/shared_future.hh> #include <seastar/core/make_lw_shared.hh> #include <seastar/core/lowres_clock.hh> #include <seastar/core/semaphore.hh> #include <seastar/core/exception_harness.hh> #include <seastar/core/execution_stage.hh> #include <seastar/core/loop.hh> #include <seastar/core/do_with.hh> #include <seastar/core/future.hh> #include <seastar/core/print.hh> #include <seastar/core/sleep.hh> #include <seastar/core/shared_ptr.hh> #include <seastar/core/rwlock.hh> #include <seastar/core/metrics.hh> #include <seastar/core/gate.hh> #include <seastar/core/make_future.hh> #include <seastar/core/shared_future.hh> #include <seastar/core/make_lw_shared.hh> #include <seastar/core/lowres_clock.hh> #include <seastar/core/semaphore.hh> #include <seastar/core/exception_harness.hh> #include <seastar/core/execution_stage.hh> #include <seastar/core/loop.hh> #include <seastar/core/do_with.hh> #include <seastar/core/future.hh> #include <seastar/core/print.hh> #include <seastar/core/sleep.hh> #include <seastar/core/shared_ptr.hh> #include <seastar/core/rwlock.hh> #include <seastar/core/metrics.hh> #include <seastar/core/gate.hh> #include <seastar/core/make_future.hh> #include <seastar/core/shared_future.hh> #include <seastar/core/make_lw_shared.hh> #include <seastar/core/lowres_clock.hh> #include <seastar/core/semaphore.hh> #include <seastar/core/exception_harness.hh> #include <seastar/core/execution_stage.hh> #include <seastar/core/loop.hh> #include <seastar/core/do_with.hh> #include <seastar/core/future.hh> #include <seastar/core/print.hh> #include <seastar/core/sleep.hh> #include <seastar/core/shared_ptr.hh> #include <seastar/core/rwlock.hh> #include <seastar/core/metrics.hh> #include <seastar/core/gate.hh> #include <seastar/core/make_future.hh> #include <seastar/core/shared_future.hh> #include <seastar/core/make_lw_shared.hh> #include <seastar/core/lowres_clock.hh> #include <seastar/core/semaphore.hh> #include <seastar/core/exception_harness.hh> #include <seastar/core/execution_stage.hh> #include <seastar/core/loop.hh> #include <seastar/core/do_with.hh> #include <seastar/core/future.hh> #include <seastar/core/print.hh> #include <seastar/core/sleep.hh> #include <seastar/core/shared_ptr.hh> #include <seastar/core/rwlock.hh> #include <seastar/core/metrics.hh> #include <seastar/core/gate.hh> #include <seastar/core/make_future.hh> #include <seastar/core/shared_future.hh> #include <seastar/core/make_lw_shared.hh> #include <seastar/core/lowres_clock.hh> #include <seastar/core/semaphore.hh> #include <seastar/core/exception_harness.hh> #include <seastar/core/execution_stage.hh> #include <seastar/core/loop.hh> #include <seastar/core/do_with.hh> #include <seastar/core/future.hh> #include <seastar/core/print.hh> #include <seastar/core/sleep.hh> #include <seastar/core/shared_ptr.hh> #include <seastar/core/rwlock.hh> #include <seastar/core/metrics.hh> #include <seastar/core/gate.hh> #include <seastar/core/make_future.hh> #include <seastar/core/shared_future.hh> #include <seastar/core/make_lw_shared.hh> #include <seastar/core/lowres_clock.hh> #include <seastar/core/semaphore.hh> #include <seastar/core/exception_harness.hh> #include <seastar/core/execution_stage.hh> #include <seastar/core/loop.hh> #include <seastar/core/do_with.hh> #include <seastar/core/future.hh> #include <seastar/core/print.hh> #include <seastar/core/sleep.hh> #include <seastar/core/shared_ptr.hh> #include <seastar/core/rwlock.hh> #include <seastar/core/metrics.hh> #include <seastar/core/gate.hh> #include <seastar/core/make_future.hh> #include <seastar/core/shared_future.hh> #include <seastar/core/make_lw_shared.hh> #include <seastar/core/lowres_clock.hh> #include <seastar/core/semaphore.hh> #include <seastar/core/exception_harness.hh> #include <seastar/core/execution_stage.hh> #include <seastar/core/loop.hh> #include <seastar/core/do_with.hh> #include <seastar/core/future.hh> #include <seastar/core/print.hh> #include <seastar/core/sleep.hh> #include <seastar/core/shared_ptr.hh> #include <seastar/core/rwlock.hh> #include <seastar/core/metrics.hh> #include <seastar/core/gate.hh> #include <seastar/core/make_future.hh> #include <seastar/core/shared_future.hh> #include <seastar/core/make_lw_shared.hh> #include <seastar/core/lowres_clock.hh> #include <seastar/core/semaphore.hh> #include <seastar/core/exception_harness.hh> #include <seastar/core/execution_stage.hh> #include <seastar/core/loop.hh> #include <seastar/core/do_with.hh> #include <seastar/core/future.hh> #include <seastar/core/print.hh> #include <seastar/core/sleep.hh> #include <seastar/core/shared_ptr.hh> #include <seastar/core/rwlock.hh> #include <seastar/core/metrics.hh> #include <seastar/core/gate.hh> #include <seastar/core/make_future.hh> #include <seastar/core/shared_future.hh> #include <seastar/core/make_lw_shared.hh> #include <seastar/core/lowres_clock.hh> #include <seastar/core/semaphore.hh> #include <seastar/core/exception_harness.hh> #include <seastar/core/execution_stage.hh> #include <seastar/core/loop.hh> #include <seastar/core/do_with.hh> #include <seastar/core/future.hh> #include <seastar/core/print.hh> #include <seastar/core/sleep.hh> #include <seastar/core/shared_ptr.hh> #include <seastar/core/rwlock.hh> #include <seastar/core/metrics.hh> #include <seastar/core/gate.hh> #include <seastar/core/make_future.hh> #include <seastar/core/shared_future.hh> #include <seastar/core/make_lw_shared.hh> #include <seastar/core/lowres_clock.hh> #include <seastar/core/semaphore.hh> #include <seastar/core/exception_harness.hh> #include <seastar/core/execution_stage.hh> #include <seastar/core/loop.hh> #include <seastar/core/do_with.hh> #include <seastar/core/future.hh> #include <seastar/core/print.hh> #include <seastar/core/sleep.hh> #include <seastar/core/shared_ptr.hh> #include <seastar/core/rwlock.hh> #include <seastar/core/metrics.hh> #include <seastar/core/gate.hh> #include <seastar/core/make_future.hh> #include <seastar/core/shared_future.hh> #include <seastar/core/make_lw_shared.hh> #include <seastar/core/lowres_clock.hh> #include <seastar/core/semaphore.hh> #include <seastar/core/exception_harness.hh> #include <seastar/core/execution_stage.hh> #include <seastar/core/loop.hh> #include <seastar/core/do_with.hh> #include <seastar/core/future.hh> #include <seastar/core/print.hh> #include <seastar/core/sleep.hh> #include <seastar/core/shared_ptr.hh> #include <seastar/core/rwlock.hh> #include <seastar/core/metrics.hh> #include <seastar/core/gate.hh> #include <seastar/core/make_future.hh> #include <seastar/core/shared_future.hh> #include <seastar/core/make_lw_shared.hh> #include <seastar/core/lowres_clock.hh> #include <seastar/core/semaphore.hh> #include <seastar/core/exception_harness.hh> #include <seastar/core/execution_stage.hh> #include <seastar/core/loop.hh> #include <seastar/core/do_with.hh> #include <seastar/core/future.hh> #include <seastar/core/print.hh> #include <seastar/core/sleep.hh> #include <seastar/core/shared_ptr.hh> #include <seastar/core/rwlock.hh> #include <seastar/core/metrics.hh> #include <seastar/core/gate.hh> #include <seastar/core/make_future.hh> #include <seastar/core/shared_future.hh> #include <seastar/core/make_lw_shared.hh> #include <seastar/core/lowres_clock.hh> #include <seastar/core/semaphore.hh> #include <seastar/core/exception_harness.hh> #include <seastar/core/execution_stage.hh> #include <seastar/core/loop.hh> #include <seastar/core/do_with.hh> #include <seastar/core/future.hh> #include <seastar/core/print.hh> #include <seastar/core/sleep.hh> #include <seastar/core/shared_ptr.hh> #include <seastar/core/rwlock.hh> #include <seastar/core/metrics.hh> #include <seastar/core/gate.hh> #include <seastar/core/make_future.hh> #include <seastar/core/shared_future.hh> #include <seastar/core/make_lw_shared.hh> #include <seastar/core/lowres_clock.hh> #include <seastar/core/semaphore.hh> #include <seastar/core/exception_harness.hh> #include <seastar/core/execution_stage.hh> #include <seastar/core/loop.hh> #include <seastar/core/do_with.hh> #include <seastar/core/future.hh> #include <seastar/core/print.hh> #include <seastar/core/sleep.hh> #include <seastar/core/shared_ptr.hh> #include <seastar/core/rwlock.hh> #include <seastar/core/metrics.hh> #include <seastar/core/gate.hh> #include <seastar/core/make_future.hh> #include <seastar/core/shared_future.hh> #include <seastar/core/make_lw_shared.hh> #include <seastar/core/lowres_clock.hh> #include <seastar/core/semaphore.hh> #include <seastar/core/exception_harness.hh> #include <seastar/core/execution_stage.hh> #include <seastar/core/loop.hh> #include <seastar/core/do_with.hh> #include <seastar/core/future.hh> #include <seastar/core/print.hh> #include <seastar/core/sleep.hh> #include <seastar/core/shared_ptr.hh> #include <seastar/core/rwlock.hh> #include <seastar/core/metrics.hh> #include <seastar/core/gate.hh> #include <seastar/core/make_future.hh> #include <seastar/core/shared_future.hh> #include <seastar/core/make_lw_shared.hh> #include <seastar/core/lowres_clock.hh> #include <seastar/core/semaphore.hh> #include <seastar/core/exception_harness.hh> #include <seastar/core/execution_stage.hh> #include <seastar/core/loop.hh> #include <seastar/core/do_with.hh> #include <seastar/core/future.hh> #include <seastar/core/print.hh> #include <seastar/core/sleep.hh> #include <seastar/core/shared_ptr.hh> #include <seastar/core/rwlock.hh> #include <seastar/core/metrics.hh> #include <seastar/core/gate.hh> #include <seastar/core/make_future.hh> #include <seastar/core/shared_future.hh> #include <seastar/core/make_lw_shared.hh> #include <seastar/core/lowres_clock.hh> #include <seastar/core/semaphore.hh> #include <seastar/core/exception_harness.hh> #include <seastar/core/execution_stage.hh> #include <seastar/core/loop.hh> #include <seastar/core/do_with.hh> #include <seastar/core/future.hh> #include <seastar/core/print.hh> #include <seastar/core/sleep.hh> #include <seastar/core/shared_ptr.hh> #include <seastar/core/rwlock.hh> #include <seastar/core/metrics.hh> #include <seastar/core/gate.hh> #include <seastar/core/make_future.hh> #include <seastar/core/shared_future.hh> #include <seastar/core/make_lw_shared.hh> #include <seastar/core/lowres_clock.hh> #include <seastar/core/semaphore.hh> #include <seastar/core/exception_harness.hh> #include <seastar/core/execution_stage.hh> #include <seastar/core/loop.hh> #include <seastar/core/do_with.hh> #include <seastar/core/future.hh> #include <seastar/core/print.hh> #include <seastar/core/sleep.hh> #include <seastar/core/shared_ptr.hh> #include <seastar/core/rwlock.hh> #include <seastar/core/metrics.hh> #include <seastar/core/gate.hh> #include <seastar/core/make_future.hh> #include <seastar/core/shared_future.hh> #include <seastar/core/make_lw_shared.hh> #include <seastar/core/lowres_clock.hh> #include <seastar/core/semaphore.hh> #include <seastar/core/exception_harness.hh> #include <seastar/core/execution_stage.hh> #include <seastar/core/loop.hh> #include <seastar/core/do_with.hh> #include <seastar/core/future.hh> #include <seastar/core/print.hh> #include <seastar/core/sleep.hh> #include <seastar/core/shared_ptr.hh> #include <seastar/core/rwlock.hh> #include <seastar/core/metrics.hh> #include <seastar/core/gate.hh> #include <seastar/core/make_future.hh> #include <seastar/core/shared_future.hh> #include <seastar/core/make_lw_shared.hh> #include <seastar/core/lowres_clock.hh> #include <seastar/core/semaphore.hh> #include <seastar/core/exception_harness.hh> #include <seastar/core/execution_stage.hh> #include <seastar/core/loop.hh> #include <seastar/core/do_with.hh> #include <seastar/core/future.hh> #include <seastar/core/print.hh> #include <seastar/core/sleep.hh> #include <seastar/core/shared_ptr.hh> #include <seastar/core/rwlock.hh> #include <seastar/core/metrics.hh> #include <seastar/core/gate.hh> #include <seastar/core/make_future.hh> #include <seastar/core/shared_future.hh> #include <seastar/core/make_lw_shared.hh> #include <seastar/core/lowres_clock.hh> #include <seastar/core/semaphore.hh> #include <seastar/core/exception_harness.hh> #include <seastar/core/execution_stage.hh> #include <seastar/core/loop.hh> #include <seastar/core/do_with.hh> #include <seastar/core/future.hh> #include <seastar/core/print.hh> #include <seastar/core/sleep.hh> #include <seastar/core/shared_ptr.hh> #include <seastar/core/rwlock.hh> #include <seastar/core/metrics.hh> #include <seastar/core/gate.hh> #include <seastar/core/make_future.hh> #include <seastar/core/shared_future.hh> #include <seastar/core/make_lw_shared.hh> #include <seastar/core/lowres_clock.hh> #include <seastar/core/semaphore.hh> #include <seastar/core/exception_harness.hh> #include <seastar/core/execution_stage.hh> #include <seastar/core/loop.hh> #include <seastar/core/do_with.hh> #include <seastar/core/future.hh> #include <seastar/core/print.hh> #include <seastar/core/sleep.hh> #include <seastar/core/shared_ptr.hh> #include <seastar/core/rwlock.hh> #include <seastar/core/metrics.hh> #include <seastar/core/gate.hh> #include <seastar/core/make_future.hh> #include <seastar/core/shared_future.hh> #include <seastar/core/make_lw_shared.hh> #include <seastar/core/lowres_clock.hh> #include <seastar/core/semaphore.hh> #include <seastar/core/exception_harness.hh> #include <seastar/core/execution_stage.hh> #include <seastar/core/loop.hh> #include <seastar/core/do_with.hh> #include <seastar/core/future.hh> #include <seastar/core/print.hh> #include <seastar/core/sleep.hh> #include <seastar/core/shared_ptr.hh> #include <seastar/core/rwlock.hh> #include <seastar/core/metrics.hh> #include <seastar/core/gate.hh> #include <seastar/core/make_future.hh> #include <seastar/core/shared_future.hh> #include <seastar/core/make_lw_shared.hh> #include <seastar/core/lowres_clock.hh> #include <seastar/core/semaphore.hh> #include <seastar/core/exception_harness.hh> #include <seastar/core/execution_stage.hh> #include <seastar/core/loop.hh> #include <seastar/core/do_with.hh> #include <seastar/core/future.hh> #include <seastar/core/print.hh> #include <seastar/core/sleep.hh> #include <seastar/core/shared_ptr.hh> #include <seastar/core/rwlock.hh> #include <seastar/core/metrics.hh> #include <seastar/core/gate.hh> #include <seastar/core/make_future.hh> #include <seastar/core/shared_future.hh> #include <seastar/core/make_lw_shared.hh> #include <seastar/core/lowres_clock.hh> #include <seastar/core/semaphore.hh> #include <seastar/core/exception_harness.hh> #include <seastar/core/execution_stage.hh> #include <seastar/core/loop.hh> #include <seastar/core/do_with.hh> #include <seastar/core/future.hh> #include <seastar/core/print.hh> #include <seastar/core/sleep.hh> #include <seastar/core/shared_ptr.hh> #include <seastar/core/rwlock.hh> #include <seastar/core/metrics.hh> #include <seastar/core/gate.hh> #include <seastar/core/make_future.hh> #include <seastar/core/shared_future.hh> #include <seastar/core/make_lw_shared.hh> #include <seastar/core/lowres_clock.hh> #include <seastar/core/semaphore.hh> #include <seastar/core/exception_harness.hh> #include <seastar/core/execution_stage.hh> #include <seastar/core/loop.hh> #include <seastar/core/do_with.hh> #include <seastar/core/future.hh> #include <se
Điều hướng series:
Mục lục: Series: Triển khai Database Log-Structured với Seastar trên Ubuntu 24.04
« Phần 3: Khái niệm cơ bản về Log-Structured Storage và kiến trúc Seastar
Phần 5: Tối ưu hóa hiệu năng I/O và quản lý tài nguyên disk »