XML > Databasfrågor ala prisjakt

Permalänk
Medlem

XML > Databasfrågor ala prisjakt

Hej!

Kort och koncist går min fråga ut på vad som är bäst. Att spara varje webbhandlares produkter för sig eller i en stor gemensam databas?

Låt oss säga att jag vill samla in all film, musik och spel som olika webbhandlare har i sina productfeeds med tillstånd såklart.

Det jag vill åstadkomma är följande:
Lena - Satellite pris 100kr, tillagd i vår databas 2010-01-14

Antag även att webbhandlarna kommer att uppdatera sina productfeeds ett antal gånger om dagen och jag är intresserad av att hålla priserna så uppdaterade som möjligt vilket leder till att jag kommer att kolla om deras xml fil uppdaterats ett antal gånger om dagen.

Eftersom varje webbhandlare har flera tusen filmer i sina produktfeeds. Vad är då bäst?

Att spara alla musikfeeds i en tabell kallad exempelvis musics
eller spara musik och webbhandlare var för sig exempelvis musics_ginza?

Hoppas att ni förstår vad jag menar. Tänk även på att det kan hända att datan i min databas behöver uppdateras ex antal ggr om dagen.

Permalänk
Medlem

Spara allt i samma tabell. Om du ska jämföra poster från olika handlare med varandra blir det ett helvete att skriva frågor som går mot ett dynamiskt antal tabeller, och en bra databashanterare ska klara av att hantera den mängden data du nämner.

Visa signatur

Bra, snabbt, billigt; välj två.

Ljud
PC → ODAC/O2 → Sennheiser HD650/Ultrasone PRO 900/...
PC → S.M.S.L SA300 → Bowers & Wilkins 607

Permalänk
Medlem

Försök normalisera sådant som återkommer, t ex de företag som förekommer i en tabell och gör sedan en relation mellan dessa, så att du istället för att ha 'Ginza' på varje rad så har du en nyckel som pekar på 'Ginza' i i.e. 'företags'-tabellen. På så sätt minskar du både storleken på dina tabeller och index.

Permalänk
Medlem

Problemet jag kände med att spara allting i samma tabell var att jag var tvungen att leta upp rätt produkt hos rätt handlare för att uppdatera pris etc. Kommer inte detta vara väldigt tidskrävande? Naturligtvis blir det mkt lättare att skriva frågor som plockar ut informationen.

Låt oss säga att min musictabell innehåller 20 000 olika poster.
Varje dag ändrar varje handlare priset på 1000 av dessa under olika tidpunkter på dygnet, handlaren tar även bort produkter som utgått ur lagret.

Är det exempelvis genomförbart att ha ett cronjob som kontrollerar om varje handlare har uppdaterat sin productfeed var 30 minut för att ta något som åtminstone jag tycker är lite för ofta för en applikation som denna. Och om han har uppdaterat den, lägga till nya produkter, ta bort gamla, uppdatera pris i min egen databastabell. Jag vill ju inte att mina besökare ska kunna behöva drabbas av någon delay. Hur lång tid tar en sådan här uppdatering och skulle det vara möjligt att uppdatera så ofta? Nu tänker jag som sagt inte uppdatera så i verkligheten men jag känner ändå att jag vill ha ngt humm om vad som är genomförbart och inte.

Skulle man tjäna prestanda på att använda sig av DOM t.ex istället för simpleXML?
Jag kan bara simpleXML men har hört att DOM objekt är bra så det kanske är värt att lära sig?

Naturligtvis ska jag även normalisera tabellen.

Permalänk
Medlem
Skrivet av mojito:

Problemet jag kände med att spara allting i samma tabell var att jag var tvungen att leta upp rätt produkt hos rätt handlare för att uppdatera pris etc. Kommer inte detta vara väldigt tidskrävande? Naturligtvis blir det mkt lättare att skriva frågor som plockar ut informationen.

Låt oss säga att min musictabell innehåller 20 000 olika poster.
Varje dag ändrar varje handlare priset på 1000 av dessa under olika tidpunkter på dygnet, handlaren tar även bort produkter som utgått ur lagret.

Är det exempelvis genomförbart att ha ett cronjob som kontrollerar om varje handlare har uppdaterat sin productfeed var 30 minut för att ta något som åtminstone jag tycker är lite för ofta för en applikation som denna. Och om han har uppdaterat den, lägga till nya produkter, ta bort gamla, uppdatera pris i min egen databastabell. Jag vill ju inte att mina besökare ska kunna behöva drabbas av någon delay. Hur lång tid tar en sådan här uppdatering och skulle det vara möjligt att uppdatera så ofta? Nu tänker jag som sagt inte uppdatera så i verkligheten men jag känner ändå att jag vill ha ngt humm om vad som är genomförbart och inte.

Skulle man tjäna prestanda på att använda sig av DOM t.ex istället för simpleXML?
Jag kan bara simpleXML men har hört att DOM objekt är bra så det kanske är värt att lära sig?

Naturligtvis ska jag även normalisera tabellen.

Det är absolut inga problem att uppdatera (eller göra querys) detta mot en databas om du har någorlunda vettig utformning på tabeller och index. 20000 poster är att betrakta som en liten tabell. Flaskhalsen blir parsningen av xml och inte i din databas. Simple/SAX bör vara snabbare än DOM om det är stora xmldocument du ska traversera.

