Külső adatbázisok elérése és egyedi raktárkészletek kezelése Magento-ban

Miről is lesz szó a cikkben?

  • Mi is az az FMCG?
  • Általánosságban pár szó az adatbázisokról
  • Adatbázisok és a Magento
  • Adatbázis típusok és felhasználásuk az FMCG-hez
  • Készlet változások kezelése a Magentoban, kérdések és javaslatok
  • Middleware: Köztes rétegek, MOM rendszerek

Mi is az az FMCG?

Rövid defíníció:

Fast-moving consumer goods vagy consumer packaged goods (CPG), azaz gyorsan forgó fogyasztási cikkek.

Azokat az árucikkeket értjük ez alatt, amelyek viszonylag gyakran, napi, heti vagy havi rendszerességgel újra megvásárlásra kerülnek és viszonylag alacsony árúak.

Ide tartozik például a borotva, papír zsebkendő vagy kisbabások esetén a nedves törlőkendő és a pelenka, de lehet szó a kötszerekről vagy a ragtapaszról is.

 

 Adatbázisok

Rövid defíníció:

Az adatbázisok azonos minőségű, strukturált információk összessége, amelyet tárolásra, szerkesztésre és lekérdezésre alkalmas adatbázis-kezelő alkalmazás kezel. Az adatbázisok célja az adatok megbízható, hosszú távú tárolása és viszonylag gyors visszakeresés biztosítása.

Az adatbázisokat két nagy csoportba érdemes bontani, a logikai és a fizikai adatbázisokra. A logikai adatbázisokat felépítésük, működésük és sajátosságaik alapján szokás megkülönböztetni a fizikai adatbázisoktól. Adatmodellekkel reprezentáljuk őket és a korszerű adatbázisoknál a fizikai adatbázist több logikai adatbázison keresztül is elérhetjük, mintha egyfajta burkoló rétegeket képeznének a tárolt adatok elé.

A Magento adatmodelljei (model) és gyűjteményei (collection) pontosan egy ilyen logikai adatbázist képeznek le a fizikai adatbázis elé, hogy megkönnyítsék és érthetőbbé tegyék az adatok feldolgozását. Az adatmodellekről, gyűjteményekről részletesebben olvashatsz ebben a cikkünkben: Magento 2 modul fejlesztés lépésről lépésre – 1. rész

 

magento külső adatbázis, modellek közti összefüggés

Fogalmi, logikai és fizikai modell összefüggése

 

Adatbázisok és Magento

A webáruházak és manapság minden alkalmazás egyik legfontosabb része az adatbázis, melyek üzemeltetése, karbantartása és fejlesztése hatalmas összegekbe kerül. Az adatbázisok lehetnek elosztottak is, mivel a Magento webshop logikai adatbázisa beburkolja a kapcsolatot, így csökkenthetjük a költségeinket és a megfelelő adatokat a megfelelő helyeken kezelhetjük.

A Magento emellett képes egyszerre több különböző adatbázist is kezelni, melyekhez a PDO-t használja, így Cubrid, FreeTDS / Microsoft SQL Server / Sybase, Firebird, IBM DB2, IBM Informix Dynamic Server, MySQL 3.x/4.x/5.x, Oracle Call Interface, ODBC v3 (IBM DB2, unixODBC és win32 ODBC), PostgreSQL, SQLite 3 és SQLite 2, Microsoft SQL Server / SQL Azure, 4D alapú kapcsolatokat könnyedén kiépíthetünk benne.

 

Többszörös adatbázis-kezelés

Ahhoz, hogy egyszerre több adatbázist is kezelni tudjon a Magento webáruházunk, csupán elegendő a modulunk config.xml konfigurációs állományba felvenni az új adatbázis elérhetőségének paramétereit (host, username, password, dbname), valamint a connection > use-ban meghatározni a kapcsolat azonosítóját.

Ezzel a kapcsolatnak már nincs szoftveres akadálya, ha a hálózaton keresztül a host elérhető, akkor a kapcsolat létrejön. A fejlesztőknek ezután már csak a logikai adatbázist (model, collection) kell létrehoznia, hogy az adatok áramlása zökkenőmentes legyen.

 

