{"id":36,"date":"2018-01-22T14:20:09","date_gmt":"2018-01-22T14:20:09","guid":{"rendered":"http:\/\/www.sanchofock.de\/?p=36"},"modified":"2018-01-22T14:20:49","modified_gmt":"2018-01-22T14:20:49","slug":"kaufe-zeit-fuer-zeit","status":"publish","type":"post","link":"https:\/\/www.sanchofock.de\/?p=36","title":{"rendered":"Kaufe Zeit f\u00fcr Zeit"},"content":{"rendered":"<p>Performanceoptimierung ist ein weites Feld und in Teilen auch eine hochspezialisierte Sache. In meinem ersten Post hier zu diesem Thema m\u00f6chte ich mich der Performanceoptimierung als erstes mal theoretisch n\u00e4hern, denn ich finde es ist sehr hilfreich sich dieses bei der Suche nach einer optimalen L\u00f6sung vor Augen zu f\u00fchren, da man andernfalls droht sich in den Details zu verlieren.<\/p>\n<p>Meine Grundsatzthese zur Performanceoptimierung ist, dass Performanceoptimierung immer bedeutet Zeit mit Zeit zu kaufen. Es ist also ein Handel, bei dem es keine (oder nur sehr wenige) \u201eimmer richtige\u201c Entscheidungen gibt.<br \/>\nAuch hierf\u00fcr m\u00f6chte ich mich einer Analogie bedienen um dieses Prinzip klar zu machen und was sollte das beim Thema anderes sein als ein Formel 1 Rennwagen.<br \/>\nDie Performanceanforderungen an einen Formel 1 Rennwagen sind relativ klar. Man muss m\u00f6glichst geringe Rundenzeiten fahren k\u00f6nnen und dabei m\u00f6glichst wenig Ressourcen (z.B. Reifen, Benzin) verbrauchen um diese Spitzenleistungen auch m\u00f6glichst konstant erzielen zu k\u00f6nnen.<br \/>\nAuf den ersten Blick scheint es Parameter zu geben, die quasi immer \u201egut\u201c sind. So ist eine hohe Leistungsst\u00e4rke des Motors beispielsweise immer von Vorteil. Weniger Gewicht scheint auch immer gut zu sein. Aber schaut man genauer hin, so haben alle Faktoren immer eine Wechselwirkung mit anderen oder der jeweils erwachsende Vorteil aus einer Eigenschaft steigt nicht Linear mit der Vergr\u00f6sserung\/Verkleinerung dieser Eigenschaft. Ist die Kraft des Motors beispielsweise so gross und das Fahrzeug so leicht, dass die Reifen schon beim kommen lassen der Kupplung durchdrehen, so ist die viele Kraft nicht nur nutzlos, sondern in diesem Extremfall kontraproduktiv. \u201eDer Wagen bringt seine PS nicht auf die Stra\u00dfe\u201c sagt man dann Umgangssprachlich.<br \/>\nDie optimale Performance erziele ich also, wenn ich den optimalen Kompromiss zwischen Gewicht und Antriebskraft finde und nicht wenn ich das leichtest m\u00f6gliche Auto mit dem st\u00e4rsten m\u00f6glichen Motor kombiniere.<br \/>\nNun ist zumindest in der Formel 1 die m\u00f6gliche H\u00f6chstgeschwindigkeit auch nur ein Aspekt, mit dem alleine man keine guten Rundenzeiten erzielen kann. Am deutlichsten wird dies beim feintuning eines Formel 1 Fahrzeugs. Die Aufgabe der Fl\u00fcgel ist es Abtrieb zu erzeugen, also das Fahrzeug mit Luftdruck quasi an den Boden zu pressen. Jeh \u00f6her dieser Anpressdruck ist, umso h\u00f6her ist auch der Luftwiederstand des Fahrzeugs. Es wird also mehr Kraft ben\u00f6tigt um das Fahrzeug zu bewegen. Da der Motor w\u00e4hrend der Fahrt aber nicht austauschbar ist, steht w\u00e4hrend einer Runde bzw. eines Rennens immer nur die gleiche Kraft zur Verf\u00fcgung.<br \/>\nJe mehr Abtrieb wiederum das Fahrzeug hat, desto schneller kann es durch Kurven fahren, da der Abtrieb das Fahrzeug quasi an die Stra\u00dfe presst.<br \/>\nFindet ein Rennen nun auf einem Kurs mit sehr vielen Kurven und wenigen Geraden statt, so wird also viel Anpressdruck ben\u00f6tigt, um die Kurven schnell fahren zu k\u00f6nnen. Diese Zeit verliert man dann auf der Geraden, weil der erh\u00f6hte Lufzwiederstand dazu f\u00fchrt, dass die Beschleunigung und damit auch die H\u00f6chstgeschwindigkeit gebremst werdrn. In diesem Beispiel kauft man sich also die Zeit in der Kurve mit der Zeit auf der Geraden und besteht die Strecke aus vielen Kurven wird man unter dem Strich schneller sein als mit flachen Fl\u00fcgeln.<br \/>\nAuf einem Kurs mit wenig Kurven und viel gerader Strecke wird es also entsprechend genau umgekehrt sein. Es kommt also immer auf die spezifische Anforderung bzw. das Nutzungsprofil an, welche Einstellung die Beste ist.<\/p>\n<p>Nat\u00fcrlich gibt es auch Parameter, die immer von Vorteil sind. Dies sind aber i.d.R. Dinge, die man als Fehler betrachten muss. W\u00fcrde man beispielsweise einen Dachgep\u00e4cktr\u00e4ger auf das Auto bauen, so h\u00e4tte dieser f\u00fcr ein Rennen vermutlich ausschliesslich Nachteile und niemals Vorteile. Diesen Wegzulassen w\u00e4re also immer Richtig. Aber es war eben von vorneherein ein Fehler diesen zu verbauen.<\/p>\n<p>Gut, aber was hat alles das mit Performance an IT Systemen zu tun? Nun die beschriebenen Prinzipien sind hier genau die gleichen. Die Anforderungen und die ben\u00f6tigten Ressoucen sind andere. Ein Beipsiel, dass der Analogie mit den Fl\u00fcgeln beim Formel 1 Fahrzeug nahe kommt ist die Verwendung von Indexen in Datenbanken. Diese haben viele als das Performance-Allheilmittel f\u00fcr Performanceprobleme bei Datenbanken im Kopf. Ein Index ist eine Art Inhaltsverzeichnis f\u00fcr Daten in einer oder mehreren Spalten einer Datenbanktabelle.<br \/>\nSucht man nun nach bestimmten Inhalten, so hilft ein Index um die gew\u00fcnschten Informationen schneller finden zu k\u00f6nnen. Entsprechende Abfragen werden also schneller.<br \/>\nJedoch muss die Datenbank jedesmal wenn sich die Daten in den betreffenden Spalten \u00e4ndern nicht nur die eigentlichen Daten \u00e4ndern, sondern auch die Informationen in dem Index. \u00c4ndern und Einf\u00fcgen wird folglich mit dem Index langsamer.<br \/>\nBei einer Tabelle, die sehr viel ge\u00e4ndert wird aber sehr selten abgefragt wird, ist der Index also unter dem Strich keine Performanceverbesserung sondern das Gegenteil ist der Fall.<br \/>\nMan sieht also, dass es immer auf die Anforderung bzw. das Nutzungsprofil ankommt, welche Optimierungsmassnahme tats\u00e4chlich von Vorteil ist.<br \/>\nEine bekannte Softwarekomponente, die diesem Prinzip sehr stark Rechnung tr\u00e4gt ist der \u201eQuery-Otimizer\u201c. Die Komponente in einem RDBMS, die bei jeder Abfrage neu entscheidet, auf welche Weise sie das gestelle Problem l\u00f6sen m\u00f6chte. Aber hier\u00fcber alleine k\u00f6nnte ich noch einen ganzen Haufen Artikel schreiben. Und das werde ich in Zukunft auch bestimmt noch tun.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Performanceoptimierung ist ein weites Feld und in Teilen auch eine hochspezialisierte Sache. In meinem ersten Post hier zu diesem Thema m\u00f6chte ich mich der Performanceoptimierung als erstes mal theoretisch n\u00e4hern, denn ich finde es ist sehr hilfreich sich dieses bei der Suche nach einer optimalen L\u00f6sung vor Augen zu f\u00fchren, da man andernfalls droht sich [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[4],"tags":[],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/www.sanchofock.de\/index.php?rest_route=\/wp\/v2\/posts\/36"}],"collection":[{"href":"https:\/\/www.sanchofock.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sanchofock.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sanchofock.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sanchofock.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=36"}],"version-history":[{"count":1,"href":"https:\/\/www.sanchofock.de\/index.php?rest_route=\/wp\/v2\/posts\/36\/revisions"}],"predecessor-version":[{"id":37,"href":"https:\/\/www.sanchofock.de\/index.php?rest_route=\/wp\/v2\/posts\/36\/revisions\/37"}],"wp:attachment":[{"href":"https:\/\/www.sanchofock.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=36"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sanchofock.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=36"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sanchofock.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=36"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}