Ana içeriğe geç

"ignite" ile etiketlenmiş Bir gönderi

Tüm Etiketleri Görüntüle

Apache Ignite

· 5 dakikalık okuma
Ahmet Buğra Kösen
Software Developer

Veritabanlarının ölçeklendirilmesi ve bellek içi veri işleme ihtiyaçları arttıkça, bu ihtiyaçları karşılayabilecek güçlü bir araç arayışı da ortaya çıkmaktadır. Apache Ignite, bu ihtiyaca çözüm sunan açık kaynaklı ve dağıtık bir bellek içi veri platformudur. Bu makalede, Apache Ignite'ı tanıyacak, onun temel özelliklerine göz atacak ve .NET Core ile nasıl entegre edileceğini örnek bir proje üzerinden göreceğiz.

Apache Ignite Nedir?

Apache Ignite, veri saklama ve işleme için bellek içi teknolojiler kullanan, ölçeklenebilir ve yüksek performanslı bir veri platformudur. Ignite, sadece verileri bellek içinde depolamakla kalmaz, aynı zamanda dağıtık veri işleme, SQL ve NoSQL veri yönetimi, data grid ve çok daha fazlasını sunar. Bu özellikleri sayesinde, düşük gecikmeli ve yüksek performanslı uygulamalar geliştirmenize olanak tanır.

Ignite, ölçeklendirme sorunları yaşayan veritabanları veya yoğun veri işleme ihtiyaçlarına çözüm getirmek için yaygın olarak tercih edilen bir araçtır. Özellikle büyük veri ve gerçek zamanlı işleme ihtiyaçları için ideal bir platformdur.

Apache Ignite'in Temel Özellikleri

  • Bellek İçi Depolama: Ignite, verilerinizi bellek içinde saklayarak yüksek hızda erişim sağlar.
  • Dağıtık SQL: Verilere SQL sorguları ile erişebilirsiniz, üstelik dağıtık bir ortamda.
  • Yatay Ölçeklendirme: Ignite, düğüm ekleyerek kolayca yatay ölçeklenebilir.
  • Düşük Gecikme Süresi: Ignite, verileri doğrudan bellekte tuttuğu için milisaniye mertebesinde gecikme süreleri sunar.

.NET Core ile Apache Ignite Entegrasyonu

Apache Ignite, .NET Core desteği sayesinde, .NET uygulamalarınızda bellek içi veri saklama ve dağıtık veri işleme yeteneklerini kullanmanıza olanak tanır. Ignite'ı .NET Core ile nasıl kullanabileceğimize bir bakalım.

Adım 1: Ignite Kütüphanesini Projeye Dahil Etmek

Öncelikle, Ignite'ın .NET Core desteği için gerekli olan NuGet paketini yükleyerek başlayacağız. Aşağıdaki komutu kullanarak bu paketi yükleyebilirsiniz:

Install-Package Apache.Ignite

Adım 2: Ignite Sunucusunu Başlatmak

Ignite sunucusunu başlatmak için basit bir konsol uygulaması oluşturacağız. Ignite sunucusu, verilerinizi depolamak ve dağıtık işlem yapmak için kullanacağımız ana bileşendir. Aşağıdaki kod parçacığı, Ignite sunucusunu başlatmak için kullanabileceğiniz bir örnek gösteriyor:

using Apache.Ignite;
using Apache.Ignite.Core.Cache.Configuration;
using System;

namespace IgniteDotNetExample
{
class Program
{
static void Main(string[] args)
{
var igniteConfiguration = new IgniteConfiguration
{
IgniteInstanceName = "myIgniteInstance",
WorkDirectory = "./igniteWorkDir",
ClientMode = false // Sunucu düğümü olarak çalıştırıyoruz.
};

IIgnite ignite = Ignition.Start(igniteConfiguration);

Console.WriteLine("Ignite sunucusu başlatıldı.");

// Örnek bir cache oluşturalım.
var cacheConfiguration = new CacheConfiguration
{
Name = "sampleCache",
CacheMode = CacheMode.Partitioned,
AtomicityMode = CacheAtomicityMode.Transactional
};

var cache = ignite.GetOrCreateCache<int, string>(cacheConfiguration);

// Cache'e veri ekleyelim.
cache.Put(1, "Merhaba Ignite!");
string value = cache.Get(1);

Console.WriteLine($"Cache'teki veri: {value}");

Console.ReadLine();
}
}
}

Yukarıdaki kodda, Ignite sunucusu başlatılmakta ve sampleCache isimli bir cache oluşturulmaktadır. Bu cache, verilerimizi bellek içinde saklamak için kullanılacaktır.

Adım 3: İki Ignite Instance ve Persistent Çalışma Yapısı

Apache Ignite'ın iki instance ile nasıl çalıştığını ve verilerin kalıcı olarak saklanmasını (persistent storage) nasıl sağlayacağınızı gösteren bir örnek hazırlayalım. Bu örnekte iki Ignite düğümü başlatacak ve persistent yapılandırma ile verilerin disk üzerinde saklanmasını sağlayacağız.

