RocksDB
RocksDB, anahtar / değer verileri için yüksek performanslı[1][2][3][4][5] yerleşik bir veritabanıdır. Çoklu merkezi işlem birimi (CPU) çekirdeğinden yararlanmak ve giriş / çıkış (G / Ç) bağlı iş yükleri için katı hal sürücüleri (SSD) gibi hızlı depolamayı verimli bir şekilde kullanmak üzere optimize edilmiş, Google tarafından geliştirilen LevelDB'nin bir çatalıdır . Günlük yapılı birleştirme ağacı (LSM ağacı) veri yapısına dayanır.
Geliştirici(ler) | |
---|---|
İlk yayınlanma | Mayıs 2012 |
Güncel sürüm | 31 Ocak 2020 |
Programlama dili | C++ |
İşletim sistemi | Windows, macOS, Linux, FreeBSD, OpenBSD, Solaris, AIX |
Platform | x86, x86_64, ppc64, ppc64le, aarch64 |
Tür | Veritabanı |
Lisans | Apache 2.0 or GPL 2 |
Resmî sitesi | rocksdb.org |
Kod deposu | https://github.com/facebook/rocksdb |
C ++ ile yazılmıştır ve C ++, C ve Java için resmi uygulama programlama arabirimi (API) destekler. RocksDB açık kaynaklı bir yazılımdır ve ilk olarak BSD 3 lisansı altında yayımlanmıştır.[6][7][8] Bununla birlikte, Temmuz 2017'de proje, muhtemelen Apache Software Foundation'ın önceki BSD + Patent lisans şartının kara listesine yanıt olarak hem Apache 2.0 hem de GPLv2[9] lisansına taşındı.[10][11]
Facebook, Yahoo!,[12] ve LinkedIn[13] dahil olmak üzere çeşitli web ölçekli işletmelerin sistemlerinde kullanılımaktadır.[14]
Özellikleri
LevelDB gibi RocksDB'de anahtarları ve değerleri bayt dizilerinde saklar ve veriler anahtarla veya özel bir karşılaştırıcı sağlayarak bayt olarak sıralanır.
RocksDB, LevelDB'nin tüm özelliklerini ve ayrıca şunları sağlar:
- İşlemler[15]
- Yedeklemeler[16] ve anlık görüntüler[17]
- Sütun aileleri[18]
- Bloom filtreleri[19]
- Yaşam süresi (TTL) desteği[20]
- Evrensel sıkıştırma[21]
- Birleştirme işleçleri[22]
- İstatistik toplama[23]
- Mekansal indeksleme[24]
ve diğerleri: LevelDB'de olmayan RocksDB özelliklerinin listesi .
RocksDB bir SQL veritabanı değildir ( MyRocks, RocksDB'yi MySQL ile birleştirmesine rağmen). Diğer NoSQL ve dbm depoları gibi ilişkisel veri modeli yoktur ve SQL sorgularını desteklemez. Ayrıca, ikincil dizinler için doğrudan bir desteği yoktur, ancak bir kullanıcı kendi içinden Sütun Aileleri'ni veya harici olarak kendi şifrelerini oluşturabilir. Uygulamalar, sunucu veya komut satırı arabirimi sağlamadığından RocksDB'yi kitaplık olarak kullanır.
Tarihçe
RocksDB, Nisan 2012'de Dhruba Borthakur[25][26] tarafından, sunucu iş yükleri için performansı artırmak amacıyla bir LevelDB çatalı olarak Facebook'ta oluşturuldu.[27][28]
Entegrasyon
Katıştırılabilir veritabanı olarak RocksDB, daha büyük bir veritabanı yönetim sisteminde (DBMS) bir depolama motoru olarak kullanılabilir. Örneğin, CockroachDB depolama motoru[29] olarak RocksDB'yi, çoğunlukla işlemsel iş yükleri için kullanırken Rockset çoğunlukla analitik veri işleme için RocksDB'yi9 Temmuz 2019 tarihinde Wayback Machine sitesinde arşivlendi. kullanır. Yani RocksDB bir depolama motoru olarak da kullanılabilir.
Alternatif arka uç
Önceden kurulmuş veritabanı sistemleri için RocksDB ile alternatif bir depolama motorunu değiştirmek veya sunmak için aşağıdaki projeler başlatılmıştır:
ArangoDB
ArangoDB, önceki depolama motoruna ("mmfiles") RocksDB'yi ekledi.[30] ArangoDB 3.4'tan başlayarak, RocksDB ArangoDB'deki varsayılan depolama motoru olacaktır.[31]
Cassandra
RocksDB, Apache Cassandra'nın performansını önemli ölçüde artırabilir (genel olarak 3-4 kat daha hızlı, bazı kullanım durumlarında 100 kat daha hızlı).[32] Facebook'taki Instagram ekibi, performans sonuçlarının karşılaştırmalarıyla birlikte bu sistemi geliştirdi ve açık kaynaklı olarak yayınlandılar.[33]
Mariadb
MariaDB, 10.2.5'ten (Alfa durumu)[34] beri MyRocks depolama motorunu (RocksDB'den çatallanmıştır) kullanabilir hale getirdi. 2018'de MariaDB 10.2.16'dan beri stabil olarak sunuldu.[35]
MongoDB
MongoRocks projesi, depolama motorunun RocksDB olduğu MongoDB için bir depolama modülü yayınladı.[36][37][38]
MySQL
MyRocks projesi, MySQL için yeni bir RocksDB tabanlı depolama motoru oluşturur.[39][40] MyRocks hakkında derinlemesine ayrıntılar Percona Live 2016'da sunuldu.[41]
Gömülü sistemlerde kullanım
Aşağıdaki veritabanı sistemleri ve uygulamaları, yerleşik depolama motoru olarak RocksDB kullanmayı seçmiştir:
Ceph'in BlueStore'u
CEPH BlueStore depolama tabakası OSD cihazlarında meta veri yönetimi için RocksDB kullanıyor.[42]
Apache Flink
Apache Flink, kontrol noktalarını saklamak için RocksDB'yi kullanıyor.[45]
FusionDB
FusionDB[46] XML, Anahtar / Değer ve JSON[47] için depolama motoru olarak RocksDB'yi kullanıyor.
LogDevice LogsDB
LogDevice'in LogsDB'si, RocksDB[48] üstüne inşa edilmiştir.
Rockset
Operasyonel veri analizi için kullanılan Rockset28 Eylül 2020 tarihinde Wayback Machine sitesinde arşivlendi. hizmeti, depolama motoru olarak RocksDB'yi kullanıyor.[49]
Üçüncü taraf dil kütüphaneleri
RocksDB için kullanılabilen üçüncü taraf programlama dili kütüphaneleri şunları içerir:
Kaynakça
- "Performance Benchmarks". 31 Ağustos 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 29 Kasım 2015.
- "Benchmarking the leveldb family". 24 Şubat 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 10 Mart 2016.
- "Comparing LevelDB and RocksDB, take 2". 24 Şubat 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 10 Mart 2016.
- "Benchmarking LevelDB vs. RocksDB vs. HyperLevelDB vs. LMDB Performance for InfluxDB". 24 Şubat 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 10 Mart 2016.
- Golan-Gueta (21 Nisan 2015). "Scaling Concurrent Log-Structured Data Stores". EuroSys '15 Proceedings of the Tenth European Conference on Computer Systems.
- "Facebook's latest open source effort: a flash-powered database called RocksDB". 24 Şubat 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 10 Mart 2016.
- "Under the Hood: Building and open-sourcing RocksDB". 19 Ekim 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 10 Mart 2016.
- "RocksDB - Facebook's Database Now Open Source". 24 Şubat 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 10 Mart 2016.
- "GitHub pull request". 29 Şubat 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 20 Temmuz 2017.
- "Apache says 'no' to Facebook code libraries". 24 Şubat 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 20 Temmuz 2017.
- "GitHub issue". 29 Şubat 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 20 Temmuz 2017.
- "RocksDB on Steroids". 24 Şubat 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 10 Mart 2016.
- "Benchmarking Apache Samza: 1.2 million messages per second on a single node". 24 Şubat 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 10 Mart 2016.
- "Users.md". 29 Şubat 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 1 Aralık 2015.
- "RocksDB transactions". GitHub. 29 Şubat 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 4 Nisan 2016.
- "How to backup RocksDB?". 30 Nisan 2017 tarihinde kaynağından arşivlendi. Erişim tarihi: 19 Temmuz 2017.
- "Checkpoints". 29 Şubat 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 19 Temmuz 2017.
- "Column families in RocksDB". GitHub. 17 Temmuz 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 4 Nisan 2016.
- "RocksDB bloom filters". GitHub. 9 Haziran 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 4 Nisan 2016.
- "RocksDB TTL support". GitHub. 5 Nisan 2015 tarihinde kaynağından arşivlendi. Erişim tarihi: 4 Nisan 2016.
- "Universal compaction". GitHub. 5 Nisan 2015 tarihinde kaynağından arşivlendi. Erişim tarihi: 4 Nisan 2016.
- "RocksDB merge operator". GitHub. 18 Şubat 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 4 Nisan 2016.
- "RocksDB perf context and IO stats context". GitHub. 29 Şubat 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 4 Nisan 2016.
- "Spatial indexing in RocksDB". rocksdb.org. 24 Şubat 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 19 Temmuz 2018.
- "First commit where RocksDB diverges from LevelDB". 10 Mayıs 2012. 29 Şubat 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 15 Mart 2016.
- "rocksdb README file". 30 Kasım 2012. 29 Şubat 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 15 Mart 2016.
- "The History of RocksDB". 24 Kasım 2013. 24 Şubat 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 10 Mart 2016.
- "RocksDB: A High Performance Embedded Key-Value Store for Flash Storage - Data@Scale". 22 Kasım 2013. 31 Ağustos 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 10 Mart 2016.
... The story of why we decided to do RocksDB ...
- Edwards (29 Ekim 2015). "Hello World: Meet CockroachDB, the Resilient SQL Database". The New Stack. 16 Temmuz 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 8 Temmuz 2016.
- "Comparing new RocksDB and MMFiles storage engines". 23 Ağustos 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 24 Şubat 2020.
- "RC1 ArangoDB 3.4 - Whats new?". 24 Şubat 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 24 Şubat 2020.
- "Cassandra on RocksDB at Percona Live 2018". 24 Şubat 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 24 Şubat 2020.
- "Open-sourcing a 10x reduction in Apache Cassandra tail latency".
- "MyRocks". MariaDB KnowledgeBase. 18 Aralık 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 28 Nisan 2019.
- "Arşivlenmiş kopya". 3 Ağustos 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 24 Şubat 2020.
- "mongodb-partners/mongo-rocks". 11 Haziran 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 24 Şubat 2020.
- "Integrating RocksDB with MongoDB". 24 Şubat 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 19 Temmuz 2018.
- "MongoDB + RocksDB at Parse". 21 Ekim 2017 tarihinde kaynağından arşivlendi. Erişim tarihi: 1 Aralık 2015.
- "facebook/mysql-5.6". 15 Kasım 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 24 Şubat 2020.
- "MyRocks: MySQL on RocksDB" (PDF). 16 Mart 2016 tarihinde kaynağından (PDF) arşivlendi. Erişim tarihi: 29 Kasım 2015.
- "MyRocks Deep Dive". 16 Aralık 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 9 Mayıs 2016.
- "Storage Devices -- Ceph Documentation". 24 Şubat 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 24 Şubat 2020.
- "contribsys/faktory". 24 Aralık 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 24 Şubat 2020.
- "Introducing Faktory". Mike Perham. 24 Şubat 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 24 Şubat 2020.
- "Apache Flink 1.8 Documentation: State Backends". ci.apache.org. 25 Ekim 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 11 Ağustos 2019.
- "FusionDB". Evolved Binary. 13 Şubat 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 29 Şubat 2020.
- "The Design and Implementation of FusionDB" (PDF). XML Prague. 20 Şubat 2019 tarihinde kaynağından (PDF) arşivlendi. Erişim tarihi: 24 Şubat 2020.
- "LogDevice: a distributed data store for logs". Mark Marchukov, Facebook. 6 Ekim 2017 tarihinde kaynağından arşivlendi. Erişim tarihi: 24 Şubat 2020.
- "How we use RocksDB at Rockset". rockset.com (İngilizce). 9 Temmuz 2019 tarihinde kaynağından arşivlendi. Erişim tarihi: 10 Temmuz 2019.
- "ideawu/ssdb-rocks". 11 Haziran 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 24 Şubat 2020.
- "Arşivlenmiş kopya". 5 Ocak 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 24 Mart 2020.
- "pingcap/tidb". 21 Şubat 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 24 Şubat 2020.
- "TiDB Internal (I) - Data Storage". Shen Li. 2 Ağustos 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 24 Şubat 2020.
- "warrenfalk/rocksdb-sharp". 11 Haziran 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 24 Şubat 2020.
- "b1naryth1ef/rocksdb". 13 Haziran 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 24 Şubat 2020.
- "urbint/rox". 13 Haziran 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 24 Şubat 2020.
- "leo-project/erocksdb". 11 Haziran 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 24 Şubat 2020.
- "barrel-db/erlang-rocksdb". 24 Şubat 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 24 Şubat 2020.
- "tecbot/gorocksdb". 11 Haziran 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 24 Şubat 2020.
- "rocksdb-haskell: Haskell bindings to RocksDB". 24 Şubat 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 24 Şubat 2020.
- "RocksJava". 1 Temmuz 2014 tarihinde kaynağından arşivlendi. Erişim tarihi: 24 Şubat 2020.
- "rocksdb".
- "iabudiab/ObjectiveRocks". 11 Haziran 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 24 Şubat 2020.
- "OCaml bindings for RocksDB". 29 Şubat 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 24 Şubat 2020.
- "An OCaml RocksDb binding using ocaml-ctypes". 11 Haziran 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 24 Şubat 2020.
- "RocksDB - Perl extension for RocksDB - metacpan.org". 24 Şubat 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 24 Şubat 2020.
- "Photonios/rocksdb-php". 11 Haziran 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 24 Şubat 2020.
- "SWI-Prolog interface for RocksDB". 4 Haziran 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 24 Şubat 2020.
- "stephan-hof/pyrocksdb". 10 Haziran 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 24 Şubat 2020.
- "rocksdb-ruby - RubyGems.org - your community gem host". 24 Şubat 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 24 Şubat 2020.
- "spacejam/rust-rocksdb". 11 Haziran 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 24 Şubat 2020.