28 Ekim 2022 Cuma

HazelcastAPI GenericMapStore Sınıfı - Hazelcast ile Hazır Geliyor

Giriş
Şu satırı dahil ederiz
import com.hazelcast.mapStore.GenericMapStore;
Maven
Şu satırı dahil ederiz
<dependency>
  <groupId>com.hazelcast</groupId>
  <artifactId>hazelcast-mapstore</artifactId>
  <version>${hazelcast.version}</version>
</dependency>

<dependency>
  <groupId>com.hazelcast</groupId>
  <artifactId>hazelcast-sql</artifactId>
  <version>${hazelcast.version}</version>
</dependency>
Özet
Eğer bir IMap varsa bunu harici veri tabanına kaydetmek için Hazelcast ile hazır gelen GenericMapStore kullanılabilir. 

Bu sınıf, Hazelcast içinde otomatik olarak bir mapping yaratır. Hazelcast içindeki mapping ise harici bir veri tabanına bağlıdır. Hazelcast mapping'ine yapılan sorgu aslında harici veri tabanına yönlendirilir.  Örneğin harici veri tabanı kapatılır ve Hazelcast mapping'ine sorgu yapılırsa, hata alındığı görülebilir. 
Açıklaması şöyle
The name of the mapping is the same name as your map prefixed with __map-store

Peki amaç nedir ? Bence amaç Jet Job'ları içinde de SQL ile sorgu yapabilmek.

- SQL binding için gereken cümleleri com.hazelcast.sql.impl.SqlServiceImpl çalıştırıyor. Bu sınıf  com.hazelcast.jet.sql.impl.SqlPlanImpl içindeki plan nesnelerini çalıştırıyor
- Map'a yazılan verinin DB'ye yazma işlemini com.hazelcast.jet.impl.connector.WriteJdbcP sınıfı gerçekleştirir.

Kullanım
Bu sınıfı kullanabilmek için  şöyle yaparız
IMap<Integer, GenericRecord> map = hazelcastInstance.getMap("...");
veya şöyle yaparız. Bu durumda Person nesnesi Compact veya Portable serialization desteklemelidir.
IMap<Integer, Person> map = hazelcastInstance.getMap("...");
Jet Ayarları
Bu sınıfı kullanabilmek için ayrıca Jet ayarlarının yapılmış olması gerekir. Yoksa ilk put() çağrısında şöyle bir hata alırız
Caused by: com.hazelcast.sql.HazelcastSqlException: The Jet engine is disabled.
Jet ayarları için hazelcast.xml dosyasında şöyle yaparız
<jet enabled="true" resource-upload-enabled="true">
  <instance>
    <cooperative-thread-count>4</cooperative-thread-count>
    <flow-control-period>100</flow-control-period>
    <backup-count>1</backup-count>
    <scale-up-delay-millis>10000</scale-up-delay-millis>
    <lossless-restart-enabled>false</lossless-restart-enabled>
    <max-processor-accumulated-records>1000000000</max-processor-accumulated-records>
  </instance>
  <edge-defaults>
    <queue-size>1024</queue-size>
    <packet-size-limit>16384</packet-size-limit>
    <receive-window-multiplier>3</receive-window-multiplier>
    </edge-defaults>
</jet>
Açıklaması şöyle
The generic MapStore is a pre-built implementation that connects to an external data store, using the external-data-store configuration.

The generic MapStore is called low-code because it requires you to write little to no Java code:

- If Hazelcast provides a built-in data store factory for your data store, you can configure your cluster to use it, without writing any Java code.

- If Hazelcast doesn’t provide a built-in data store factory for your data store, you can write your own in Java to allow the pre-built MapStore to connect to your data store.

Kod Konfigürasyonu
data-connection-ref tanımlı olmalı

Örnek - MapStoreConfig 
Şöyle yaparız. MapStoreConfig sınıfına verilen string sabitler aynı zamanda GenericMapStore içinde de tanımlı
Config config = ...

MapStoreConfig mapStoreConfig = new MapStoreConfig()
  .setClassName(GenericMapStore.class.getName()) // Use GenericMapStore as MapStore
  .setProperty("data-connection-ref", "datastore") // Datalink to use
  .setProperty("table-name", myTableName); // Table name to read from
  .setProperty("type-name", "org.example.Person");

MapConfig mapConfig = new MapConfig(myTableName)
.setMapStoreConfig(mapStoreConfig); config.addMapConfig(mapConfig);
XML Konfigürasyonu
XML Konfigürasyonu yazısına taşıdım




Hiç yorum yok:

Yorum Gönder

THIRD-PARTY.txt Dosyası

Kullanılan harici kütüphanelerin sürümleri bu dosyada Dosyanın yolu şöyle hazelcast/licenses/THIRD-PARTY.txt