Permalänk
Medlem
Skrivet av mojito:

Problemet jag kände med att spara allting i samma tabell var att jag var tvungen att leta upp rätt produkt hos rätt handlare för att uppdatera pris etc. Kommer inte detta vara väldigt tidskrävande? Naturligtvis blir det mkt lättare att skriva frågor som plockar ut informationen.

Det vore ju litet lättare om du kunde ge exempel på den data du ska lagra. I alla fall så hoppas jag att det finns några bra nyckelbegrepp i den, t.ex. ID-nummer på handlare och produkter, och inte bara klartext.

Att uppdatera en post på rätt handlare och produkt är ju i princip samma sak som att uppdatera en produkt i en handlarspecifik tabell, bara det att det är en till sats i WHERE-klausulen:

UPDATE products SET price = :price, last_update = SYSDATE WHERE shopID = :shopID AND productID = :productID

Visa signatur

Bra, snabbt, billigt; välj två.

Ljud
PC → ODAC/O2 → Sennheiser HD650/Ultrasone PRO 900/...
PC → S.M.S.L SA300 → Bowers & Wilkins 607

Permalänk
Medlem

Nu hittade jag ingen öppen version som jag kunde länka till exempelvis ginza så jag visar en från ving isället som ser liknande ut, tyvärr så ser jag inga bra idn för produkter i den.

http://ws.thomascook.se/LastMinuteSales/lms_xml_ow.aspx?sitei...

Exempelvis ginzas ser liknande ut, så vi kan lika bra använda vings.
Handlare kan jag ju lägga till via mitt cronjob, att från den adressen är det denna handlare etc så borde inte vara omöjligt. Det enda som det känns som att man kan använda som ett id är deras adress efter frågetecknet men det känns som ett jobbigt långt och onödigt id att identifiera med så har du några idéer om hur jag skulle kunna identifiera en produkt i en sådan xml fil med en rad i en databastabell?

Permalänk
Medlem
Skrivet av mojito:

Nu hittade jag ingen öppen version som jag kunde länka till exempelvis ginza så jag visar en från ving isället som ser liknande ut, tyvärr så ser jag inga bra idn för produkter i den.

http://ws.thomascook.se/LastMinuteSales/lms_xml_ow.aspx?sitei...

Exempelvis ginzas ser liknande ut, så vi kan lika bra använda vings.
Handlare kan jag ju lägga till via mitt cronjob, att från den adressen är det denna handlare etc så borde inte vara omöjligt. Det enda som det känns som att man kan använda som ett id är deras adress efter frågetecknet men det känns som ett jobbigt långt och onödigt id att identifiera med så har du några idéer om hur jag skulle kunna identifiera en produkt i en sådan xml fil med en rad i en databastabell?

Skapa en tabell som mappar mellan begrepp som finns i XML:en och använd denna när du sparar data i tabellen.

Ett bättre alternativ är dock att fråga de som äger datan om du kan få den i ett lämpligare format.

Visa signatur

Bra, snabbt, billigt; välj två.

Ljud
PC → ODAC/O2 → Sennheiser HD650/Ultrasone PRO 900/...
PC → S.M.S.L SA300 → Bowers & Wilkins 607

Permalänk
Medlem
Skrivet av Phod:

Skapa en tabell som mappar mellan begrepp som finns i XML:en och använd denna när du sparar data i tabellen.

Skulle du kunna ge mig ett exempel på vilka begrepp som jag skulle mappa i exempel xml filen som jag länkade på ett bra sätt? För jag är osäker på hur jag skulle kunna mappa för att skapa ett unikt id utifrån xml filen.

Om jag tar första posten så ser den ju ut såhär:

<lms> <lastupdated>2010-10-23 11:00:09</lastupdated> <travel> <depdate>21/1</depdate> <destcd>Playa del Cura</destcd> <duration>2v</duration> <price>8 850:-</price> <departure> Stockholm-Arlanda</departure> <hotel>SunGarden Riviera Marina Hotel</hotel> <oneseatprice></oneseatprice> <url>http://www.ving.se/redir/lmshotellist.aspx?QueryAges=42%2c42&...</url> </travel>

Vad skulle du mappa på vad i den för att kunna avgöra om exempelvis priset förändrats eller om produkten tagits bort etc?
Hur skulle din mappningstabell kunna se ut?

Permalänk
Medlem

Om produkten är en resa till Playa del Cura på 2 veckor med avresa från Arlanda och avresedatumet 21/1 så har du din nyckelbegrepp där. Om inte så får du fundera på vad din definition av "produkt" är.

Visa signatur

Bra, snabbt, billigt; välj två.

Ljud
PC → ODAC/O2 → Sennheiser HD650/Ultrasone PRO 900/...
PC → S.M.S.L SA300 → Bowers & Wilkins 607

Permalänk

Väcker gammal tråd. Vad tror ni det tagit tidsmässigt att utveckla prisjakts dynamiska sökfunktion?

Permalänk

Ursäkta att jag lånar tråden, kör själv en rese sida och ska nu lägga in "sita minuten" som updateras auto, jag har fått en xml länk från apollo, men hur kan jag få in den i själva sida, alltså hur gör man läst lite om parsing, etc. snälla hjälp