Úvod do frontu kroník

1. Prehľad

Kronika kroník pretrváva pri každej správe pomocou súboru mapovaného do pamäte. To nám umožňuje zdieľať správy medzi procesmi.

Ukladá dáta priamo do pamäte mimo haldy, vďaka čomu sú bez režijných nákladov GC. Je navrhnutý na poskytovanie rámca správ s nízkou latenciou pre vysoko výkonné aplikácie.

V tomto rýchlom článku sa pozrieme na základnú sadu operácií.

2. Maven závislosti

Musíme pridať nasledujúcu závislosť:

 net.openhftova kronika 3.6.4 

Najnovšie verzie hostené serverom Maven Central môžeme kedykoľvek skontrolovať pomocou odkazu uvedeného vyššie.

3. Stavebné bloky

Pre frontu kroník sú charakteristické tri koncepty:

  • Výňatok - je dátový kontajner
  • Dodatok - appender slúži na zápis dát
  • Trailer - sa používa na postupné načítanie údajov

Vyhradíme si časť pamäte pre čítaj píš operácie pomocou Kronika rozhranie.

Tu je príklad kódu na vytvorenie inštancie:

File queueDir = Files.createTempDirectory ("chronicle-queue"). ToFile (); Kronika kroniky = ChronicleQueueBuilder.indexed (queueDir) .build ();

Budeme potrebovať základný adresár, v ktorom bude fronta pretrvávať záznamy v súboroch mapovaných do pamäte.

ChronicleQueueBuilder trieda poskytuje rôzne typy front. V tomto prípade sme použili IndexedChronicleQueue ktoréh používa sekvenčný index na udržiavanie vyrovnania pamäte záznamov vo fronte.

4. Písanie do frontu

Ak chcete položky zapísať do poradia, musíme vytvoriť objekt z ExcerptAppender trieda pomocou Kronika inštancia. Tu je príklad kódu na zápis správ do frontu:

Tu je príklad kódu na zápis správ do frontu:

ExcerptAppender appender = chronicle.createAppender (); appender.startExcerpt (); String stringVal = "Hello World"; int intVal = 101; long longVal = System.currentTimeMillis (); dvojitý dvojitýVal = 90,00192091d; appender.writeUTF (stringValue); appender.writeInt (intValue); appender.writeLong (longValue); appender.writeDouble (doubleValue); appender.finish ();

Po vytvorení appenderu spustíme appender pomocou a startExcerpt metóda. Začína sa to Výňatok s predvolenou kapacitou správ 128 tis. Môžeme použiť preťaženú verziu startExcerpt poskytnúť vlastnú kapacitu.

Po spustení môžeme do frontu zapísať ľubovoľnú literálnu alebo objektovú hodnotu pomocou širokej škály metód zápisu poskytovaných knižnicou.

Nakoniec, keď skončíme s písaním, výňatok dokončíme, uložíme údaje do poradia a neskôr na disk.

5. Čítanie z frontu

Čítanie hodnôt od frontu je možné ľahko vykonať pomocou ExcerptTrailer inštancia.

Je to ako iterátor, ktorý používame na prechádzanie zbierky v Jave.

Načítajme hodnoty z fronty:

ExcerptTailer tailer = chronicle.createTailer (); while (tailer.nextIndex ()) {tailer.readUTF (); tailer.readInt (); tailer.readLong (); tailer.readDouble (); } tailer.finish ();

Po vytvorení prívesu použijeme nextIndex metóda na kontrolu, či existuje nový výňatok na čítanie.

Raz ExcerptTailer má nový Výňatok Ak chcete čítať, môžeme z nej čítať správy pomocou rozsahu čítať metódy pre hodnoty literálov a typov objektov.

Na záver čítanie ukončíme skončiť API.

6. Záver

V tomto tutoriáli sme poskytli krátke predstavenie frontu kroník a jeho stavebných prvkov. Videli sme, ako vytvoriť rad, zapisovať a čítať dáta. Jeho použitie ponúka mnoho výhod vrátane nízkej latencie, odolnej medziprocesovej komunikácie (IPC) a tiež réžie Garbage Collection.

Riešenie poskytuje vytrvalosť údajov prostredníctvom súborov mapovaných do pamäte - bez straty údajov. Umožňuje tiež súbežné čítanie a zápis z viacerých procesov; zápisy sa však vybavujú synchrónne.

Všetky úryvky kódu nájdete ako vždy na GitHub.


$config[zx-auto] not found$config[zx-overlay] not found