Adatbázisok: Állomány alapú források

A tapasztalatok azt mutatják, hogy a legtöbb esetben egyszerű (csv) vagy összetett (xml, json) forrás állományok állnak a felhasználók birtokában. Ezek az állományok tartalmazzák a teljes termékkínálatot, a felhasználói adatokat vagy akár a rendeléseket is. A Magento is lehetőséget biztosít ezen adatok exportálására, egészen könnyedén az adminisztrációs felületről.

 

magento külső adatbázis, skálázhatóság

 

Előnyei

  • Könnyen kezelhetőek
  • Könnyen módosíthatóak
  • Az ember számára viszonylag könnyen olvasható formátum
  • Exportálási lehetőség elérhető, nem indokol fejlesztést

 

Hátrányai

  • Szerkesztéskor nagy a hibalehetőség, amivel a teljes állomány szerkezete felbomolhat
  • Rekordok szerkesztése nehézkes
  • Az állományok kódlapjának beállítása adattorzulást okozhat
  • Importálásnál a teljes adatmennyiséget feldolgozzuk
  • Nem frissül automatikusan

 

Adatbázis-kezelő rendszerek

Az állomány alapú forrásokhoz képest itt annyi a különbség, hogy egy adatbázis-kezelő rendszeren keresztül érjük el adatainkat. Az adatbázis-kezelő áthidalja az állományok kezelése okozta hátrányokat, hiszen jól értelmezhető logikai adatmodelleket kínál erre. A fizikai adatfüggetlenség biztosítására az adatbázis-kezelő motortól független állományszervezési rendszereket dolgoztak ki, hogy a háttértár szervezése illetve eszköz függetlensége biztosítva legyen.

Az adatmodellek alapján megkülönböztethetünk relációs, objektumorientált, hálós, deduktív, objektumrelációs, deduktív relációs, deduktív objektumorientált adatbázis-kezelőket.

 

Háttértár szervezések

  • Optikai
  • Lyukszalagos
  • Mágnesszalagos
  • Merevlemezes
  • Memória-adatbázis

 

Előnyei

  • Felhasználói felület az adatokhoz
  • SQL általános nyelvből alakultak ki a lekérdező nyelvek
  • Funkcionalitás bővíthető
  • Elosztott rendszerek megvalósíthatóak

 

Hátrányai

  • Bonyolultak: Logikai, halmazkezelési ismeretek szükségesek
  • Lekérdező nyelvet ismerni kell
  • Nő az adattároláshoz és az adatbázis kezelőhöz szükséges tárterület szükséglet.

 

Adatbázisok: Szolgáltatás alapú források

A szolgáltatás alapú források alá tartoznak azok az adatbázis elérések, melyeket egy interfészen keresztül érhetünk el egy másik szerveren, mely akár a világ másik felén is lehet. Még a mai napig is leginkább SOAP protokollon keresztül vagy a fejlesztéseknek hála, valamilyen REST szolgáltatáson keresztül tudjuk az adatokat elérni és manipulálni.

A SOAP interfészen keresztül történő elérés legnagyobb hátránya, hogy az interfész bonyolult és részletes, szemben a REST interfésszel, mely sokkal egyszerűbb és kényelmesebb. A biztonság szempontjából a SOAP kliens volt korábban a megbízhatóbb, azonban az SSL kapcsolatokkal és egyéb titkosítási algoritmusokkal most már azonos megbízhatósági szintre került a két interfész.

A mobil alkalmazások fejlődési iránya azt mutatja, hogy szolgáltatás alapon érik el a távoli adatbázisokat, leginkább REST kliensként, mivel az adatbázisok méretei miatt ezek készüléken elhelyezése és feldolgozása hardver- és szoftverteljesítmény szempontjából sem lenne ideális.

 

Előnyei

  • Teljesítmény: Kisebb teljesítmény is elegendő az alkalmazás futtatásához
  • A REST alapú szolgáltatások interfésze egyszerű (HTTP kérések), jól érthető és kicsi erőforrásigényű a JSON alapú formátum könnyen kezelhető, akár már frontend szinten is.
  • A SOAP protokoll dokumentáltsága és hibajelzése kiforrottabb
  • Az általános biztonság SSL tanúsítványokkal megvásárolható

 

