록스DB

RocksDB
원저자드루바 보르타쿠르
개발자메타 플랫폼스 (과거 페이스북)
발표일2012년 5월(14년 전)(2012-05)
프로그래밍 언어C++
운영 체제Windows, macOS, 리눅스, FreeBSD, OpenBSD, 솔라리스, AIX
플랫폼크로스 플랫폼
종류임베디드 데이터베이스
라이선스아파치 2.0 또는 GPL 2
웹사이트rocksdb.org

록스DB(RocksDB)는 키-값 데이터를 위한 고성능 임베디드 데이터베이스이다. 이 소프트웨어는 멀티 코어 CPU를 최대한 활용하고 솔리드 스테이트 드라이브(SSD)와 같은 빠른 저장 장치를 효율적으로 사용하여 입출력(I/O) 집약적 작업 부하를 처리하도록 최적화된 구글 LevelDB의 포크이다. 로그 구조화 병합 트리(LSM 트리) 데이터 구조를 기반으로 한다. C++로 작성되었으며 C++, C, 자바에 대한 공식 언어 바인딩을 제공한다. 그 외 많은 서드 파티 언어 바인딩이 존재한다. 록스DB는 원래 BSD 3-조항 라이선스로 배포된 자유-오픈 소스 소프트웨어이다. 하지만 2017년 7월, 프로젝트는 아파치 2.0 및 GPLv2 이중 라이선스로 전환되었다. 이러한 변경은 이전의 BSD+특허 라이선스 조항이 블랙리스트에 오른 후 아파치 소프트웨어 재단 프로젝트에 채택되는 데 도움이 되었다.

록스DB는 페이스북, 야후!, 링크드인을 포함한 다양한 확장성을 갖춘 기업들의 운영 시스템에서 사용된다.

특징

록스DB는 LevelDB와 마찬가지로 키와 값을 임의의 바이트 배열로 저장하며, 데이터는 키를 기준으로 바이트 단위로 정렬되거나 사용자 지정 비교기(comparator)를 통해 정렬된다.

록스DB는 LevelDB의 모든 기능을 제공하며 추가로 다음을 지원한다:

기타 등등.

록스DB는 SQL 데이터베이스가 아니다(비록 마이록스가 록스DB와 MySQL을 결합하지만). 다른 NoSQL 및 DBM 저장소와 마찬가지로 관계형 모델을 지원하지 않으며 SQL 쿼리를 지원하지 않는다. 또한 보조 인덱스를 직접 지원하지 않지만, 사용자가 컬럼 패밀리를 사용하여 내부적으로 구축하거나 외부적으로 구축할 수 있다. 록스DB는 서버나 명령줄 인터페이스를 제공하지 않으므로 애플리케이션은 록스DB를 라이브러리로 사용한다.

역사

록스DB는 2012년 4월 페이스북의 드루바 보르타쿠르에 의해 생성되었다. 이는 서버 워크로드 성능 개선이라는 명확한 목표를 가지고 LevelDB를 포크한 것이다.

통합

임베디드 가능한 데이터베이스로서 록스DB는 더 큰 데이터베이스 관리 시스템(DBMS) 내부의 저장 엔진으로 사용될 수 있다. 예를 들어, 록셋은 주로 분석 데이터 처리를 위해 록스DB를 사용한다.

대체 백엔드

다음 프로젝트들은 기존 데이터베이스 시스템의 저장 엔진을 록스DB로 교체하거나 대체 엔진을 제공하기 위해 시작되었다.

ArangoDB

아랑고DB는 기존 저장 엔진("mmfiles")에 록스DB를 추가했다. ArangoDB 3.4 버전부터 록스DB가 기본 저장 엔진으로 설정되었다.

카산드라

페이스북의 인스타그램 팀은 코드를 개발하고 오픈 소스로 공개했으며, 성능 결과에 대한 벤치마크도 함께 공개했다.

MariaDB

MariaDB는 MariaDB 10.2.5(알파 상태)부터 MyRocks 저장 엔진(RocksDB에서 포크됨)을 사용할 수 있으며, 2018년 MariaDB 10.2.16부터 안정화되었다.

