Vinjetter Inledning I denna kurs kommer vi att utgå från transporter som tema för vinjetterna. Fokus för kursen blir vilken information som behöver vara tillgänglig och hur denna skulle kunna lagras. Man kan som i tidigare kurser tänka sig att denna data används av bilen för att den ska kunna optimera sina val, men det är lika möjligt att föraren använder dem för sin planering och med möjlighet att undvika besvärligt väglag eller trafikstockningar. En sista möjlighet är att de används för att styra trafiken och till exempel stänga av vägavsnitt eller ändra hastigheten. Er uppgift i kursen blir att utifrån vinjetterna arbeta med olika aspekter av design och implementation av en databas för ovanstående.
Vinjett 1: Relationsdatabas för effektivaste vägen Den här vinjetten handlar om hur man kan representera karta och väginformation i en relationsdatabas. Utgångspunkten är att vi ser kartan med vägnätet som en graf liknande hur det såg ut i optimeringskursen. Vi antar att vi kan beräkna en kostnad för varje vägavsnitt utifrån avståndet och tillgänglig information till exempel om trafikflöden och väder. Vi vet att vi kommer att vilja använda informationen för effektivaste väg sökningar, dvs. använda någon av algoritmerna från optimeringskursen. Hur skulle ett bra ER-diagram för detta se ut? Hur skulle en bra design av relationsdatabasen se ut? Påverkas denna av algoritmens behov av data? Utgå från representationen av grafer och de algoritmer som ni jobbat med i optimeringskursen. Du får gärna snegla på hur kartor representeras i GIS-system.
Vinjett 2: ER till relationer Två personer skulle implementera en adressbok. De gjorde varsitt förslag till ER-modell. Hur stora är skillnaderna? Vad blir motsvarande relationsdatabas?
Vinjett 3: Normalisering, för- och nackdelar Studera följande möjliga representationer av vilka vägsegment en bil befinner sig i för ögonblicket: Representation 1: tblroadsegment SegmentID (PK) SegmentLength tblcars CarID (PK) CurrentSegment (FK references tblroadsegment(segmentid)) CurrentSpeed Representation 2: tblcarsinroadsegment SegmentID (PK tillsammans med CARID) CarID (PK tillsammans med Segment ID) CurrentSpeed SegmentLength Representation 3: tblroadsegment SegmentID (PK) SegmentLength NrOfCarsInSegment tblcars CarID (PK) CurrentSegment (FK references tblroadsegment(segmentid)) CurrentSpeed Vad är skillnaden mellan representationerna från ett normaliseringsperspektiv? Antag att en mycket viktig fråga för vår databasapplikation är att hålla reda på hur många bilar som finns i varje segment i varje ögonblick. Räkna med att databasen är stor och att vi totalt har hundratusentals aktiva bilar i databasen. Vilka för respektive nackdelar har de olika representationerna, tex. effektivitet, lätt att uppdatera, total datamängd, konsistens? Man brukar räkna med två huvudtyper av databaser: OLAP (online analytical processing), så kallade data warehouses (datalager), där användarna i ställer komplexa frågor och data sällan ändras; samt OLTP (online transaction processing) där man räknar att med att användarna uppdaterar databasen relativt frekvent. Vilka av representationerna ovan passar bäst för respektive system? Hur skulle du karaktärisera denna applikation och vilken representation är bäst här?
Vinjett 4: Lokaltrafiken i Miljököping Kommunstyrelsen i Miljököping vill minska på bilåkandet och i stället få fler att anlita kollektivtrafiken. Man har gjort en undersökning där man identifierat två huvudanledningar till att medborgarna inte åker kollektivt; Det tar för lång tid, det är mycket snabbare att köra egen bil och det är visserligen billigare än att åka egen bil, men inte tillräckligt och det är krångligt att köpa biljetter. Man har därför bestämt sig för ett alternativt upplägg: - Kollektivtrafiken ska vara behovsstyrd. Varje person som vill åka registrerar sig och talar om varifrån, vart och när de vill åka. Detta kan göras lång tid i förväg, t.ex. varje vardag åker jag till jobbet klockan 8 och hem klockan 17, eller med kortare framförhållning. Personen får sedan ett meddelande om var bussen/bilen går och exakt när. - Bokningen av resor sker via speciella bokningsföretag. Bokningen kan ske på webben, via telefon eller sms. - Man vill ha många bolag som står för resorna och många olika typer av fordon allt från taxibilar till bussar. Varje bolag kan se alla bokningar och välja att åta sig transporten. De kan lägga upp det som olika turer vid behov eller fasta rutter på sträckor där många reser. - För att uppnå en tillräcklig massa transporter räknar man med att bokningsföretag och transportföretag måste samarbeta och kunna ta över varandras bokningar och transporter. - De personer som reser betalar en fast kostnad per år. Man räknar med att denna ska vara ganska liten och hoppas till och med att kunna erbjuda servicen gratis till en början. - Bolagen som står för transporterna får betalt per passagerare de transporterar och den sträcka passagerarna ska åka fågelvägen. De får också en bonus om de sköter sina transporter effektivt, dvs. fordonet ska vara så fullt som möjligt och den totala körsträckan ska vara minimal. - Bokningsföretagen får betalt efter en liknande modell. De får en summa för varje person som bokat via dem. Dessutom finns ett avdrag för varje passagerare som får inte får transport, får vänta för länge på sin transport eller om de får åka längre än den dubbla sträckan jämfört med att ta sin egen bil. Kan ni rita ett ER diagram för ovanstående?
Vinjett 5: Effektivisering med hjälp av index Denna vinjett bygger vidare på vinjett 4 från optimeringskursen, här repeteras en del av texten: Man ska köra en bil mellan två orter (säg Stockholm och Göteborg), och vill planera vägvalet. (Färden ska ske många gånger, så det är värt besväret att arbeta lite för att finna den bästa vägen.) Man har tillgängligt en datoriserad karta över alla relevanta vägavsnitt, med avstånd och andra data (t.ex. vägstatus) för varje vägavsnitt. (Med ett vägavsnitt avses en sträcka utan relevanta korsningar, dvs. ett vägavsnitt används antingen helt eller inte alls.) Utifrån dessa data kan man för varje vägavsnitt beräkna en kostnad för att använda vägavsnittet. Kostnaden består främst av avståndet, men innehåller också andra aspekter, t.ex. lutning, vägbredd, mm. Man har viktat de olika faktorerna så att kostnaden i huvudsak ska spegla utsläppen av föroreningar. Hur stort kan ett realistiskt problem vara? Hur lång tid bör man avsätta för att finna ett optimalt vägval? (Sekunder, minuter, timmar, dagar?) Utgå från det ni kom fram till där om storleken på ett realistiskt problem samt er design av databasen från vinjett 2 eller ert projekt. Utifrån detta, uppskatta hur mycket data som måste lagras, samt hur stora era datafiler i databasen skulle bli för en realistisk tillämpning. Uppskatta sedan hur många diskaccesser som behövs för att lösa ett vägvalsproblem. Föreslå sedan hur detta skulle kunna förbättras med hjälp av index. Vilken typ av index skulle vara möjligt att använda? Hur många diskaccesser behövs med hjälp av indexet? Finns det andra sätt att få en snabbare exekvering av effektivaste vägproblemet? Kan dessa kombineras med index?
Vinjett 6: Transaktioner och aktörer Staden Bilköping har stora problem med luftföroreningar från bilar. Lösningen blir att införa vägavgifter. Eftersom man vill begränsa och jämna ut bilflödet inför man en liten avgift för varje vägsträcka som en bil kör på samt för varje sträcka ett tak på hur många bilar som får passera per timme. Avgiften är beroende av hur många bilar som för tillfället finns på vägsträckan. Det är alltså billigare att köra på vägar med mindre trafik och dyrare att köra på sträckor där många för närvarande vill köra. Med denna prissättning hoppas man att kunna styra biltrafiken så att avstängning av sträckor inte behöver göras alltför ofta. För att det här ska fungera i praktiken har varje bil försetts med en speciell GPSmodul som kan föreslå en billigaste väg beräknat på avstånd och aktuellt pris på sträckorna. Modulen kan också förboka biljetter så att föraren säkert vet att han kan komma fram planerad väg. Bokning av biljetter och kontroll av var bilarna kör sker mot en central databas. Följande scenario beskriver informationsflödet mellan två bilar och serverdatorn. För en körning på gör de först en ruttplanering baserat på den aktuella trafiksituationen. De reserverar sedan plats i alla segment de behöver köra i och påbörjar sin körning. Varje gång de kommer till ett nytt segment rapporteras detta genom ett anrop till EnterSegment som kontrollerar att maxtaket för denna timme inte nåtts innan en bil får köra in. Följande scenario uppstår: Bil 1: Bil 2: Start_transaction PlanRoute(Home, Work) ReserveSegment(A) Start_transaction PlanRoute(Home, City) Reserverar ett antal segment ReserveSegment(B) ReserveSegment(B) Reservera fler segment. Påbörjar sin körning Påbörjar sin körning EnterSegment(A) EnterSegment(B) EnterSegment (B) Måste vänta då Bil1 tagit sista tillåtna plats. Commit Kan man förklara detta beteende genom dålig transaktionshantering? Du får själv göra antaganden om till exempel uppdateringsstrategi. Kan du lösa det med bättre transaktionshantering? Vad händer om du ändrar uppdateringsstrategi? Går det att få en bättre lösning om du ändrar semantiken för PlanRoute, ReserveSegment och EnterSegment? För varje lösning: Är den realistisk i verkligheten i en situation med många bilar? Vad kan göras bättre? Tror ni att en sådan här lösning skulle förbättra trafiksituationen i staden? Vilka för och nackdelar finns?