Ördek tamam, her şey yolunda mı? DuckDB özel bir veritabanıdır
Yakın zamanda keşke daha önce bilseydim dediğim bazı yazılımlarla karşılaştım. Ama dedikleri gibi: geç olması hiç olmamasından iyidir. Bu yazılım, olağan şüphelilerden farklı birkaç şey yapan, biraz sıra dışı bir veritabanıdır. Son sürümü 1.0'ı bir hafta önce Pazartesi günü yayınlanan DuckDB'den bahsediyoruz ve bu blog yazısının başlığından da zaten tahmin edebileceğiniz gibi. Bu, bu veritabanına göz atmak için bir neden daha.
Duyuru
![](https://Haberler.cloudimg.io/width/460/q50.png-lossy-50.webp-lossy-50.foil1/_Haber_/imgs/71/3/7/1/8/2/9/5/Roden_Golo-540aa8f4230b05b4.jpg)
Golo Roden, native web GmbH'nin kurucusu ve CTO'sudur. Etkinlik ve hizmet odaklı dağıtılmış mimarilere odaklanarak web ve bulut uygulamaları ile API'lerin tasarımı ve geliştirilmesiyle ilgilenmektedir. Yol gösterici ilkesi, yazılım geliştirmenin kendi başına bir amaç olmadığı, her zaman temeldeki profesyonelliği takip etmesi gerektiğidir.
DuckDB Hollanda'dan geliyor ve başlangıçta bir üniversite projesiydi. Veritabanı 2018'den beri, yani altı yıldır geliştirilme aşamasındadır. Piyasada yeterli veri tabanının bulunmaması söz konusu değil ancak DuckDB'nin dikkate değer bazı özel özellikleri var. Diğer birçok veritabanıyla (PostgreSQL, MariaDB, SQL Server veya Oracle gibi) karşılaştırıldığında DuckDB'nin bir istemci-sunucu sistemi olarak tasarlanmadığı, bunun yerine veritabanının gömülü ve süreç içinde çalıştığı gerçeğiyle başlar.
İşlem içi ve bellekte
Bu, uygulamanıza sorunsuz bir şekilde entegre edilebileceği anlamına gelir; böylece uygulama, veritabanı motorunu da beraberinde getirir: uygulamayı başlattığınızda veritabanı oradadır. Uygulamayı kapatırsanız veritabanı da kapanacaktır. Belki bu size biraz başka bir süreç içi veritabanını, yani SQLite'ı hatırlatıyor. Bu son derece popüler veritabanı aslında aynı şekilde çalışır ancak ikisi arasında çok önemli bir fark vardır. Ancak daha sonra bunun hakkında daha fazla bilgi vereceğiz.
Önerilen editoryal içerik
İzniniz doğrultusunda harici bir YouTube videosu (Google Ireland Limited) buraya yüklenecektir.
Her zaman YouTube videolarını yükle
YouTube videosunu şimdi indirin
DuckDB: Duck tamam, her şey yolunda mı?
DuckDB, ve bu aynı zamanda özel bir özelliktir; yalnızca gerçek uygulamayla birlikte çalışmakla kalmaz, aynı zamanda iki çalışma moduna da sahiptir: verileri diskte klasik şekilde saklayabilir veya alışılmadık bir şekilde tamamen çalışabilir. hafızada, yani tamamen kalıcı olmadan. İlk başta biraz mantık dışı görünebilir, ancak bazı senaryolarda inanılmaz derecede pratik ve kullanışlıdır. Ve (bu da açıkçası çok ciddi bir nokta) bu bellek içi işlem durumunda DuckDB inanılmaz derecede hızlıdır.
OLAP'a odaklanın
Bu da bizi DuckDB'nin, örneğin gömülü bir süreç içi veritabanı olarak SQLite'tan ayıran gerçek uzmanlığına getiriyor: SQLite temel olarak tablolar hakkında bilgi sahibi olan SQL tabanlı bir ilişkisel veritabanıdır ve bu tablolardaki veriler kaydedilir. sıra sıra. Bu, birçok kullanım durumu için pratiktir çünkü veriler genellikle kayıt bazında okunur ve işlenir. Ancak: bu şekilde olmak zorunda değil.
Ayrıca satırlar yerine sütunları verimli bir şekilde okuyabilmenizin (veya yazabilmenizin) çok daha pratik olacağı kullanım durumları da vardır. Verilerin örneğin istatistikler, analizler, raporlar vb. ile toplanması söz konusu olduğunda bu durum her zaman geçerlidir. Prensip olarak OLTP yerine OLAP alanına giren her şey.
İşin ilginçleştiği yer burası: DuckDB sütun odaklı bir veritabanıdır, yani günlük operasyonel görevler için tasarlanmamıştır, daha ziyade veri analizi alanına hitap etmektedir. Başka bir deyişle: DuckDB ile SQL ile kontrol edilebilen, veri analizi ve OLAP için tasarlanmış, işlem içi ve istenirse bellek içi bir motora sahip olursunuz. Yani temelde Apache Spark gibi bir şey; yalnızca küçük, sevimli, hafif ve onlarca kat daha basit görünüyor.
Ve bu aslında çok benzersiz bir satış noktası. En azından benim bildiğim kadarıyla böyle bir veri tabanı mevcut değil (daha doğrusu hiçbir zaman var olmadı).
Her şeyle entegrasyon
Birkaç gün önce aynı sektörde çalışan bir arkadaşımla konuşuyordum ve tesadüfen Spark hakkında konuştuk. Gerçekten bir Spark kümesi için buna değecek kadar büyük miktarda veriye sahip olup olmadıklarını sordum. Ve onun çok net cevabı hayırdı; bu, tamamen RAM'den oluşan tek bir sunucuda kolaylıkla yapılabilirdi. Elbette bu, Spark'ın kullanım alanı olmadığı anlamına gelmiyor ancak Spark, alternatif eksikliği nedeniyle sıklıkla gereksiz yere kullanılıyor.
Birçoğu bunun teoride kulağa hoş geldiğini düşünebilir, ancak gerçekte bu, diğer çeşitli veri kaynaklarıyla entegrasyon gibi daha fazlası ile ilgiliydi. Apache Arrow, Parke dosyaları, CSV, JSON, Excel ve S3 gibi anahtar kelimeler akla gelebilir. Harika olan şey şu: DuckDB hepsini yapabilir. DuckDB, Parquet, CSV, JSON ve Excel dosyalarını içerir. DuckDB, diğer veritabanlarını bile veri kaynağı olarak entegre edebilir. Bu, DuckDB ile ayrı bir adaptöre ihtiyaç duymadan doğrudan PostgreSQL veya MariaDB'ye bağlanabileceğiniz anlamına gelir.
Sonsuz özellikler
Bununla birlikte, ilginç özelliklerin listesi çok daha ileri gidiyor: Söylediğim gibi, DuckDB SQL'i destekliyor, sadece dar ölçülü bir sürümü değil (çoğu zaman olduğu gibi), aynı zamanda SQL'in bugün sunduğu hemen hemen her şeyi: indekslerden işlemlere, ortak tablo ifadeleri, anlık görüntü izolasyonu, CUBE işlevleri, Birleşme Halinde ve çok daha fazlası. Her şeyi yavaş yavaş anladığımda çok etkilendim.
DuckDB C++ ile yazıldığı için veritabanını hemen hemen her yaygın platformda (macOS, Linux, Windows) ve mimaride (x86, ARM) kullanabilirsiniz. Öte yandan DuckDB hemen hemen her teknolojiye de entegre edilebilir. Go, Node.js, Python, R, Rust, Java, Julia, Swift ve birkaç tane daha dahil olmak üzere çok çeşitli adaptörler halihazırda mevcuttur. DuckDB'yi tamamen tarayıcıda çalıştırabilmenizi sağlayan bir WebAssembly yapısı bile var! Ve tüm bunlar az çok birkaç satırlık kodla yapılır, çünkü kurulum ve bağlantı gerçekten basittir.
Kurulumdan bahsetmişken: DuckDB ile biraz deneme yapmak istiyorsanız ve doğrudan bir uygulama oluşturmak istemiyorsanız DuckDB'yi ilgili işletim sisteminin paket yönetimi aracılığıyla da yükleyebilir ve CLI aracılığıyla bağımsız bir araç olarak başlatabilirsiniz. Aynı zamanda bu aynı zamanda her uygulamanın kendi yerel DuckDB sürümüne sahip olabileceği anlamına da gelir çünkü herkesin paylaşmak zorunda olacağı bir sunucu olarak sistem çapında kurulum yoktur. Prensipte bu, kod tabanınıza yüklediğiniz başka bir normal bağımlılıktır.
Sürüm 1.0 ne anlama geliyor?
Geçen hafta 1.0 versiyonunun yayınlandığını yazmıştım. Buna “Kar Ördeği” kod adı verilmiştir. Bu aslında Apple'ın o dönemde “Sıfır Özellikler” sloganıyla reklamını yaptığı macOS 10.6 “Snow Leopard”a bir gönderme çünkü Snow Leopard yalnızca kararlılığa odaklanmıştı. DuckDB geliştiricilerine göre sürüm 1.0'ın asıl amacı tam olarak şuydu: gerçekten istikrarlı bir temel sağlamak. DuckDB'yi bir süredir takip eden herkes, zaman içinde dosya formatında bir veya iki önemli değişiklik olduğunu bilir. Ama bu da artık çözülmüş ve kesinleşmiştir. Geliştiriciler DuckDB 1.0'ın artık gerçekten kararlı bir sürüm olarak kabul edilebileceğini söylüyor.
Geliştiricilerden bahsetmişken: DuckDB'nin aslında bir üniversite projesi olduğundan da bahsetmiştim. Ancak geliştirme artık bundan doğan bir şirketin, yani DuckDB Labs'ın sorumluluğunda. Bu da dış yatırımcılara bağlı değil, tamamen devam ediyor. Kişisel olarak bunun her zaman harika bir işaret olduğunu düşünüyorum çünkü bu, bir şirketin teknolojik olarak sağlam kararlar alabileceği ve yatırımcıları memnun etmek için rakamlara dayalı bir şey yapmak zorunda olmadığı anlamına geliyor. Bu nedenle şahsen DuckDB'nin iyi bir geleceğe sahip olduğuna inanıyorum.
Parlak bir gelecek
Gelecekten bahsetmişken: Tüm bu konular DuckDB'ye göz atmanız için yeterli değilse, fonksiyon yelpazesini genişletebileceğiniz bir dizi uzantının da bulunduğunu söylemek gerekir; tam metin araması veya coğrafi verileri yönetmek için.
Son olarak merak edenler için henüz kesin olarak yayınlanmamış (muhtemelen iki ay daha sürecek) ama yine de önceden okuyabileceğiniz bir kitap önerebilirim: Manning Publishing'den “DuckDB in Action”. Erken erişim, MEAP programı (“Manning Erken Erişim Programı”) aracılığıyla mümkündür. Şu ana kadar kitapta mevcut olanı okudum (ve itiraf etmeliyim ki neredeyse tamamı bu) ve dediğim gibi: Şiddetle tavsiye ediyorum! Kitap hakkında daha fazla bilgiyi Thorben Janssen'in kitap incelemesinde bulabilirsiniz.
Sonuçta elbette uygun uygulama sorunu ortaya çıkıyor. DuckDB veri analizi için tasarlanmıştır. Bu, klasik bir SQL veritabanı arıyorsanız muhtemelen DuckDB'den pek memnun kalmayacağınız anlamına gelir. Halihazırda OLAP & Co. ile iş yapanlar ve Spark & Co. çok büyük ve çok karmaşıklar; DuckDB kesinlikle hızlı bir bakıştan daha değerlidir.
(kendim)
Haberin Sonu