Giriş
Şu satırı dahil ederiz
import com.hazelcast.map.MapStore;
MapStore vs Tiered Storage
Eğer Hazelcast verisini veri tabanı yerine Hazelcast'in kendisinin saklamasını istiyorsak Tiered Storage özelliği kullanılabilir. Açıklaması şöyle
Hazelcast Platform 5.1 introduces a new feature, “Tiered Storage.”
You can read about it here.
Bu açıklamaya göre veri tabanından kurtulmak mümkün olabilir.
What doesn’t seem right is the technical debt. You need Hazelcast and something else, use a map store to connect them, and perhaps have licenses and staffing costs to run the “something else.” In many cases, the something else is a relational database when all you really want is disk storage.
MapStore Kullanımı
Normalde IMap arayüzü uçucudur (volatile), ancak IMap'i veri tabanına kaydetmek istersek MapStore arayüzünü takmak gerekir. MapStore arayüzü MapLoader'dan kalıtır. Bu yüzden veri tabanından okuma ve yazma işlemlerini yapar. Şeklen şöyle
XML ayarlarının açıklaması şöyle
class-name: Name of the class implementing MapLoader and/or MapStore.write-delay-seconds: Number of seconds to delay to call the MapStore.store(key, value)`. If the value is zero then it is write-through, so the MapStore.store(key,value) method is called as soon as the entry is updated. Otherwise, it is write-behind; so the updates will be stored after the write-delay-seconds value by calling the Hazelcast.storeAll(map) method. Its default value is 0 (write-through).write-batch-size: Used to create batch chunks when writing to the external data store. In default mode, all map entries are tried to be written in one go. To create batch chunks, the minimum meaningful value for write-batch-size is 2. For values smaller than 2, it works as in default mode.write-coalescing: In write-behind mode, Hazelcast coalesces updates on a specific key by default; it applies only the last update on it. You can set this element to false to store all updates performed on a key to the data store.enabled: True to enable this map-store, false to disable. Its default value is true.initial-mode: Sets the initial load mode. LAZY is the default load mode, where load is asynchronous. EAGER means map operations are blocked until all partitions are loaded.
1. MapStore sınıfını kullanacaksak veri tabanı bağlantı ve SQL işlerini kendimiz hallederiz.
2. Hazelcast açılırken varsayılan initial-mode değeri LAZY olduğu için arka planda şu tetiklenir
public Iterable<Foo> loadAllKeys()
3. IMap.put() metodunu çağırırsak şu tetiklenir.
public void store(Foo key, Bar value)
4. IMap.get() metodunu çağırırsak ve key bellekte yok şu tetiklenir.
public void delete(Foo key) {
Kendi Sınıfım
Örnek
Şöyle yaparız
<map name="myMap"> <backup-count>1</backup-count> <time-to-live-seconds>0</time-to-live-seconds> <max-idle-seconds>0</max-idle-seconds> <map-store enabled="true"> <class-name>foo.bar.MyMapLoader</class-name> <write-delay-seconds>0</write-delay-seconds> </map-store> </map>
Örnek
Şöyle yaparız
<hazelcast> ... <map name="supplements"> <map-store enabled="true" initial-mode="LAZY"> <class-name>com.hazelcast.loader.YourMapStoreImplementation</class-name> <properties> <property name="mongo.url">mongodb://localhost:27017</property> <property name="mongo.db">mydb</property> <property name="mongo.collection">supplements</property> </properties> </map-store> </map> ... </hazelcast> public class YourMapStoreImplementation implements MapStore<String, Supplement>, MapLoaderLifecycleSupport { ... }
GenericMapStore Sınıfı
Eğer value alanında GenericRecord olan bir map varsa bunu veri tabanına kaydetmek için Hazelcast ile hazır gelen GenericMapStore kullanılabilir.
IMap<Integer, GenericRecord> map = hazelcastInstance.getMap("..");
Hiç yorum yok:
Yorum Gönder