Hátrányai

  • A SOAP alapú szolgáltatások interfésze összetett, bonyolult, a fejlesztések drágák és az XML formátum miatt nehézkes a feldolgozása
  • A hálózati kommunikáció bizonytalanságai miatt lassú, elérhetetlen lehet
  • A hálózati kommunikáció miatt a biztonság nem 100%-os, további titkosítási algoritmusokra lehet szükség

 

 

magento külső adatbázis rest, soap

 

Adatbázisok: Külső alkalmazás források

A vállalatirányítási rendszerek adatbázisai nem különülnek el a külső adatbázisoktól, azonban mégis összetettebbek, nagyobbak (méret) lehetnek, mint más célirányosan összerakott adatbázisok. Mivel ezek az adatbázisok vállalatirányítási feladatokat látnak el, így folyamatosan frissülnek, változnak és bővülnek. Éppen ezért összetett interfészekkel rendelkeznek a külső rendszerek számára, melyek integrációja a közepestől a nagy bonyolultságú feladatig terjedhet.

Szerencsére a legtöbb ERP, CRM és PIM rendszer rendelkezik olyan modullal mely telepítése és minimális konfigurációja révén biztosítja a webáruházunkkal történő összekötést. Nagyon fontos, hogy ezen rendszerek között ajánlott az azonnali, kétirányú kommunikáció kialakítása, hogy a lehető legkevesebb emberi erőforrást kelljen az adminisztrációs munkára fordítani.

 

Előnyei

  • A kommunikáció lehet teljesen automatizált, így az adminisztrációs feladatok jelentősen csökkennek
  • Egy rendszert elegendő megtanulni kezelni és figyelni
  • A legismertebb rendszerekhez történő integráció gyors és zökkenőmentes
  • Fejlett felhasználói interfésszel rendelkeznek
  • Több protokollon vagy interfészen keresztül is képesek kommunikálni

 

Hátrányai

  • A rendszerek közötti kommunikáció keresztmetszete
  • A rendszerek közötti kommunikáció hiánya esetén adatvesztés
  • Kétirányú kapcsolat és/vagy aszinkronitás nélkül túl nagy emberi erőforrásra van szükség

 

Termék- és készletváltozások

Az FMCG esetén kritikus tényező a termék- és készletváltozások azonnali, legalább naprakész frissítése. Hiszen, ha egy új termék érkezik az áruházba, annak nem biztos, hogy fontos azonnal eladhatónak lennie a webáruházban, de ha elfogy egy termék készlete, akkor azt azonnal jelezni kell a vásárló felé vagy leadni a rendelést a beszállító, raktár vagy gyártó felé.

Ez a szinkronizáció ideális esetben kétirányú, azaz mindkét oldal képes jelezni a másik oldalnak, hogy az adatok megváltoztak és automatikusan az üzleti logikának megfelelően frissíteni az adatbázisokat. Ez még két rendszer esetén is bonyolult fejlesztést igényel mind a webáruház, mind az adatbáziskezelő alkalmazás részén, de vannak olyan esetek is, amikor egy ERP, egy PIM és több webáruház összekötése a feladat.

 

Mit lehet ilyenkor tenni?

 

Első és talán legfontosabb kérdés, hogy mekkora adatmennyiségeket szeretnénk mozgatni? A teljes termékkészletet, termékeket, megrendeléseket és vevői információkat frissíteni akarjuk? Elegendő időszakosan, várólistás (queue) megoldással az adott időszakban éppen aktuális változásokat frissíteni? Azonnal frissíteni kell minden változást a rendszerek adatbázisai között?

A fenti kérdések mind-mind kulcsfontosságúak, hogy meghatározzuk, milyen szintű integrációra van szükség. Egy sekély integrációnál lehet, hogy elegendő egy napi csv/xml állomány alapú importálás a külső rendszerből a webáruházba, akár ezt automatizálva futtatni. Közepes szintű bonyolultság a várakozó listás megoldás, ahol egyik vagy másik oldal is egy sor-szervert használ a frissítésre. A mély integrációnál pedig már akár köztes rétegben történik az adatok szinkronizációja.

