Ana içeriğe geç
Version: 1.0.1

External Storage

Ignite RDBMS veya NoSQL veritabanları, örneğin Apache Cassandra veya MongoDB gibi mevcut bir veritabanının üzerinde caching layer olarak kullanılabilir. Bu kullanım durumu, bellek içi işlemeyi kullanarak temeldeki veritabanını hızlandırır.

Ignite, Apache Cassandra ile kullanıma hazır bir entegrasyon sağlar. Entegrasyonu kullanıma hazır olmayan diğer NoSQL veritabanları için CacheStore interface’i ile custom implementasyon yapılabilir.

Harici depolamanın kullanılabileceği iki ana kullanım senaryosu;

  • Mevcut bir veritabanı için caching layer. Bu senaryoda, veriler belleğe yüklenerek işlem hızı arttırılabilir. SQL desteği olmayan bir veritabanına da SQL desteği getirilebilir(tüm veriler belleğe yüklendiğinde).
  • Cache’lenen veriler harici bir veritabanında persist hale getirilmek isteniyorsa(native persistence kullanmak yerine tercih edilebilir).

external_storage.png

Ignite, key/value işlemlerine ek olarak SQL INSERT, UPDATE ve MERGE sorgularının sonuçlarını yazar. Ancak, SELECT sorguları hiçbir zaman harici veritabanındaki verileri okumaz.

Read-Through and Write-Through

Read-Through, verilerin cache’te mevcut olmaması durumunda temel kalıcı depodan okunması anlamına gelir. Bu yalnızca key/value API'si aracılığıyla yapılan alma işlemleri için geçerlidir; SELECT sorguları hiçbir zaman harici veritabanındaki verileri okumaz. SELECT sorgularını yürütmek için, loadCache() yöntemi çağrılarak verilerin veritabanından önbelleğe önceden yüklenmesi gerekir.

Write-Through, verilerin cache’te güncellendiğinde otomatik olarak kalıcı olduğu anlamına gelir. Tüm okuma ve yazma işlemleri, cache işlemlerine katılır ve bir bütün olarak işlenir veya geri alınır.

Write-Behind Caching

Write-through modunda, her put ve remove işlemi, kalıcı depoya karşılık gelen bir isteği içerir; bu nedenle, güncelleme işleminin toplam süresi nispeten uzun olabilir. Ek olarak, yoğun bir cache güncelleme hızı, son derece yüksek bir depolama yüküne neden olabilir.

Bu gibi durumlarda, güncelleme işlemlerinin eşzamansız(asynchronous) olarak gerçekleştirildiği write-behind modu etkinleştirilebilir. Bu yaklaşımın temel amacı, güncellemeleri biriktirmek ve bunları toplu bir işlem(batch) olarak temel veritabanına eşzamansız olarak akıtmaktır. Zamana dayalı olaylara (veri girişinin kuyrukta kalabileceği maksimum süre sınırlıdır), kuyruk boyutundaki olaylara (boyutu belirli bir noktaya ulaştığında sıra temizlenir) veya her ikisine dayalı olarak verilerin boşaltılmasını tetikleyebilirsiniz. (hangisi önce gerçekleşirse).

Write-behind caching’in etkinleştirilmesi, eşzamansız güncellemeler gerçekleştirerek performansı artırır, ancak bazı güncellemeler node arızaları veya çökmeler nedeniyle kaybolabileceğinden bu, tutarlılıkta(consistency) olası bir düşüşe yol açabilir.

Write-behind yaklaşımıyla, yalnızca bir veri girişine yapılan son güncelleme temel depolamaya yazılır. key1 adlı bir anahtara sahip bir cache veri girişi sırasıyla value1, value2 ve value3 değerleriyle sırayla güncellenirse, (key1 , value3 ) çifti için yalnızca tek bir depolama isteği kalıcı depoya atılır.

Batch işlemler genellikle bir dizi atomik işlemden daha verimlidir. Write-behind modunda batch işlemleri etkinleştirerek bu özellikten yararlanılabilir. Benzer türlerdeki (put veya remove) güncelleme dizileri, tek bir batch process olarak gruplandırılabilir. Örneğin, (key1, value1), (key2, value2), (key3, value3) çiftleri sırayla cache’e koyulursa, üç işlem tek bir CacheStore.putAll(…) işleminde gruplanır.