UDisk
GPU 가속과 Linux 커널 우회(bypass)를 위해 NVMe 블록 디바이스용으로 설계된, 가장 빠른 ACID 트랜잭션 기반의 영구 Key-Value 스토어입니다.
설정 매개변수 (Configuration Parameters)
가장 중요한 매개변수들:
directory: 설정(configs), 스키마(schemas), 데이터(data), 로그(logs)를 저장할 위치는 어디인가요? 부팅 드라이브인가요?
memory_limit: 얼마나 많은 RAM을 사용할까요? 80%인가요?
value_max_size: 값(values)은 얼마나 커질 수 있나요?
성능 조정 방법?
directories_data: 대용량 데이터를 분리하여 RAID 배열에 넣고 싶으신가요?
gpu_devices: 가속을 위해 빌릴 수 있는 GPU를 가지고 계신가요?
버전 관리 (Versioning)
디스크 I/O (Disk IO)
데이터베이스가 메타데이터를 저장할 경로:
"directory": "/etc/udisk/"
튜플(tuples)에 경로와 제한(limit)을 포함하여 데이터가 저장될 경로들:
"data_directories": [
{
"path": "/mnt/md0/ukv/",
...
사용할 하위 I/O 메커니즘 선택:
"io_mechanism": "posix"
"io_mechanism": "pulling"
"io_mechanism": "polling"
비동기 I/O 메커니즘의 경우 큐 깊이(queue depth)를 설정할 수 있습니다:
랜덤 액세스 메모리 (Random Access Memory)
데이터베이스에 사용 가능한 총 RAM 양 제한:
"memory_limit": 1000000000
캐싱(caching)에 사용될 메모리 양을 제한합니다.
단일 읽기(single reads) 성능에 크게 영향을 미칩니다.
배치 읽기(batch reads) 성능에는 영향을 주지 않습니다.
파일로 플러시(flushing)되기 전에 메모리에서 수집될 최대 항목 개수 제한:
"write_buffer_max_elements": 100000
파일로 플러시되기 전에 메모리에서 수집될 최대 결합 크기(combined size) 제한:
"write_buffer_max_bytes": 100000000
하드웨어 가속 (Hardware Acceleration)
컴팩션(compactions), 논블로킹 가비지 컬렉션(non-blocking garbage collection), 및 폴링 메커니즘에 사용될 스레드 수입니다.
최적의 성능을 위해 고성능 NVMe SSD를 사용할 경우, SSD당 2개 또는 3개의 스레드를 할당하는 것을 권장합니다.
스레드(threads): 데이터베이스에 동시에 접근할 수 있는 스레드 수를 정의합니다.
백그라운드 컴팩션(background compactions)에 사용될 GPU의 정수 식별자 배열 (선택 사항):
"gpu_devices": "all"
"gpu_devices": [-1]
"gpu_devices": [0, 1, 2, 3]
UDisk가 GPU에서 사용할 수 있는 비디오 RAM(Video RAM) 양:
"gpu_memory_limit": 1000000000
구조 (Structure)
가장 큰 값의 크기를 정의합니다:
매우 드문 경우, 모든 값이 같은 크기일 수 있습니다:
로그 구조 병합 트리(Log-Structured-Merge Tree)의 각 레이어가 얼마나 커질 수 있는지 정의합니다:
"level_enlarge_factor": 4
로그 구조 병합 트리의 최상위 크기는 얼마여야 합니까?
"first_level_max_bytes": 1000000000
트랜잭션 (Transactions)
단일 트랜잭션으로 업데이트할 수 있는 최대 항목 수:
"transaction_max_elements": 100000
단일 트랜잭션의 최대 용량. 이 값은 해당 트랜잭션 내 모든 업데이트의 크기를 제한합니다:
"transaction_max_bytes": 100000000
전체 예시 (Full Example)
{
"version": 1,
"threads": 1,
...