Az alább felsoroljuk a különbségeket az egyes módszerek között, röviden ismertetve, hogy melyik mivel járhat és mennyire komplex a fejlesztési listában.

 

1.1. Teljes adatok cseréje

Az adat mennyiségek mozgatása és frissítése szempontjából a teljes adatok cseréje az úgynevezett fapados megoldás. A termékek, megrendelések mennyisége fontos szempont ebben az esetben, mivel több tízezer termék esetén az ilyen frissítés már akár percekig is eltarthat, ami kiesést vagy termék elérhetetlenséget jelenthet a webáruházban. Éppen emiatt csak abban az esetben javasoljuk ezt a megoldást, ha a termékek vagy készlet információk frissítése viszonylag rövid ideig tart vagy jól időzíthetően az áruház forgalmához az esetlegesen elhúzódó frissítés.

 

1.2. Részleges adatok csere

A részlegesadat-kommunikáció akkor jöhet szóba, ha többször az áruház működése alatt is frissíteni kell a termék-, készlet- vagy rendelési információkat. Az időzített megoldások mellett, melyek pontatlansága okozhat problémát az azonnali szinkronizáció is szóba jöhet, mivel a kisebb mennyiségű adatkommunikáció gyorsan végrehajtódik a rendszerben.

A készletkezelés és az FMCG típusú áruházak integrációs megoldásai pontosan ide tartoznak, mivel nem a teljes termék, csupán a darabszámok változnak.

 

2.1. Adatok áttöltésének iránya: egyirányú, kétirányú

Viszonylag egyszerű kérdés, azonban ha jobban átgondoljunk, további kérdéseket vet fel, ráadásul az integrációs költségek növekedése mellett az adatkommunikáció mennyiségét is jelentősen növelheti.

Egyirányú adatkommunikációról akkor beszélünk, ha van egy kiválasztott (master) rendszer – mondjuk egy ERP –, amelybe minden másik külső rendszer, azaz például a webáruházunk is beküldi az adatokat. A fő rendszer (ERP) pedig feldolgozza és tárolja őket, az ERP-t használó adminisztrátorok pedig a kapott adatok alapján irányítják a vállalati folyamatokat.

Kétirányú kommunikáció esetén mindkét rendszer kommunikál a másikkal és egymástól függően vagy függetlenül megadott interfészeken keresztül küldik el az adatokat. Itt már nincs alá- és fölérendelt szerep, csupán a prioritásokat kell megfelelően meghatározni vagy sorszerverekkel vezényelni a változások kezelését.

Az ERP integráció megtervezéséről ebben a cikkünkben olvashatsz: Magento ERP integráció: hogyan készítsük elő hibák nélkül

 

3.1. Adatok közvetett áttöltése

Az adatok áttöltését lehet közvetetten (manuális vagy ütemezett módon) vagy közvetlen (API interfészeken keresztül) frissítéssel megoldani. Az időszakos áttöltésnél szóba jöhet az emberi beavatkozás, aki az egyik rendszerből átemeli az adatokat a másik rendszerbe.

Ez történhet egyszerű export-import folyamatként, ahol az adatok egy állományba kerülnek mentésre (export), majd ezt az állományt a másik rendszer erre kialakított interfészén keresztül betölti az adatbázisba (import). Ez a folyamat természetesen automatizálható, ha az adott alkalmazás által kimentett adatokat a másik rendszer meghatározott időközönként (pl. cronjob) automatikusan betölti az adatbázisába.

Láthatjuk, hogy ez a módszer még az emberi tényező kivonása mellett is lassú, pontatlan és emiatt nem eredményes az FMCG szempontjából, azonban más esetekben, ahogy tapasztaltuk, elegendő lehet.

3.2. Közvetlen információcsere

Az adatok közvetett áttöltése nem éppen a legjobb megoldás a raktárkészletek kezelésére, hiszen a termékek darabszámának változását érdemes minél pontosabban szinkronizálni, így a közvetlen információcsere lehet a kézenfekvő megoldás. Ahhoz, hogy ez megvalósuljon, sokféle technológia áll a rendelkezésünkre, a Magento beépített XmlConnect, API (SOAP vagy REST) megoldásai mellett a legtöbb külső alkalmazáshoz már kész modulokat vásárolhatunk a Magento Connect-ből.

