[Talk-de] API 0.6
DarkAngel
daberlin at freenet.de
Di Nov 18 14:08:39 UTC 2008
Frederik Ramm schrieb:
> Hallo,
>
> für die, die die Entwicklung nicht verfolgen, hier ein kurzer Abriss
> darüber, was mit API 0.6 kommen wird. Die Einführung ist um die
> Weihnachtszeit geplant und wird mit einer mehrtägigen Auszeit verbunden
> sein.
>
> Wenn jemand in einem Forum mitliest, in dem das interessant sein könnte,
> gern auch dorthin übernehmen.
>
> * Relationen geordnet - die API wird künftig die Elemente einer Relation
> in der Reihenfolge zurückgeben, wie man sie reingestopft hat. Dadurch
> wird man z.B. eine Busroute und ihre Haltestellen ordentlich abbilden
> können, ohne dass man als "role" sowas wie "stop_1", "stop_2", "stop_3"
> usw. nutzen muss.
>
> * Limits für die Größe von Ways und Relationen - so größenordnungsmäßig
> nicht mehr als 2000 Nodes pro Way und nicht mehr als 2000 Members pro
> Relation. Existierende, die größer sind, können noch heruntergeladen,
> aber nicht mehr verändert werden. Eventuell machen wir auch vorher noch
> eine Zerhack-Aktion, damit es keine größeren mehr gibt.
>
> * Transaktionalität im Backend - keine Diskrepanzen zwischen "current"-
> und "history"-Tabellen mehr, garantierte referentielle Integrität.
>
> * "optimistic locking" - Die Änderung eines Objekts wird künftig nur
> noch erlaubt, wenn die Anfrage sich auf die richtige Versionsnummer
> bezieht. Hierdurch wird das Szenario "User A lädt Daten herunter,
> bekommt Version 5 des Objekts, User B lädt herunter, bekommt auch
> Version 5, User B macht Upload (ergibt Version 6), User A macht Upload
> und überschreibt Arbeit von B" vermieden; User A wird künftig eine
> Fehlermeldung ("409 Conflict" o.ä.) erhalten. - Als kleinen für
> Programmierer bedeutenden Seiteneffekt bringt diese Änderung mit sich,
> dass alle modifizierenden API-Calls inklusive der HTTP-DELETE-Methode
> nun eine Nutzlast (einen Request Body) tragen müssen. Dies ist mit dem
> HTTP-Standard konform, aber nicht alle HTTP-Libraries unterstützen
> Nutzlast bei DELETE (z.B. die Standard-Java-Implementation kanns nicht).
>
> * Changesets - Änderungen müssen künftig zwangsweise in Gruppen
> zusammengefasst werden. Eine Änderung kann nur hochgeladen werden, wenn
> sie sich auf eine gültige solche Gruppe - ein "Changeset" - bezieht.
> Beim Erzeugen eines Changesets muss ein Kommentar (ähnlich einem
> Commit-Kommentar in einem Versionskontrollsystem) eingegeben werden.
> Changesets haben ein begrenztes Fassungsvermögen und eine begrenzte
> Lebensdauer. Datenbank-intern wird für ein Changeset mitprotokolliert,
> welches Rechteck auf der Karte von diesem Changeset insgesamt betroffen
> ist. Abfragefunktionen ermöglichen es später, eine Liste aller
> Changesets für ein bestimmtes Gebiet abzurufen. Datenbank-intern wandern
> auch einige Dinge, die bislang pro Objekt gespeichert wurden - Username
> und "created_by" - in die Changeset-Tabelle (Changesets können beliebige
> Tags haben). Changesets sind nicht atomar/transaktional.
>
> * Diff-Upload - das bereits verbreitete "osmdiff"-Format, in dem auch
> die täglichen diffs generiert werden und das von Osmosis unterstützt
> wird, kann nun auch für Uploads an den Server benutzt werden, d.h. man
> kann eine größere Menge Änderungen in einem diff-File zusammenstellen
> und dieses dann in einem einzigen Vorgang hochladen. Diff-Uploads sind
> transaktional, d.h. wenn eine einzige Änderung im Upload schiefgeht,
> wird keine aktiv.
>
> Alles in allem wird das ein Riesenschritt vorwärts. Leider ist noch
> nicht ganz klar, ob performancemäßig alles so läuft, wie wir das
> erwarten, hier müssen noch Tests geschrieben und durchgeführt werden,
> das Cloudmade-Team (Andy Allan, Shaun McDonald, Matt Amos) arbeitet
> daran. Mit API 0.6 würden die lezten verbliebenen MyISAM-Tabellen
> rausgeworfen und komplett auf InnoDB gesetzt; MySQL-Experten wissen, was
> das bedeutet.
>
> Durch die Changesets wird viel für Rollback und Anti-Vandalismus
> vorbereitet, allerdings unterstützt die API selber keinen
> Rollback-Mechanismus. Es wird also der Programmierer-Community zufallen,
> hier Software zu schreiben, die es dem User erlaubt, relevante
> Changesets herunterzuladen und zu inspizieren und dann auf eins zu
> klicken und zu sagen "dies will ich rückgängig machen", dann ein
> geeignetes "diff" zu erzeugen und dies an die Datenbank zu senden. Im
> simpelsten Fall ist so ein diff wirklich einfach das "Changeset
> rückwärts", aber kompliziert wird es, wenn einige Dinge in der
> Zwischenzeit von anderen verändert wurden. Hier wird es sicherlich eine
> lange Entwicklung geben, bis wir da richtig gute Tools bekommen.
>
> Parallel und weithin unbemerkt ist der Ruby-Code auch von sämtlichen
> MySQL-Spezialfällen bereinigt worden, so dass die API nun zumindest
> theoretisch auch auf PostgreSQL läuft (zunächst ohne
> PostGIS-Extensions). Wer Spass daran hat, kann sich den aktuellen Code
> aus dem SVN ziehen und damit spielen (Bugreports zu Postgres an Andy
> Allan). Es ist nicht geplant, bei der Umstellung auf API 0.6 auch gleich
> auf PostgreSQL zu gehen, aber die Sache wird weiter verfolgt, vorallem
> auch, um was in der Hinterhand zu haben, falls die MySQL-Performance
> nicht akzeptabel ist.
>
> Und abschliessend: Ich bin *nur* der Überbringer dieser Botschaft, ich
> habe selbst nur ein paar kleine Sachen zu 0.6 beigetragen; Lob oder
> Tadel also nicht an mich, ausser ihr wollt danke sagen, dass jemand mal
> alles zusammengeschrieben hat oder meinen Duktus kritisieren ;-)
>
> Bye
> Frederik
>
Danke ;-)
--
Gruß Mario
Mehr Informationen über die Mailingliste Talk-de