Datafeeds verwerken met Big Data

Big-Data-and-MongoDB

Datafeeds verwerken met Big Data

Sinds 2006 ben ik actief op het gebied van affiliate marketing. Het grootste probleem binnen deze branche is  het verwerken van datafeeds.  Datafeeds worden door webwinkels aangeboden aan affiliate netwerken, helaas ontbreekt er een logische structuur bij het aanleveren van datafeeds.  Wellicht loop je dan tegen technische blockers aan.

Datafeeds tools niet altijd de beste oplossing

In het verleden hadden wij 2 tools ontwikkeld; Alfie en Alfieliate. Deze tools verwerkte datafeeds tot een uniform bestand. In de praktijk blijkt dat een commerciële tool niet altijd de juiste oplossing is  om datafeeds te verwerken. Het beste kun je een op maat gemaakte software ontwikkelen met een flexible database structuur.

Persoonlijk raad ik je aan om gebruik te maken van noSQL (big data). Op de markt zijn diverse Big Data engines beschikbaar, persoonlijk ben ik fan van Mongo DB. Ik zal je uitleggen waarom.

Mongo DB om een datafeed te verwerken

Het grootste voordeel van Mongo is dat het een document database is, deze database kan tegen veranderingen. Bij mySQL zijn we gewend om vooraf te definiëren hoe een database eruit moet komen te zien.  In het geval van MongoDB hoeft dit niet. Ik ga je dit uitleggen in mySQL termen.

In Mongo DB  kun je collecties aanmaken, dit kun je zien als tabellen binnen mySQL. Deze tabellen hoef je vooraf niet te definiëren. Wanneer je een webapplicatie ontwikkeld, kun je direct in de code aangeven dat er een collectie moet worden aangemaakt.  Zie onderstaande psuedo code hoe er een collectie in Mongo DB wordt aangemaakt.

// je kunt MongoClient van PHP gebruiken om een instantie te creëren.
$Mongo = new Mongo();
$Mongo->setCollection('feeds'); // database oftewel collectie wordt aangemaakt binnen mongo db

Vervolgens is het niet noodzakelijk om binnen Mongo DB veldtypes te definiëren, dit wordt binnen de programma code gedaan. Voor Mongo DB maakt het namelijk niet uit wat de veldtypes zijn, binnen mySQL is dit  echter wel vereist.
Een voorbeeld: Ik wil een datafeed parsen van Wehkamp.nl. Deze heeft de volgende velden: productname,price,description,productUrl,imageUrl,category. Door middel van een PHP script laad ik de gehele feed in Mongo DB.

$Mongo = new Mongo();
$Mongo->setCollection('feeds'); // database oftewel collectie wordt aangemaakt
$data = array();

$data['productName'] = 'Playstation 4'; // mongo ziet dit als string
$data['price'] = '1.10'; // mongo ziet dit als string, maar je kunt dit typecasten naar een float
$data['description'] =' een omschrijving';
$data['productUrl'] = 'http://www.ermmedia.nl';
$data['imageUrl'] = 'http://www.ermmedia.nl/logo.png';
$data['category'] = 'category';

$Mongo->insert($data); // thats it...

 

Nu zit mijn data in Mongo. Nu wil ik een feed van Otto inladen, deze ziet er als volgt uit: productname,price,description,productUrl,imageUrl,category, EAN, Shipping time

$Mongo = new Mongo();
$Mongo->setCollection('feeds'); // database oftewel collectie wordt aangemaakt
$data = array();

$data['productName'] = 'Playstation 4'; // mongo ziet dit als string
$data['price'] = '1.10'; // mongo ziet dit als string, maar je kunt dit typecasten naar een float
$data['description'] =' een omschrijving';
$data['productUrl'] = 'http://www.ermmedia.nl';
$data['imageUrl'] = 'http://www.ermmedia.nl/logo.png';
$data['category'] = 'category';
/* Deze velden wordt nu automatisch binnen Mongo aangemaakt../*
$data['ean'] = 13345566 // mongo ziet dit als een integer
$data['shippingTime'] = 1; // mongo ziet dit als een integer
$Mongo->insert($data); // thats it...

 

In Mongo DB worden de velden EAN, Shipping time dan automatisch toegevoegd.

Mongo voor Datafeeds

Mijn tip voor de mensen die tegen problemen lopen met het verwerken van Feeds, maak gebruik van Mongo DB.

Als er vragen zijn, laat dan een reactie achter of neem contact met ons op 🙂

Deel dit artikel met je vriendenShare on FacebookShare on Google+Tweet about this on TwitterShare on LinkedInEmail this to someonePin on Pinterest

Leave a Reply