Kiitos paljon kommenteistanne!
Teemu Peltola:
- Toimisivatko version-parametri ja ilman junanumeroa tehdyn train-tracking kutsun aikarajoitus (4 tuntia nykyhetkestä molempiin suuntiin kulussa olevat junat) samalla tavalla kuin live-trainsissa?
> Kyllä, samalla tavalla.
versio-kutsussa timestamp-attribuutti rajattu +- x tuntia nykyhetkestä. Varmaankin tunnin tai vähemmän rajoitus, koska neljän tunnin rajalla json-dataa tulee 18MB.
junanumero-kutsussa ei timestamp-attribuuttirajoituksia
- Onko kulkutiedoissa samanlaiset suodatukset näytettävien junien osalta kuin live-trainsissa, vai näytetäänkö myös esimerkiksi ilman aikataulua tehtävien vaihtotöiden kulkutiedot myös?
> Tällä hetkellä ajateltu julkaistavan kaikki junat, joilla on numeerinen junanumero. Tämä saattaa vielä muuttua.
- Onko junanumerolla tehtyyn hakuun suunniteltu/ajateltu toteutettavan versiorajoitusta, äkkiä arvattuna datamäärät saattavat kasvaa yksittäistenkin junien osalta varsin suuriksi ja koko datasetin päivittäminen viimeisten muutosten saamiseksi ei välttämättä olisi tarpeellista?
> Tutkin tilastoja ja eniten kulkutietoviestejä päivältä 2015-09-16 löytyi junalle 865. Tämän junan train-tracking vastaus oli kooltaan 428kB pakkaamattomana.
Toteutan tämän.
- Olisiko kulkutietovastaukseen mahdollista saada tieto edellisestä ja seuraavasta liikennepaikasta, jolloin junan kulkusuuntaa ei välttämättä tarvitsisi päätellä muista tiedoista?
> Tämä tieto tulee mukaan. Kuten myös edellinen ja seuraava raideosuus.
Teemu Sirkiä:
• Tulevatko kulkutietosanomat vain linjalta vai näkyvätkö sieltä myös kaikki ratapihoilta tulevat sanomat, joista voi nähdä esimerkiksi junan kulun liikennepaikan ensimmäiseltä vaihteelta koko vaihdekujan läpi määräraiteelle? Tällöin voi nähdä esimerkiksi, mille raiteelle juna on todellisuudessa saapunut (olettaen että raideosuuden nimen osaa tulkita). Näyttäisi siltä, että tuossa esimerkissä lähdetään Lempäälän raiteelta 1 suoraan linjalle ilman tietoa vaihteiden eristysosuuksien varautumisesta. Toisaalta vaihteiden tarkkuudella tuleva tieto ei välttämättä ole kovin tarpeellista, vaikka sen avulla saisi tehtyä esimerkiksi hienoja ratapihavisualisaatioita kaikkien raideosuuksien tiloista. Kenties tuohonkin voisi vaikuttaa jollain tapaa, tuleeko tietoa vähän vai paljon?
> Myös ratapihat ovat mukana. Ajatus on julkaista kaikkien rataosuuksien tiedot.
• Liitetäänkö raideosuuksien metadatatieto tulevaisuudessa myöhemmin julkaistavaan rataverkon malliin? Sellaiseen verkkomalliin siis, jossa on selvillä kunkin solmun naapurit, jotka olisivat tässä tapauksessa raideosuuksia.
> Tulevaisuudessa julkaista rataverkon malli on parempi ratkaisu, koska data on tarkkaa ja laajempaa. Meillä olevasta datasta puuttuu raideosuuksia ja verkkomallia ei tällä hetkellä ole saatavilla.
Pari detailikysymystä:
• Miksi metadatassa on ranges-lista? Mikseivät startLocation ja endLocation ole suoraan vain tuon elementin ominaisuuksia? Liittyykö tämä kenties vaihteisiin, joilla on useampia alkamis- ja päättymispisteitä tai ratakilometrijärjestelmän "kierouksiin" tietyissä paikoissa, joissa samassa kohtaa voi olla useamman järjestelmän mukaisia kilometrejä?
> Raideosuus voi välillä sijaita kahdella eri ratanumerolla.
Meillä on määritelty 7312 raideosuutta. Raideosuuksilla on yhteensä 7354 sijaintia. On siis harvinaista, että raideosuudella on useita sijainteja.
• Onko train-tracking-vastauksessa näkyvä id tarpeellinen? Olettaen siis, että se on kulkutietosanoman yksilöivä tunnus.
> Tämä on kiva käyttötapauksiin, jossa koodaaja miettii "onko minulla jo tämä objekti".
Ehdotuksia:
• Voisiko metadataan liittää kunkin raideosuuden pituuden, mikäli se on tiedossa? Ratakilometrijärjestelmässä kilometri on usein jotakin muuta kuin täsmälleen 1000 metriä.
> Ei valitettavasti ole saatavilla. "Tulevaisuuden mallissa" tämä tieto on.
• Voisiko train-tracking-viesteissä olla ARRIVAL- ja DEPARTURE-tieto liikennepaikoille? Tällöin liikennetilanteen kokonaiskuvaa voisi seurata näiden viestien avulla ja live-trains-rajapintaa voisi kutsua huomattavasti nykyistä harvemmin, vaikka vain kerran minuutissa tai parissa. (Sivuhuomio: live-trainsin cache-aika versionumerolla on kaksi minuuttia, sen voisi pudottaa vaikka puoleen minuuttiin. Tällöin harvemmin pyydetty live-trains olisi edes puolen minuutin tarkkuudella ajan tasalla.) Tämä olisi datan siirtämisen kannalta huomattavasti tehokkaampaa, koska ei tarvitse siirtää jatkuvasti liikkuneiden junien koko aikataulua. Tähän toteutukseen olisi ainakin kaksi eri vaihtoehtoa:
o OCCUPY-viesteihin liitetään esim. event-niminen lisätieto, jossa on ARRIVAL tai DEPARTURE sen mukaan, jos kyseinen varaustieto laukaisee tiedon junan saapumisesta liikennepaikalle tai lähtemiselle sieltä. Tällöin voisi olla myös eventTime, jossa on aikakorjattu tieto ko. tapahtumalle.
o Luodaan kaksi uutta typeä, ARRIVAL ja DEPARTURE, joissa on aikoina suoraan aikakorjattu aika. Noissa voisi tietysti näkyä myös se raideosuus, joka tuon tiedon on laukaissut.
> Eli haluaisit tiedon siitä, onko raideosuuden kulkutietoviesti aiheuttanut toteuman junan aikatauluun. Tieto on saatavilla, mutta ei tehdä tätä vielä ensimmäisesä versiossa. Tein tästä kehitysehdotuksen. LIIKEAVOI-85.
Sitten hieman radikaalimpi muutosehdotus:
• Tässä liikkuu dataa niin paljon, ettei minusta ole mielekästä pitää kulkutietosanomien rajapintaa puhtaasti HTTP-muotoisena endpointtina, jota pollataan vähän väliä. Olisi paljon tehokkaampaa toteuttaa tuo yllä esitetty train-tracking versionumerolla vaikka WebSocket-muotoisena siten, että soketin läpi tulisi noita täsmälleen samanlaisia JSON-viestejä virtana niitä haluaville sitä mukaa, kun niitä tulee järjestelmään. Tällöin data ei ole purskeista ja vältytään erilaisilta välimuistitus- ja versionumero-ongelmilta suoraan. Tähän liittyen muuttaisin esitettyjä URLeja seuraavasti:
o train-tracking pelkällä versionumerolla poistuisi kokonaan
o train-tracking junan numerolla ja lähtöpäivällä säilyy ennallaan
o train-tracking ilman parametreja palauttaa kunkin liikkeellä olevan junan viimeisimmän kulkutietosanoman. Tässä voisi olla vaikkapa samanlainen puolen minuutin cache.
> Jos haen kulkutietoviesteista kannasta isoimman versionumeron ja haen hetken kuluttua sillä train-tracking?version, niin vastauksen koko on luokkaa 150kB. Muutaman minuutin päästä vielä 350kB. Pakkaamattomana. En usko, että suorituskyvystä tulee ongelma.
Äkkiseltään versiohaku on mielestäni yksinkertaisempi, koska socket-katkoja ja siinä välissä menetettyä dataa ei tarvitse miettiä. Mutta tutkimme tätä vielä tarkemmin: LIIKEAVOI-84. Käsittääkseni jossain ulkomailla tälläinen socket-ratkaisu on käytössä.
Yt. Jaakko