본문 바로가기

전체 글

(51)
[NIO] FileChannel 과 FileInput/Output Stream 과의 차이 FileChannel 은 Java의 java.nio.channels 패키지에 속하는 클래스로, 파일에서 데이터를 읽고, 쓰고, 매핑하는 기능을 제공한다. FileChannel은 입출력(I/O) 작업에 대해 더 높은 성능과 유연성을 제공하는 NIO (New Input/Output)의 핵심 요소 중 하나이다. 이 클래스는 버퍼와 채널을 사용하여 파일의 데이터를 직접 조작할 수 있는 메커니즘을 제공하여, 기존의 FileInputStream, FileOutputStream, RandomAccessFile 등을 통한 데이터 처리 방식보다 더 효율적인 작업이 가능하다. FileChannel의 주요 역할 읽기 및 쓰기 작업: FileChannel을 통해 파일의 특정 위치에서 데이터를 읽거나 쓸 수 있다. 이를 통해 ..
LSM Tree Compaction (Leveled Compaction) LSM tree 는 주기적인 compaction 을 통해 꾸준히 증가하는 disk 의 table 수를 줄이며, 중복된 키에 대한 조정 작업을 수행한다. compaction 은 병합과 조정 알고리즘을 사용해 전체 record 를 순회하고 결과를 새로 생성한 테이블에 저장한다. LSM tree 의 구조상 disk 에 쓰여져 있는 SSTable 의 record 는 정렬되어 있고, merge sort algorithm 의 특성상 iterator 의 head 만 memory 에 저장하기 때문에 memory 사용량 상한이 존재한다. 이러한 compaction 과정을 최적화 하기 위해 널리 알려진 방법중에 하나가 leveled compaction 이다. Merge - Interation Leveled Compacti..
Mutex vs Semaphore Mutex Mutex 라는 이름은 Mutual Exclustion (상호배제) 를 의미하며 critical section 의 shared data 를 보호하기 위해 사용된다. Mutex 는 한 번에 오직 한개의 thread 가 resource 에 접근하는 것을 허용하며 Java 에서 Mutex 의 전형적인 예시는 Synchronized block 이다. Semaphore Semaphore 는 mutex 와는 다르게 resource 에 제한된 접근을 하기 위해 사용된다. Semaphore 는 제한된 숫자의 허가증을 가지고 있다고 생각하자. 만약 Semaphore 가 가지고 있는 허가증을 모두 사용했을 경우, 허가증을 사용한 이전 thread 가 허가증을 return 할 때까지 신규 thread 의 허가 요..