Bevezetés a nagy várólistába

1. Áttekintés

Ebben az oktatóanyagban gyorsan áttekintjük a Big Queue-t, egy állandó Java Java-megvalósítását.

Beszélünk egy kicsit az architektúrájáról, majd gyors és praktikus példákon keresztül megtanuljuk használni.

2. Használat

Hozzá kell adnunk a bigqueue függőség a projektünktől:

 com.leansoft bigqueue 0.7.0 

Hozzá kell adnunk a tárházát is:

 github.release.repo //raw.github.com/bulldog2011/bulldog-repo/master/repo/releases/ 

Ha megszoktuk az alapvető várakozási sorokat, akkor szellő lesz alkalmazkodni a Big Queue-hoz, mivel az API-ja meglehetősen hasonló.

2.1. Inicializálás

Inicializálhatjuk a várólistánkat, ha leegyszerűsítjük a konstruktor hívását:

@A nyilvános void beállítása előtt () {String queueDir = System.getProperty ("user.home"); String queueName = "baeldung-queue"; bigQueue = new BigQueueImpl (queueDir, queueName); }

Az első érv a várólista otthoni könyvtára.

A második érv a sorunk nevét jelenti. Létrehoz egy mappát a várólista saját könyvtárában, ahol megőrizhetjük az adatokat.

Nem szabad megfeledkeznünk arról, hogy lezárjuk a sorunkat, amikor készen állunk a memóriaszivárgások megakadályozására:

bigQueue.close ();

2.2. Beszúrás

Elemeket adhatunk a farokhoz, egyszerűen meghívva a enqueue módszer:

@Test public void whenAddingRecords_ThenTheSizeIsCorrect () {for (int i = 1; i <= 100; i ++) {bigQueue.enqueue (String.valueOf (i) .getBytes ()); } assertEquals (100, bigQueue.size ()); }

Meg kell jegyeznünk, hogy a Big Queue csak a byte[] adattípus, ezért a beillesztéskor felelősek vagyunk a nyilvántartásaink sorosításáért.

2.3. Olvasás

Ahogy számíthattunk rá, az adatok olvasása ugyanolyan egyszerű a dequeue módszer:

@Test public void whenAddingRecords_ThenTheyCanBeRetrieved () {bigQueue.enqueue (String.valueOf ("new_record"). GetBytes ()); Karakterlánc = új karakterlánc (bigQueue.dequeue ()); assertEquals ("új_rekord", rekord); }

Arra is ügyelnünk kell, hogy olvasáskor megfelelően deserializáljuk adatainkat.

Üres sorból olvasva a NullPointerException.

A. Használatával ellenőriznünk kell, hogy vannak-e értékek a várólistánkon üres módszer:

if (! bigQueue.isEmpty ()) {// olvasás}

Ha ki akarjuk üríteni a sorunkat anélkül, hogy végig kellene mennünk az egyes rekordokon, használhatjuk a összes eltávolítása módszer:

bigQueue.removeAll ();

2.4. Kukucskál

Pillantáskor egyszerűen elolvasunk egy lemezt anélkül, hogy elfogyasztanánk:

@Test public void whenPeekingRecords_ThenSizeDoesntChange () {for (int i = 1; i <= 100; i ++) {bigQueue.enqueue (String.valueOf (i) .getBytes ()); } String firstRecord = új karakterlánc (bigQueue.peek ()); assertEquals ("1", firstRecord); assertEquals (100, bigQueue.size ()); }

2.5. Elfogyott nyilvántartások törlése

Amikor felhívjuk a dequeue módszerrel a rekordok eltávolításra kerülnek a sorunkból, de továbbra is fennmaradnak a lemezen.

Ez esetleg felesleges adatokkal töltheti fel lemezünket.

Szerencsére az elfogyasztott rekordokat törölhetjük a gc módszer:

bigQueue.gc ();

Ahogy a java-i hulladékgyűjtő is megtisztítja a hivatkozatlan tárgyakat a kupacból, gc megtisztítja az elfogyasztott rekordokat a lemezünkről.

3. Építészet és jellemzők

A Big Queue érdekessége, hogy a kódbázisa rendkívül kicsi - mindössze 12 forrásfájl foglalja el a 20 KB lemezterületet.

Magas szinten ez csak egy tartós sor, amely kiválóan kezel nagy mennyiségű adatot.

3.1. Nagy mennyiségű adat kezelése

A sor méretét csak a rendelkezésre álló teljes lemezterület korlátozza. Minden várólistánkban lévő rekord megmarad a lemezen, hogy ütközésálló legyen.

Szűk keresztmetszetünk a lemez I / O lesz, ami azt jelenti, hogy az SSD jelentősen javítja az átlagos áteresztőképességet egy HDD-nél.

3.2. Rendkívül gyors hozzáférés az adatokhoz

Ha megnézzük a forráskódját, akkor észrevesszük, hogy a várólistát memória-leképezett fájl támogatja. Sorunk hozzáférhető része (a fej) a RAM-ban van tárolva, így a nyilvántartásokhoz való hozzáférés rendkívül gyors lesz.

Még akkor is, ha a várólistánk rendkívül nagyra nőne, és terabájt lemezterületet foglalna el, akkor is képesek lennénk O (1) időbeli összetettségben olvasni az adatokat.

Ha sok üzenetet kell elolvasnunk, és a sebesség kritikus kérdés, akkor fontolóra kell venni az SSD használatát egy HDD felett, mivel az adatok mozgatása a lemezről a memóriába sokkal gyorsabb lenne.

3.3. Előnyök

Nagy előnye, hogy nagyon nagy méretűre nőhet. Az elméleti végtelenségig méretezhetjük, ha csak további tárhelyet adunk hozzá, innen kapta a „Nagy” nevet.

Párhuzamos környezetben a Big Queue körülbelül 166MBps adatot képes előállítani és elfogyasztani egy árucikk gépen.

Ha átlagos üzenetméretünk 1 KB, akkor másodpercenként 166 ezer üzenetet képes feldolgozni.

Egyszálú környezetben másodpercenként akár 333 ezer üzenet is képes elmenni - nagyon lenyűgöző!

3.4. Hátrányok

Üzeneteink továbbra is lemezen maradnak, még azután is, hogy elfogyasztottuk őket, ezért gondoskodnunk kell a szemétszedési adatokról, amikor már nincs rá szükségünk.

Felelősek vagyunk üzeneteink sorosításáért és dezerializálásáért is.

4. Következtetés

Ebben a gyors oktatóanyagban megismerhettük a Big Queue-t, és hogyan használhatjuk skálázható és tartós sorként.

Mint mindig, a kód elérhető a Githubon.