Kétségkívül az egyik legjobb megoldás, hiszen az adatok szinkronizálása azonnal, a változások bekövetkezésekor megindul, azonban, ha speciális külső alkalmazásunk van, melyhez még nincs konnektor (Magento modul), akkor az integrációs költségek jelentősen megugranak. Ne feledjük el, hogy az automatikus, azonnali megoldásokhoz az esetek nagyobb hányadában mélyintegrációra van szükség, mely a korábban leírtak szerint mind időben, mind fejlesztési költségekben nagy.

 

3.3. Automatikus vagy kézi szinkronizáció

Az előzőekben már szóba került, hogy emberi erőforrásokkal is megoldható az adatok szinkronizálása az alkalmazásaink között és ennek automatizálása is megoldható, azonban ezek az időszakos adatkommunikációk meglehetősen megnehezítik a készletek szinkronizációját. Automatikus szinkronizáció alatt itt azt az időzített feladatot értjük (pl.: cronjob), amikor a folyamatot a rendszer indítja, de helyette akár egy ember is meg tudja oldani. Ezek a jelentősen olcsóbb megoldások.

 

3.4. Aszinkron, azonnali megoldások

Az aszinkron megoldásokkal jelentősen gördülékenyebbé tehetjük a készlet- és adatszinkronizációt az alkalmazásaink között. A végtelenségig azonban még így sem lehet egyszerűsíteni a folyamatokat, hiszen az üzleti igények kötött függőségei miatt az aszinkronitás csak bizonyos feladatok vagy részfolyamatok esetén vezethet hasznos eredményre. Az azonnali adatkommunikáció pedig pontosan ugyanezen függőségek miatt nem valósítható meg 100%-osan.

A legjobb, legtisztább és egyben a legbonyolultabb megoldások közé tartozik, jelentős fejlesztési idővel és költségekkel, így ezt csak akkor érdemes választanunk, ha valóban indokolt a webáruházaink esetén.

 

Köztes réteg: Middleware, MOM

A köztes réteg (middleware), mint megoldás a készlet- és adatkommunikáció szinkronizációja az egyik leginkább fejlődő és jelenleg a legmodernebb technológiai megoldás, mind hardver, mind szoftver téren. Egy olyan megoldásról (szoftver és hardver) beszélünk, mely az alkalmazásaink közé ékelődve külső beavatkozás nélkül, az előre meghatározott üzleti logika alapján megvalósítja az adatkommunikációt.

 

magento külső adatbázis middleware

 

Tulajdonképpen egy félig intelligens rendszer, melyen keresztül az adatok áramlanak és eljutnak egyik alkalmazásunkból a másikba, attól függően, hogy éppen mely üzleti folyamat, mely részén tartanak.

Tekinthetünk úgy rá, mint egy hatalmas labirintusra, melynek egyes ki- és bejáratainál az alkalmazásaink találhatóak és az adatok a labirintuson keresztül jutnak el a másik alkalmazás kapujához, hogy közben a falakon lévő szabályokat követik. Az áthaladás közben az adatok átalakulnak a kívánt formátumba és a fogadó félnek megfelelő adatstruktúrát veszik fel, így nincs szükség alkalmazásainkban az adatok transzformálására.

Ezek a köztes szoftverek külön szerverekből állnak, olyan kiegészítő technológiákkal, mint az Üzenetorientált köztesréteg (Message Oriented Middleware), Redis memória alapú gyorsítótár és egyéb szoftveres és hardveres megoldások a köztes réteg támogatására. A köztes rétegek ma már a felhőben helyezkednek el, memória-alapú szervereken, melyek API interfészei a legtöbb webáruházhoz illeszkednek. A piacon már elérhetőek kész megoldások, melyekkel könnyedén integrálhatjuk rendszereinket és összehangolhatjuk a folyamatainkat az egyes rendszerekben.