몽고DB

MongoRocks 프로젝트는 저장 엔진이 록스DB인 몽고DB용 저장 모듈을 제공한다.

관련 프로그램인 Rocks Strata는 Go로 작성된 도구로, 록스DB가 저장 엔진으로 사용될 때 몽고DB의 증분 백업 관리를 허용한다.

MySQL

MyRocks 프로젝트는 MySQL을 위한 새로운 록스DB 기반 저장 엔진을 생성했다. MyRocks에 대한 상세한 내용은 Percona Live 2016에서 발표되었다.

Oxigraph

옥시그래프은 록스DB를 기반으로 하는 SPARQL 표준을 구현한 그래프 데이터베이스이다.

UKV

UKV 프로젝트는 사용자가 기반 키-값 저장소로서 LevelDB와 동등하게 록스DB를 사용할 수 있게 한다. 이 프로젝트는 모든 저장 엔진에 공통적인 CRUD 작업에 대한 공유 추상화를 나타낸다. 또한 파이썬, 자바, Go를 포함한 여러 고급 언어에 대한 구조화된 바인딩을 추가한다.

임베디드

다음 데이터베이스 시스템 및 애플리케이션은 임베디드 저장 엔진으로 록스DB를 선택했다.

Ceph의 BlueStore

Ceph의 BlueStore 저장 레이어는 OSD 장치의 메타데이터 관리를 위해 록스DB를 사용한다.

아파치 플링크

아파치 플링크는 체크포인트를 저장하기 위해 록스DB를 사용한다.

FusionDB

FusionDB는 XML, 키/값 및 JSON 저장 엔진으로 록스DB를 사용한다.

LogDevice LogsDB

LogDevice의 LogsDB는 록스DB 위에 구축되었다.

Kafka Streams

Kafka Streams는 상태 저장소를 위해 록스DB를 사용한다.

Manhattan

Manhattan 분산 키-값 저장소는 2018년부터 트위터 데이터를 저장하는 기본 엔진으로 록스DB를 사용해 왔다.

Rockset

운영 데이터 분석에 사용되는 록셋 서비스는 록스DB를 저장 엔진으로 사용한다.

SSDB

ssdb-rocks 프로젝트는 SSDB NoSQL 데이터베이스의 저장 엔진으로 록스DB를 사용한다.

TiDB

TiDB 프로젝트는 저장 엔진으로 록스DB를 사용한다.

YugabyteDB

유가바이트DB 데이터베이스는 DocDB 저장 엔진의 일부로 수정된 버전의 록스DB를 사용한다.

서드 파티 언어 바인딩

록스DB에서 사용 가능한 서드 파티 프로그래밍 언어 바인딩은 다음과 같다.

같이 보기

