FASTER에 대해서

원문

  • KVS 라이브러리
    • 내장 KVS로 사용이 가능
    • 프로세스간 스토리지 공유는 상정하지 않는 듯?
    • 메모리 이상의 DB 크기를 설정 가능(메모리 + 파일 읽기 및 쓰기)
    • LiteDB와 다소 영역이 겹칠 수도(최종 목표는 다르지만)
    • 로그 데이터베이스(내장해성) 및 인-메모리 데이터베이스(성능)의 좋은 부분을 목표로
    • 사용자 정의 update, read 콜백을 설정 가능
      • C# 버전에서는 Roslyn, C++ 버전에서는 템플릿을 사용하여 구현?
  • C# 및 C++ 두 개의 구현이 존재
    • 양자 간의 성능 비교 수치는 없음
  • 복제 등의 기능은 없음
  • 세 종류의 스토리지 출력
    • 온 메모리 (In-Memory)
    • 추기용 로그 (Append-Only)
    • 복합(HybridLog)
  • Upsert에 특히 주력
    • 동시 쓰기 스레드 수에 비례하여 처리량 향상
  • 스토리지 사용량 등에 대한 비교는 없음
  • C# 버전은 netcoreapp 2.1에서 움직이지 않았다
    • 실행시 컴파일에 실패
  • C# 버전은 디폴트 구현은 Windows(x86 계)만 지원
    • Windows 특정 파일 처리Tick 취득 명령이 있고, 거기만 네이티브 처리하기 때문에
      • 파일 신장과 Tick 취득은 Linux에서도 동등한 API는 존재하기 때문에이 두 DLL을 대체 자체는 어렵지 않을듯? (rdtsc 대해 x86 의존이라는 문제는 있다)
      • 스토리지 관련 작업을 보면 CreateFile를 직접 호출하는 부분이 있기 때문에 결국 중간 중간 어려울 것 같은 인상
    • 사용되는 것은 주로 IDevice 구현 클래스 내(cs/core/Device 이하)이므로, 여기를 자력 구현하면 될듯?
    • 플랫폼 의존 위치와 그렇지 않은 부분의 분리는 가능할 듯(readtsc 이나 벤치 마크에서만 사용 되고 있다)
  • 사용자 정의 작업을 오버 헤드 없이 수행하기 위해 C# 버전은 처음 시작할 때 대상 데이터 구조에 맞춘 처리를 코드 생성한다
  • C++ 버전은 크로스 플랫폼 (x86 계만) 지원
    • Win + 32bit, Win + 64bit, Linux + 32bit, Linux + 64bit
      • Mac, xBSD 불명 (아마 안 될긋)
    • 플랫폼 마다 빌드가 필요
    • 모든 플랫폼에서 cmake가 필요
    • Win 판은 특히 VS2017 + C++ 지원이 필요
    • Linux 용 빌드의 경우 종속 라이브러리가 약간 많다
      • vcpkg 가 절대로 편할듯

이 글은 2018-11-18에 작성되었습니다.