using Apache.Ignite.Core;
using Apache.Ignite.Core.Cache.Configuration;
using Apache.Ignite.Core.Configuration;
using System;

namespace IgnitePersistentExample
{
class Program
{
static void Main(string[] args)
{
// İlk Ignite instance'ını başlatma
var igniteConfig1 = new IgniteConfiguration
{
IgniteInstanceName = "igniteInstance1",
WorkDirectory = "./igniteWorkDir1",
DataStorageConfiguration = new DataStorageConfiguration
{
DefaultDataRegionConfiguration = new DataRegionConfiguration
{
Name = "Default_Region",
PersistenceEnabled = true // Kalıcı depolama etkinleştirildi.
}
}
};

IIgnite ignite1 = Ignition.Start(igniteConfig1);
ignite1.GetCluster().Active(true);
Console.WriteLine("Ignite Instance 1 başlatıldı.");

// İkinci Ignite instance'ını başlatma
var igniteConfig2 = new IgniteConfiguration
{
IgniteInstanceName = "igniteInstance2",
WorkDirectory = "./igniteWorkDir2",
DataStorageConfiguration = new DataStorageConfiguration
{
DefaultDataRegionConfiguration = new DataRegionConfiguration
{
Name = "Default_Region",
PersistenceEnabled = true // Kalıcı depolama etkinleştirildi.
}
}
};

IIgnite ignite2 = Ignition.Start(igniteConfig2);
ignite2.GetCluster().Active(true);
Console.WriteLine("Ignite Instance 2 başlatıldı.");

// Cache oluşturma ve veri ekleme
var cacheConfiguration = new CacheConfiguration
{
Name = "persistentCache",
CacheMode = CacheMode.Partitioned,
AtomicityMode = CacheAtomicityMode.Transactional
};

var cache = ignite1.GetOrCreateCache<int, string>(cacheConfiguration);
cache.Put(1, "Persistent Merhaba Ignite!");
string value = cache.Get(1);

Console.WriteLine($"Persistent Cache'teki veri: {value}");

Console.ReadLine();
}
}
}

Yukarıdaki kodda, iki farklı Ignite instance'ı başlatılmakta ve kalıcı depolama (persistent storage) yapılandırması etkinleştirilmektedir. Bu sayede Ignite sunucuları yeniden başlatılsa bile veriler disk üzerinde saklanacak ve kaybolmayacaktır.

Adım 4: Ignite ile Verilere Erişmek

Ignite'ın en güçlü özelliklerinden biri SQL desteğidir. Ignite üzerinde saklanan verileri SQL sorguları kullanarak işleyebilirsiniz. Örneğin, bir kullanıcı tablosunu Ignite üzerinde saklamak ve SQL sorguları ile bu tablodaki verilere erişmek mümkündür:

[Serializable]
public class User
{
[QuerySqlField(IsIndexed = true)]
public int Id { get; set; }

[QuerySqlField]
public string Name { get; set; }
}

class Program
{
static void Main(string[] args)
{
IIgnite ignite = Ignition.Start();

var cache = ignite.GetOrCreateCache<int, User>(new CacheConfiguration("userCache", typeof(User)));

// Kullanıcı ekleyelim.
cache.Put(1, new User { Id = 1, Name = "Ali" });
cache.Put(2, new User { Id = 2, Name = "Ayşe" });

// SQL sorgusu ile kullanıcıları getirelim.
var query = new SqlFieldsQuery("SELECT Id, Name FROM User WHERE Name = ?", "Ali");
var cursor = cache.Query(query);

foreach (var row in cursor)
{
Console.WriteLine($"Kullanıcı: Id={row[0]}, Name={row[1]}");
}

Console.ReadLine();
}
}

Yukarıdaki örnekte, User isimli bir sınıf oluşturduk ve bu sınıfı userCache isimli bir cache içinde sakladık. Daha sonra, SQL sorguları kullanarak bu cache içinde saklanan verilere eriştik.

Sonuç

Apache Ignite, ölçeklenebilir ve yüksek performanslı bellek içi veri yönetimi ve işleme çözümleri sunan güçlü bir platformdur. Ignite, verileri bellek içinde saklayarak ve dağıtık SQL desteği sunarak, .NET uygulamalarınızı hızlandırmanıza ve verimliliğini artırmanıza yardımcı olabilir. Bu makalede, Apache Ignite'ın temel özelliklerini ve .NET Core ile nasıl entegre edilebileceğini örneklerle ele aldık. Ayrıca, iki Ignite instance'ı kullanarak kalıcı depolama özellikleriyle çalışan bir yapı kurmayı öğrendik.

Ignite'ın sunduğu diğer güçlü özellikleri keşfetmek ve daha fazla bilgi edinmek için Apache Ignite resmi dokümantasyonuna göz atabilirsiniz.

Yorumlar ve Katkılar

Apache Ignite ve .NET Core ile ilgili deneyimlerinizi paylaşmak veya sorular sormak için yorum yapmaktan çekinmeyin. Apache Ignite ile gerçek zamanlı veri işleme uygulamaları geliştirmek konusunda daha fazla bilgi edinmek isteyenler için Ignite'ın güçlü özellikleri gerçekten keşfetmeye değer.