Ezek a megoldások az általános üzleti folyamatokra épülnek, és többé-kevésbé személyre szabhatóak, azaz jól illeszkednek az általános, nem speciális üzleti igényeket kiszolgáló webáruházakhoz. Vegyük azonban figyelembe, hogy ha az üzleti folyamataink speciálisak és eltérnek az adott alkalmazás általános üzleti folyamataitól, akkor az integráció is egyedileg, személyre szabottan fog ideálisan működni.

 

magento external databases connection fmcg infographics

Konklúzió

Az FMCG kezelésére rengeteg megoldás létezik és ezekből a számunkra megfelelő megoldásokat kiválasztva egy olyan optimális rendszert építhetünk fel, mely kiszolgálja Magento webáruházunkat. A döntés szempontjából fontos kritériumokat a fentiek alapján meg tudjuk határozni, így ki tudjuk választani a kézenfekvő megoldást.

Ne feledjük el azonban, hogy a hosszú távú célok és az adott piaci szegmens ismerete nélkül, ha a legegyszerűbb és (nem biztos, hogy) a legolcsóbb megoldás választjuk, könnyen megeshet, hogy az integrációs költségeket többször is meg kell majd fizetnünk.

Ha bizonytalan a döntésben, írjon nekünk vagy hagyjon kommentet, és segítünk kiválasztani a megfelelő technológiát és megoldást, ezzel jelentős költségeket megtakarítva cégének.

 

