Ana Sayfa

GraalVM ve FFI ile Clojure Veritabanını Çok Dilli Kütüphaneye Dönüştürmek

1 dk okuma

ChronDB, başlangıçta bir sunucu olarak tasarlanmış, zaman yolculuğu yapabilen ve Git'i depolama motoru olarak kullanan bir anahtar/değer veritabanıydı. Geleneksel sunucu mimarisine sahipti. Ancak, Rust ile geliştirilen ve bulutta geçici geliştirme ortamları oluşturan spuff projesi için, basit anahtar/değer depolama ihtiyacı doğduğunda, ChronDB'nin sunduğu zaman yolculuğu ve Git tabanlı sürümleme gibi özellikler onu SQLite'dan daha cazip hale getirdi. Temel sorun, ChronDB'nin bir Clojure sunucusu olması ve Rust uygulamasının kullanıcılarına sadece basit durum yönetimi için bir JVM süreci çalıştırma zorunluluğu getirmek istenmemesiydi.

Bu sorunu çözmek için GraalVM Native Image ve FFI (Foreign Function Interface) teknolojileri kullanıldı. Makale, ChronDB'nin nasıl bir .so (shared library) dosyasına derlenerek Rust, Python gibi farklı dillerdeki uygulamalara doğrudan gömülebileceğini detaylandırıyor. Bu yaklaşım, ChronDB'yi bir sunucu bağımlılığından kurtararak, çeşitli dillerde geliştirilen uygulamaların içine kolayca entegre edilebilen çok dilli bir kütüphaneye dönüştürdü. Bu sayede, kullanıcıların ayrı bir veritabanı sunucusu kurma ve yönetme ihtiyacı ortadan kalktı.

Sistemin mimarisi beş katmandan oluşuyor: en üstte kullanıcıya dönük Dil Bağlantıları (Rust, Python), ardından GraalVM Native Image ile oluşturulan C API (libchrondb.so), C ve Java tipleri arasında dönüşüm yapan Java Köprüsü, depolama ve indekslemeyi düzenleyen Clojure Köprüsü ve en altta ChronDB Çekirdeği (GitStorage + LuceneIndex). Bu katmanlı yapı, dil sınırlarını verimli bir şekilde aşarken sorumlulukların temiz bir şekilde ayrılmasını sağlıyor. Özellikle Clojure çekirdeğindeki "handle registry" deseni, veritabanı örneklerini tamsayı tanıtıcıları aracılığıyla yöneterek çoklu bağlantıları güvenli bir şekilde ele alıyor.

İçgörü

Bu dönüşüm, Clojure gibi JVM tabanlı dillerde yazılmış güçlü uygulamaların, farklı dil ekosistemlerine sahip projelere sunucu bağımlılığı olmadan entegre edilebileceğini gösteriyor.

Kaynak