각주

  1. ↑ “Performance Benchmarks”. 《깃허브》. 2015년 11월 29일에 확인함.
  2. ↑ “Benchmarking the leveldb family”. 2014년 7월 7일. 2016년 3월 10일에 확인함.
  3. ↑ “Comparing LevelDB and RocksDB, take 2”. 2015년 4월 27일. 2016년 3월 10일에 확인함.
  4. ↑ “Benchmarking LevelDB vs. RocksDB vs. HyperLevelDB vs. LMDB Performance for InfluxDB”. 2014년 6월 20일. 2016년 3월 10일에 확인함.
  5. ↑ Golan-Gueta, Guy; Bortnikov, Edward; Hillel, Eschar; Keidar, Idit (2015년 4월 21일). 〈Scaling concurrent log-structured data stores〉. 《Proceedings of the Tenth European Conference on Computer Systems》. 1–14쪽. doi:10.1145/2741948.2741973. ISBN 9781450332385. S2CID 5849146.
  6. ↑ “Facebook's latest open source effort: a flash-powered database called RocksDB”. 2013년 11월 21일. 2020년 2월 24일에 원본 문서에서 보존된 문서. 2016년 3월 10일에 확인함.
  7. ↑ “Under the Hood: Building and open-sourcing RocksDB”. 《페이스북》. 2016년 3월 10일에 확인함.
  8. ↑ “RocksDB - Facebook's Database Now Open Source”. 2016년 3월 10일에 확인함.
  9. ↑ “GitHub pull request”. 《깃허브》. 2017년 7월 20일에 확인함.
  10. ↑ “Apache says 'no' to Facebook code libraries”. 《더 레지스터》. 2017년 7월 20일에 확인함.
  11. ↑ “GitHub issue”. 《깃허브》. 2017년 7월 20일에 확인함.
  12. ↑ “RocksDB on Steroids”. 2016년 3월 10일에 확인함.
  13. ↑ “Benchmarking Apache Samza: 1.2 million messages per second on a single node”. 2016년 3월 10일에 확인함.
  14. ↑ “Users.md”. 《깃허브》. 2015년 12월 1일에 확인함.
  15. ↑ “RocksDB transactions”. 《GitHub》. 2016년 4월 4일에 확인함.
  16. ↑ “How to backup RocksDB?”. 《깃허브》. 2017년 7월 19일에 확인함.
  17. ↑ “Checkpoints”. 《깃허브》. 2017년 7월 19일에 확인함.
  18. ↑ “Column families in RocksDB”. 《GitHub》. 2016년 4월 4일에 확인함.
  19. ↑ “RocksDB bloom filters”. 《GitHub》. 2016년 4월 4일에 확인함.
  20. ↑ “RocksDB TTL support”. 《GitHub》. 2016년 4월 4일에 확인함.
  21. ↑ “Universal compaction”. 《GitHub》. 2016년 4월 4일에 확인함.
  22. ↑ “RocksDB merge operator”. 《GitHub》. 2016년 4월 4일에 확인함.
  23. ↑ “RocksDB perf context and IO stats context”. 《GitHub》. 2016년 4월 4일에 확인함.
  24. ↑ “Spatial indexing in RocksDB”. 《rocksdb.org》. 2018년 7월 19일에 확인함.
  25. ↑ “Features Not in LevelDB”. 《GitHub》.
  26. ↑ “First commit where RocksDB diverges from LevelDB”. 《깃허브》. 2012년 5월 10일. 2016년 3월 15일에 확인함.
  27. ↑ “Rocksdb readme file”. 《깃허브》. 2012년 11월 30일. 2016년 3월 15일에 확인함.
  28. ↑ “The History of RocksDB”. 2013년 11월 24일. 2016년 3월 10일에 확인함.
  29. ↑ Borthakur, Dhruba (2013년 11월 22일). “RocksDB: A High Performance Embedded Key-Value Store for Flash Storage - Data@Scale”. 《유튜브》. 2016년 3월 10일에 확인함. ... The story of why we decided to do RocksDB ...
  30. ↑ Dhoot, Sandeep (2019년 6월 27일). “How We Use RocksDB at Rockset”. 《rockset.com》. 2023년 3월 1일에 확인함.
  31. ↑ “Comparing new RocksDB and MMFiles storage engines”. 《ArangoDB》.
  32. ↑ “RC1 ArangoDB 3.4 - Whats new?”. 2018년 9월 6일.
  33. ↑ “Open-sourcing a 10x reduction in Apache Cassandra tail latency”. 2018년 3월 5일.
  34. ↑ “MyRocks”. 《MariaDB KnowledgeBase》. 2019년 4월 28일에 확인함.
  35. ↑ “MariaDB 10.2.16 Release Notes”. 《MariaDB KnowledgeBase》.
  36. ↑ “mongodb-partners/mongo-rocks”. 《깃허브》. 2021년 10월 29일.
  37. ↑ “Integrating RocksDB with MongoDB”. 2018년 7월 19일에 확인함.
  38. ↑ “MongoDB + RocksDB at Parse”. 2015년 12월 1일에 확인함.
  39. ↑ “facebookgo/rocks-strata”. 《깃허브》. 2021년 10월 31일.
  40. ↑ “facebook/mysql-5.6”. 《깃허브》. 2021년 11월 2일.
  41. ↑ “MyRocks: MySQL on RocksDB” (PDF). 2015년 11월 29일에 확인함.
  42. ↑ “MyRocks Deep Dive”. 2016년 4월 19일. 2016년 5월 9일에 확인함.
  43. ↑ Pellissier Tanon, Thomas (2024년 7월 12일). “Oxigraph”. doi:10.5281/zenodo.7408022 – GitHub 경유.
  44. 1 2 3 4 5 “unum-cloud/ukv”. 《깃허브》. 2022년 12월 28일.
  45. ↑ “Storage Devices -- Ceph Documentation”. 2020년 2월 24일에 원본 문서에서 보존된 문서. 2017년 11월 8일에 확인함.
  46. ↑ “Apache Flink 1.8 Documentation: State Backends”. 《ci.apache.org》. 2019년 8월 11일에 확인함.
  47. ↑ “FusionDB”. Evolved Binary.
  48. ↑ “The Design and Implementation of FusionDB” (PDF). XML Prague.
  49. ↑ “LogDevice: a distributed data store for logs”. Mark Marchukov, Facebook. 2017년 8월 31일.
  50. ↑ “Configuring a streams application”. 《kafka.apache.org》. 2024년 3월 11일에 확인함.
  51. ↑ “Adopting RocksDB within Manhattan”. 《Twitter》. 2022년 12월 28일.
  52. ↑ “Rockset: Search and analytics database”. 《rockset.com》.
  53. ↑ “How we use RocksDB at Rockset” (영어). 《rockset.com》. 2019년 7월 10일에 확인함.
  54. ↑ “ideawu/ssdb-rocks”. 《깃허브》. 2021년 8월 21일.
  55. ↑ “Home”. 《ID-2Sbo》.
  56. ↑ “pingcap/tidb”. 《깃허브》. 2021년 11월 4일.
  57. ↑ “TiDB Internal (I) - Data Storage”. Shen Li. 2017년 7월 11일.
  58. ↑ “How We Built a High Performance Document Store on RocksDB?”. 2019년 2월 20일.
  59. ↑ “warrenfalk/rocksdb-sharp”. 《깃허브》. 2021년 9월 28일.
  60. ↑ “RocksDB bindings for CHICKEN Scheme 5”. 《wiki.call-cc.org》. 2024년 7월 13일에 확인함.
  61. ↑ “b1naryth1ef/rocksdb”. 《깃허브》. 2019년 10월 22일.
  62. ↑ “urbint/rox”. 《깃허브》. September 2021.
  63. ↑ “leo-project/erocksdb”. 《깃허브》. September 2021.
  64. ↑ “barrel-db / erlang-rocksdb · GitLab”. 《GitLab》.
  65. ↑ “tecbot/gorocksdb”. 《깃허브》. 2021년 10월 29일.
  66. ↑ “rocksdb-haskell”. 《Hackage》.
  67. ↑ “RocksJava”. 《깃허브》.
  68. ↑ “RocksDB-Android”. 《깃허브》.
  69. ↑ “RocksDB Kotlin Multiplatform”. 《깃허브》.
  70. ↑ “rocksdb”. 2022년 3월 25일.
  71. ↑ “rocksdb”. 《깃허브》.
  72. ↑ “iabudiab/ObjectiveRocks”. 《깃허브》. 2021년 8월 2일.
  73. ↑ “OCaml bindings for RocksDB”. 《깃허브》. 2021년 10월 8일.
  74. ↑ “An OCaml RocksDb binding using ocaml-ctypes”. 《깃허브》. 2020년 9월 28일.
  75. ↑ “RocksDB”. 《MetaCPAN》.
  76. ↑ “Photonios/rocksdb-php”. 《깃허브》. 2021년 8월 11일.
  77. ↑ “"rocksdb" pack for SWI-Prolog”. 《www.swi-prolog.org》.
  78. ↑ “stephan-hof/pyrocksdb”. 《깃허브》. 2021년 10월 27일.
  79. ↑ “rocksdb-ruby | RubyGems.org | your community gem host”. 《rubygems.org》.
  80. ↑ “rust-rocksdb/rust-rocksdb”. 《깃허브》. 2024년 7월 11일.

외부 링크