103 válaszok
  1. Inpatient Rehab Centers Near Me says:

    Alcohol Rehab Centers http://aaa-rehab.com Alcohol Rehab Centers http://aaa-rehab.com Inpatient Drug Rehab Facilities
    http://aaa-rehab.com

  2. best CBD oil says:

    Hi there! Would you mind if I share your blog with my myspace group?
    There’s a lot of folks that I think would really enjoy your
    content. Please let me know. Many thanks

  3. JanSix says:

    Cheapeast Zentel Store Free Consultation [url=https://buyciallisonline.com/#]generic cialis online canada[/url] Amoxicillin With Or Without Food Cialis Amlopres

  4. carte prepagate says:

    Hello there! I know this is kinda off topic but I was
    wondering if you knew where I could locate a captcha plugin for
    my comment form? I’m using the same blog platform as yours and
    I’m having trouble finding one? Thanks a lot!

  5. best CBD gummies says:

    Great site you have got here.. It’s difficult to find high
    quality writing like yours these days. I really appreciate
    people like you! Take care!!

  6. best cbd cream for pain says:

    My coder is trying to convince me to move to .net from
    PHP. I have always disliked the idea because of the expenses.
    But he’s tryiong none the less. I’ve been using Movable-type on a variety of websites for about a year and am anxious about
    switching to another platform. I have heard very good things about
    blogengine.net. Is there a way I can transfer all my wordpress content into it?
    Any help would be really appreciated!

  7. best cbd oil for pain says:

    Aw, this was an extremely nice post. Taking the time and actual effort to generate a top notch article… but what can I say… I procrastinate a
    lot and don’t seem to get anything done.

  8. best CBD gummies says:

    Terrific work! This is the kind of information that are meant to be shared around the
    web. Disgrace on the search engines for not positioning this publish higher!
    Come on over and visit my web site . Thanks =)

  9. best CBD oil says:

    My spouse and I stumbled over here by a different web address
    and thought I may as well check things out.
    I like what I see so now i’m following you. Look forward
    to exploring your web page for a second time.

  10. best CBD oil says:

    Hi to all, how is the whole thing, I think every one is getting more from this
    site, and your views are pleasant in support of new
    people.

  11. best CBD oil says:

    My programmer is trying to convince me to move to .net from PHP.
    I have always disliked the idea because of the expenses.

    But he’s tryiong none the less. I’ve been using
    WordPress on various websites for about a year and
    am anxious about switching to another platform.

    I have heard great things about blogengine.net.
    Is there a way I can transfer all my wordpress content into it?

    Any help would be really appreciated!

  12. best CBD oil says:

    Its like you learn my thoughts! You appear to understand
    a lot approximately this, such as you wrote the e-book in it or something.

    I believe that you simply can do with some p.c.
    to pressure the message home a bit, however instead of that, that is great blog.
    A fantastic read. I will certainly be back.

  13. simgiagoc says:

    Fine way of telling, and pleasant piece of writing to take data about my
    presentation topic, which i am going to deliver in college.

  14. simgiagoc says:

    Attractive section of content. I just stumbled upon your blog and in accession capital to assert that I get in fact enjoyed account your blog posts.
    Anyway I’ll be subscribing to your feeds and even I achievement you access
    consistently quickly.

  15. CBD oil says:

    Asking questions are genuinely pleasant thing if you are not understanding anything fully, but this
    article provides fastidious understanding even.

    My website CBD oil

  16. CBD oil UK says:

    Howdy! Quick question that’s totally off topic.
    Do you know how to make your site mobile friendly? My website
    looks weird when browsing from my iphone. I’m trying to find a theme
    or plugin that might be able to fix this problem. If you have any recommendations, please share.

    Thank you!

    Feel free to surf to my homepage :: CBD oil UK

  17. best CBD oils UK says:

    Hola! I’ve been following your weblog for some time now and finally got the courage to
    go ahead and give you a shout out from Humble Tx!
    Just wanted to mention keep up the fantastic work!

    Feel free to visit my site: best CBD oils UK

  18. CBD products says:

    Its like you read my mind! You appear to know a lot about this, like you wrote the book in it or something.
    I think that you can do with some pics to drive the message home a little bit, but other than that,
    this is fantastic blog. A great read. I will definitely be back.

    Also visit my web-site CBD products

  19. CBD oils says:

    At this moment I am going away to do my breakfast, afterward having
    my breakfast coming yet again to read additional news.

    Here is my homepage; CBD oils

  20. CBD oil for anxiety says:

    Woah! I’m really enjoying the template/theme of this site. It’s simple, yet effective.
    A lot of times it’s tough to get that “perfect balance” between usability and appearance.
    I must say that you’ve done a amazing job with this.
    Also, the blog loads very quick for me on Firefox.
    Exceptional Blog!

    Feel free to surf to my blog post: CBD oil for anxiety

  21. free instagram followers says:

    I do not know whether it’s just me or if perhaps everyone else experiencing problems with your blog.
    It seems like some of the written text within your posts are running off the screen. Can somebody else please comment and let me know
    if this is happening to them too? This could be a issue with
    my internet browser because I’ve had this happen previously.

    Thank you

    Also visit my web site – free instagram followers

  22. albuterol inhaler says:

    you’re in reality a just right webmaster.
    The web site loading velocity is amazing. It kind of feels that you’re doing any distinctive
    trick. Moreover, The contents are masterpiece. you’ve done a wonderful
    task in this matter! https://amstyles.com/

  23. generic cialis says:

    quiero comprar viagra online ancendaGoact [url=https://bbuycialisss.com/#]Buy Cialis[/url] emusuapnen 100 Mg Viagra Price Walmart expamb Cialis Adaree Amoxicillin Elixir

Trackbacks & Pingbacks

  1. croatia viagra 100mg

    Külső adatbázisok elérése és egyedi raktárkészletek kezelése Magento-ban – aionhill.com

  2. cheap cialis szerint:

    cheap cialis

    Külső adatbázisok elérése és egyedi raktárkészletek kezelése Magento-ban – aionhill.com

  3. cheapest 100mg viagra delivered overnight

    Külső adatbázisok elérése és egyedi raktárkészletek kezelése Magento-ban – aionhill.com

  4. buy tylenol szerint:

    buy tylenol

    Külső adatbázisok elérése és egyedi raktárkészletek kezelése Magento-ban – aionhill.com

  5. can i buy naltrexone over the counter

    Külső adatbázisok elérése és egyedi raktárkészletek kezelése Magento-ban – aionhill.com

  6. cialis online no prescription

    Külső adatbázisok elérése és egyedi raktárkészletek kezelése Magento-ban – aionhill.com

  7. order viagra overnight delivery

    Külső adatbázisok elérése és egyedi raktárkészletek kezelése Magento-ban – aionhill.com

Hagyjon egy választ

Want to join the discussion?
Feel free to contribute!

Vélemény, hozzászólás?

Az email címet nem tesszük közzé.