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.