DWH-Architekturen: Hub & Spoke 29.11.2010

Nicolas Meseth
Nicolas Meseth, Senior eXpert

    Grundsätzlich werden in der Literatur drei unterschiedliche Data Warehouse Architekturen vorgeschlagen und diskutiert [2]. Jede davon hat ihre Vor- und Nachteile und für jedes Unternehmen ist die eine oder andere DWH-Architektur sinnvoller. Gemeint sind die (1) Hub & Spoke Architektur, das (2) Zentrale DWH sowie das (3) verteilte DWH.

    In diesem Beitrag geht es um die Vorstellung der ersten, der so genannten Hub & Spoke Architektur. Die Abbildung unten zeigt die grundlegende Idee dahinter.

    Der untere Teil der Architektur stellt dieoperativen Systeme dar, aus denen letztlich die Daten der verschiedenen Prozesse stammen. Da Unternehmen für ihre operativen Prozesse gewöhnlich eine Reihe von IT-Systemen einsetzen, ist auch deren Datenhaltung naturgemäß heterogen. Die Daten müssen also zunächst mittels eines ETL-Prozesses homogenisiert und in eine gemeinsame integrierte Datenschicht, das Data Warehouse, geladen werden. In der vorgestellten Architektur stellt diese Datenschicht den Hub dar.

    Der Hub ist eine zentrale, unternehmensweite Datenbank, in der alle analyserelevanten Daten in bereinigter Form gespeichert werden. Von diesem Hub werden mindestens eine, in der Regel jedoch viele kleinere Datenbanken abgeleitet, die so genannten Spokes. Spokes sind also nichts anderes als Data Marts und stellen somit einen Ausschnitt des Gesamtdatenbestandes des Unternehmens dar. Der Schnitt kann entlang verschiedener Achsen geschehen, z.B.:

      • Zeitliche Ausschnitte
      • Fachliche Ausschnitte
      • Divisionale Ausschnitte (Abteilungen, Produktsparten, Mitarbeiter)

      Top-Down Entwicklung

      Ein Vorteil der Hub & Spoke-Architektur ist, dass der Aufbau des Hubs Schritt für Schritt geschehen kann. Am Anfang steht die Entwicklung eines ersten Data Marts, der aufgebaut wird, um Analysen auf einem Teilbereich der Unternehmensdaten durchführen zu können. Der Hub ist zu diesem Zeitpunkt identisch mit dem einen Data Mart. Kommen mit der Zeit neue Anforderungen aus anderen Abteilungen, die andere Daten benötigen, hinzu, so können weitere Data Marts erstellt werden. Wichtig ist nun, dass die Daten des neuen Data Marts in den Hub integriert werden, und dass eventuell im Hub bereits vorhandene Daten wiederverwendet werden (z.B. eine Dimension Kunde, die in beiden Analysen relevant ist). Dadurch ist sichergestellt, dass unternehmensübergreifend dieselben Masterdaten verwendet werden, und keine Daten redundant vorhanden sind.
      Auch die umgekehrte Reihenfolge bei der Entwicklung ist denkbar: Zuerst wird der Hub als große integrierte Datenbank entworfen, wovon danach erst die Spokes abgeleitet werden. Dieser Ansatz birgt jedoch das Problem, dass die Planung einer solchen Datenbank zu Beginn eines BI-Projekts sehr schwierig ist.

      Modularisierung & Agile Entwicklung

      Die Hub & Spoke Architektur erlaubt es also, das DWH sukzessiv aus kleineren Data Marts aufzubauen. Dieser Ansatz ist modular, denn er erlaubt es mit geringem Aufwand, einzelne "Module" (Spokes) abzuschalten oder hinzuzufügen. Somit kann ein agiles Projektvorgehen verwendet werden, indem zu Beginn prototypisch ein ausgewählter Data Mart implementiert und dem Endanwender zur Verfügung gestellt wird. Dabei kann der komplette BI-Prozess, von der Beladung (ETL) bis zur Analyse in einem geeigneten Frontend oder Report, prototypisch für diesen kleinen Ausschnitt abgebildet werden. Ist das Ergebnis entsprechend den fachlichen Anforderungen, so kann mit dem nächsten Data Mart fortgefahren werden. Falsche fachliche Annahmen und fehlende Anforderungen werden so frühzeitig erkannt und führen am Ende eines langen Projekts nicht zu aufwändigen Change Requests.

      Komplexe Beladung und Synchronisation

      In der Hub & Spoke Architektur wird immer der Hub als Gesamtes beladen, und erst danach können die angeschlossenen Spokes (Data Marts) synchronisiert werden. Hieraus können Probleme entstehen, z.B. die Frage, wann welche Abteilung frische Daten benötigt und ob diese Zeitpläne miteinander in Einklang zu bringen sind. Zudem muss berücksichtigt werden, dass durch den Synchronisationsbedarf zwischen Hub und Spokes eine nicht zu vernachlässigende Last auf dem Netzwerk produziert wird, die durch das ständig wachsende Datenvolumen weiter verstärkt wird.
      Zusammengefasst kann also gesagt werden, dass im Vergleich zu anderen Architekturen der Hub & Spoke Ansatz eine größeren Administrationsaufwand mit sich bringt [2]. Um dem entgegen zu wirken bietet Microsoft mit dem SQL Server 2008 R2 Parallel Data Warehouse (ehemals Projekt Madison) eine skalierbare Technologie für die Implementierung einer Hub & Spoke Architektur [4]. Auf der anderen Seite ist der Planungsbedarf vor Projektbeginn in der Hub & Spoke Architektur vergleichsweise gering, und es kann auf agile Projektmethoden zurückgegriffen werden.
      Links & Referenzen
      [1] Using SQL Server to Build a Hub-and-Spoke Enterprise Data Warehouse Architecture,
      [2] Bauer, A., Günzel, H. (Hrsg.), Data Warehouse Systeme: Architektur, Entwicklung, Anwendung, 2004.
      [3] Bachmann, R,, Kemper, G., Raus aus der BI-Falle: Wie Business Intelligence zum Erfolg wird. 2009.
      [4] SQL Server 2008 R2 Parallel Data Warehouse. URL: http://www.microsoft.com/sqlserver/2008/en/us/parallel-data-warehouse.aspx.
      Share |

      Server-Umzug per UPS und U-Bahn 26.11.2010

      Svenja Henß
      Svenja Henß, Senior Assistant

      Wie man trotz Rechenzentrums-Umzug doch seine Up-Time halten kann...

      Herausforderung: die Uptime des Servers (7 Jahre) soll trotz Umzugs in ein anderes Rechenzentrum nicht unterbrochen werden.

      Lösung: durch einen Lüfter wurde ein zweites Netzkabel an den Gleichrichter gelötet und der Server für den Transport per U-Bahn durch eine UPS mit Strom versorgt.

       

      Leider stammt das Video nicht von uns, aber ich habe es schon mal vorsorglich an unseren Admin weitergeleitet. ;-)

      Viel Spaß beim Anschauen und ein schönes 1. Adventswochenende.

      Share |

      C#: Ausgabe der print-Meldungen von Stored Procedures 24.11.2010

      Matthias Jauernig
      Matthias Jauernig, Senior eXpert

      Als Entwickler im Enterprise-Umfeld interagiert man täglich mit Datenbanken und führt über eine Datenzugriffsschicht in seiner .NET-Anwendung Stored Procedures aus.

      Diese Trennung zwischen Programmlogik in C#/.NET und den Stored Procedures (T-SQL) bringt allerdings das ein oder andere Mal auch Nachteile mit sich. So steht man häufig vor der Herausforderung, dass man als Entwickler die Berechnungsschritte einer Stored Procedure nachvollziehen möchte bzw. diese in seiner Anwendung loggen möchte, was z.B. für Debugging-Zwecke sehr hilfreich sein kann.

      Bei direkter Ausführung einer Stored Procedure auf dem DB-Server kann man Ausgaben über die print-Anweisung erzeugen, z.B. mit “print 'Dies stellt ein Zwischenergebnis dar'”. Diese Ausgabe lässt sich auch bei Verwendung einer SqlConnection in C# behandeln. Dafür existiert auf der SqlConnection das Event InfoMessage. Dieses wird immer dann ausgelöst, wenn eine print-Ausgabe bei der Ausführung einer SP erfolgt. Der zweite Parameter des Events hat den Typ SqlInfoMessageEventArgs und besitzt u.a. ein Property Message, über das sich die Nachricht abfangen und behandeln lässt:

         1: using(var conn = new SqlConnection(connString))
         2: using(var cmd = new SqlCommand(SP_NAME, conn))
         3: {
         4:     cmd.CommandType = CommandType.StoredProcedure;
         5:     conn.Open();
         6:     
         7:     // Event-Handler für print-Ausgaben registrieren
         8:     conn.InfoMessage += (s, msg) => Console.WriteLine(msg.Message);
         9:  
        10:     // SP ausführen und Ergebnisse verarbeiten
        11:     using(var reader = cmd.ExecuteReader())
        12:         // ...
        13:     
        14:     // ...
        15: }

      So ist es auf einfache Art und Weise möglich Ausgaben bei Ausführung einer Stored Procedure in seiner .NET-Anwendung abzufangen und darauf reagieren zu können.

      Share |

      Inspizieren von binär kodierten WCF Nachrichten 22.11.2010

      Sebastian Weber
      Sebastian Weber, Senior eXpert

      Fiddler ist das Standardwerkzeug zur Untersuchung von Web-Traffic. Er hängt sich als Proxy zwischen den eigenen PC und das Internet und erlaubt die detailierte Analyse ein- und ausgehenden HTTP(S) Verkehrs.

      Möchte man jedoch die binär kodierten Nachrichten einsehen, die ein Silverlight Client mit einem WCF-Service austauscht, so wird es problematisch, weil Fiddler dieses Protokoll von Haus aus nicht beherrscht.

      Microsoft bietet jedoch eine Erweiterung für Fiddler an, die diese Lücke schließt. Allerdings findet sich auch in der sehr flexibel erweiterbaren WCF eine Stelle, an der sich die Untersuchung von Nachrichten einbinden lässt. Dazu folgende Diskussion aus dem SDX Portal:

      WCF Binary-encoded Message Inspector for Fiddler

      Bislang habe ich beim Gespann Silverlight/Fiddler immer auf text encoding umgestellt um zu sehen, was über die Leitung geht (mit dem entsprechenden Aufwand).

      Jetzt bin ich zufällig drüber gestolpert, dass man Fiddler beibringen kann, das binary encoding selbst zu decoden: http://code.msdn.microsoft.com/wcfbinaryinspector

      Komentar 1:

      Zwar nicht viel einfacher und mit etwas Aufwand: Hier beim Kunden wird für das Erstellen der WCF-Proxies eine Factory genutzt. Diese erstellt zu Laufzeit um den Proxy herum einen oder mehre weitere Proxies (Kaskade von Wrappern). Aktuell gibt es Proxies für Logging, Fehlerhandling usw. Wie passt da Ganze hier rein? ich habe mir mit 20 Zeilen Code einen Proxy geschrieben, der Request und Response in eine Datei legt. Dabei ist das Binding vollkommen egal, da dies vor dem eigentlichen WCF-Aufruf passiert. Für "Wie habt ihr uns aufgerufen und was habt ihr reingeschickt" ist das eine große Hilfe. Vor allem später in Produktion kann das Ganze mit einer Einstellung eingeschaltet werden. (unser Service greift auf 5 andere zu). Worauf ich hinaus will: Fiddler ist nett, habe ich auch auf meiner Kiste, aber so wie man sich Gedanken zu Logging und Tracing macht sollte man hier auch etwas Hirnschmalz reinstecken.

      Komentar 2:

      WCF bietet auch Infrastruktur für die Untersuchung ein- und ausgehender Nachrichten an
      http://msdn.microsoft.com/en-us/library/system.servicemodel.dispatcher.iclientmessageinspector.aspx

      Komentar 3:

      Gefällt mir. Einziges Manko: man kann Request und Response nicht einander zuordnen. Also wenn ich einen Proxy habe und 3 Nachrichten drüber schicke (multithreaded, async, ...) weiß ich nicht mehr wer zu wem gehört. Ich wollte eben im Dateinamen immer gleich sehen können welche Response zu welchem Request gehört.

      Komentar 4:

      Das kriegst du quasi geschenkt mit dazu.
      BeforeSendRequest gibt einen correlationState vom Typ Object zurück. Dort kannst du hineinpacken was du möchtest. Standard ist die Verwendung einer eindeutigen Guid.
      Und AfterReceiveReply bekommt vom Framework diesen correlationState gefüttert. Et voilá, du hast deine Zuordnung.

      Share |

      SQL Server Execution Plan zur Laufzeit ermitteln 19.11.2010

      Viktor Ewert
      Viktor Ewert, Senior eXpert

      Es kann durchaus vorkommen, dass man nicht weiß welchen Execution-Plan der SQL-Server für ein Query nutzt. Bedingt durch Veränderung des Datenvolumens etc. kann es dann auch vorkommen, dass eine Query von einem Tag auf den nächsten extrem lange läuft. Möchte man den tatsächlichen Execution-Plan zur Laufzeit ermitteln, so hat man folgende Möglichkeit.

      Die folgende Query filtert die offenen Sessions von meinem Beispielrechner “MyHost”. An dieser Stelle kann natürlich auch über andere Spalten der Tabelle sys.dm_exec_session gefiltert werden, z.B. login_name

         1: select session_id,request_id,plan_handle 
         2: from sys.dm_exec_requests 
         3: where session_id in ( 
         4:     select session_id from sys.dm_exec_sessions where host_name = 'MyHostname' 
         5: )

      Als Ergebnis wird die Spalte plan_handle zurückgegeben. Diesen Wert verwendet man nun für die Selektion des Execution-Plans.

         1: select * 
         2: from sys.dm_exec_query_plan(<plan_handle>)

      Im ResultSet wird jetzt die Spalte query_plan angezeigt. Dieses XML öffnet man, speichert es unter der Dateiendung *.sqlplan ab, und öffnet es im Management-Studio. Und schon hat man einen Execution-Plan.

      Share |

      C#: Effiziente Wertabfrage von Expressions 17.11.2010

      Matthias Jauernig
      Matthias Jauernig, Senior eXpert

      Der monatliche Office Day bei der SDX bietet immer wieder Anlass zu interessanten Diskussionen, die teilweise nette technische Schmankerl bereithalten. So unterhielt ich mich letzte Woche mit einem Kollegen über die Möglichkeit Guard-Klassen per C# Expressions zu schreiben. Mit einer solchen Klasse können leicht Argument-Prüfungen zu Beginn von Methoden durchgeführt werden, die Prüflogik wird dabei in der Guard-Klasse gekapselt.

      Eine Methode einer solchen Guard-Klasse könnte z.B. AssertNotNull(...) sein, die prüft ob ein übergebenes Methodenargument null ist und in diesem Fall eine ArgumentNullException wirft. Mit Expressions kann der zu prüfende Parameter elegant an AssertNotNull() übergeben werden:

         1: public void MyMethod(SomeType elem)
         2: {
         3:     Guard.AssertNotNull(() => elem);
         4:     
         5:     // eigentliche Logik
         6: }

      Über die Auswertung der Expression kann die AssertNotNull()-Methode sowohl den Argumentnamen als auch den Argumentwert extrahieren. Es müssen also nicht beide Werte als Parameter an AssertNotNull() übergeben werden (was zudem die Übergabe des Argumentnamens als string bedeuten würde).

      Mit Kompilierung

      Der Wert des angegebenen Arguments wird dabei einfacherweise oftmals durch Kompilieren und Aufrufen der Expression ermittelt. Diese Implementierung zeigt der folgende Codeausschnitt:

         1: public static class Guard
         2: {
         3:     public static void AssertNotNull<T>(Expression<Func<T>> selector)
         4:     {
         5:         T value = selector.Compile().Invoke();
         6:         if (value == null)
         7:         {
         8:             string name = ((MemberExpression)selector.Body).Member.Name;
         9:             throw new ArgumentNullException(name);
        10:         }
        11:     }
        12: }

      Ohne Kompilierung

      In unserer Unterhaltung berichtete mir mein Kollege allerdings von einer Möglichkeit den Wert auch ohne die aufwändige Kompilierung aus der Expression auszulesen. Möglich macht es eine Extraktion des Parameters als ConstantExpression, aus der man über eine FieldInfo-Instanz mit GetValue() den Wert erhält:

         1: public static class Guard
         2: {
         3:     public static void AssertNotNull<T>(Expression<Func<T>> selector)
         4:     {
         5:         var memberSelector = (MemberExpression)selector.Body;
         6:         var constantSelector = (ConstantExpression)memberSelector.Expression;
         7:         object value = ((FieldInfo)memberSelector.Member)
         8:             .GetValue(constantSelector.Value);
         9:         
        10:         if (value == null)
        11:         {
        12:             string name = ((MemberExpression)selector.Body).Member.Name;
        13:             throw new ArgumentNullException(name);
        14:         }
        15:     }
        16: }

      Sieht erstmal nicht spektakulär aus, außer dass es komplizierter ist und als Voraussetzung wirklich direkt eine Variable in der Expression übergeben werden muss (Properties und Hierarchien funktionieren im Vergleich zur ersten Lösung nicht, was jedoch bei der direkten Prüfung von Methodenargumenten irrelevant ist).

      Die Laufzeit macht’s

      Warum also die Auswertung der Expression dem Kompilieren vorziehen? Ganz einfach: das Kompilieren kostet deutlich mehr Zeit! In einem kleinen Laufzeittest habe ich beide Lösungen gegenüber gestellt. Ein Aufruf der AssertNotNull()-Methode mit einem validen Argument (!= null) ergab über 10.000 Iterationen das folgende Ergebnis:

      ExpressionAuswertung

      Das muss man sich mal auf der Zunge zergehen lassen: die kompilierte Lösung benötigt über 53 Sekunden, die Lösung über die Auswertung der Expression ist in nicht einmal 0,35 Sekunden fertig! Das macht einen Zeitfaktor von über 156, den die nicht-kompilierte Lösung schneller ist als die kompilierte Umsetzung.

      Fazit: Bei der Auswertung von Expressions sollte man immer auch auf die Laufzeit bedacht sein. Sobald eine Methode in einer Schleife aufgerufen wird und man nach defensiver Programmierung stets pingelig Methodenparameter prüft, kann eine Argumentprüfung zu einem nicht zu unterschätzenden Zeitfaktor werden. Eine Kompilierung der Expression sollte dabei möglichst vermieden werden…

      Share |

      AppsFuze: Apps-News für den WP7 Marketplace 16.11.2010

      Matthias Jauernig
      Matthias Jauernig, Senior eXpert

      In den letzten Tagen hat eine inoffizielle Webseite für Apps auf dem Windows Phone 7 ihre Tore geöffnet: AppsFuze.

      Die Webseite bietet verschiedene Möglichkeiten nach Apps zu suchen, sie in Kategorien anzeigen zu lassen, neue Apps, Top-Apps oder z.B. die Apps mit den letzten Preissenkungen auszugeben.

      Darüber hinaus können die Details inkl. Screenshots und Bewertungen der Apps angezeigt werden, was bisher nur aus dem Zune-Client heraus möglich war.

      appsfuze

      Share |

      Windows Phone 7 Entwicklung im Umfeld von iPhone, Android & Co. 15.11.2010

      Svenja Henß

      Svenja Henß, Senior Assistant

      Was sind die größten Herausforderungen vor die Entwickler mit Windows Phone 7 gestellt werden?
      Was ist beim Einstellen von Apps in den Microsoft Marketplace zu beachten?
      Was ist bei der Datenvirtualisierung zu beachten?
      Welche Unterschiede zu anderen Plattformen bestehen bezüglich der Sensorenansteuerung?

      In seinem Interview für das Portal Mobile.360.de beleuchtet unser eXpert Patric Schouler die Windows Phone 7 Entwicklung im Umfeld von iPhone, Android und Blackberry. Die Antworten zu den oben genannten Fragen und viele weitere nützliche Informationen undTipps finden Sie hier: Was Entwickler bei Windows Phone 7 beachten sollten

      Share |

      Erster SAP Client für Windows Phone 7 erschienen 12.11.2010

      Patric Schouler
      Patric Schouler, Chief eXpert

      Windows Phone 7 goes Business!

      Wie heute über WMPowerUser.com (SAP Business One Client Arrives for WP7) gemeldet wurde, ist ein erster SAP Client für Windows Phone 7 jetzt auf dem Marketplace verfügbar:

       

       

      Windows Phone 7 SAP ClientWindows Phone 7 SAP ClientWindows Phone 7 SAP Client

      [Bildnachweis: WMPowerUser.com]

      “Coresuite mobile acts as a client for SAP business one. Coresuite mobile brings your SAP reports, business partners, contacts and addresses to your phone. To access SAP data at work or on the go one simply need to login with your cloud credentials or demo account, synchronize the cloud data to your phone and view it whenever you want, even when offline with no internet connection.”

      SAP selbst entwickelt nach dieser Meldung auch bereits an einem Windows Phone 7 SAP Client, der im Rahmen einer der nächsten Releases für SAP Business ByDesign erscheinen wird.

      Share |

      Stored Procedures sind keine parametrisierten Views

      Nicolas Meseth
      Nicolas Meseth, Senior eXpert

      Der Titel dieses Blogeintrags stammt im Original von Adam Machanic - ich habe mir erlaubt, den Titel seines Beitrags zu diesem Thema originalgetreu in die Deutsche Sprache zu übersetzen. Ich finde er trifft es sehr gut: http://sqlblog.com/blogs/adam_machanic/archive/2006/07/12/stored-procedures-are-not-parameterized-views.aspx

      Schon oft habe ich mich gefragt, warum in der Praxis so häufig Stored Procedures (SP) für den gekapselten Datenzugriff verwendet werden, wenn die Abfrage parametrisiert sein muss. Das ist z.B. der Fall, wenn ich meine Ergebnisse zeitlich filtern möchte. In diesem Fall wird z.B. häufig eine SP entworfen, die zwei Parameter @FromDate und @ToDate besitzt, und in der eine einfache Abfrage ausgeführt wird, deren Ergebnis mit Hilfe dieser Parameter in der WHERE-Bedingung eingeschränkt wird. In der Regel funktioniert das auch sehr gut, aber warum wird anstatt einer SP nicht das eigentlich vom SQL Server dafür vorgesehene Objekt verwendet: Die Table-Valued Function? Die Table-Valued Function hat zwei gravierende Vorteile gegenüber einer SP:

      1. Eine Function definiert explizit die Metadaten der Rückgabe, d.h. alle Spalten sind mit Name und Datentyp definiert, und die Anwendung, die die Funktion verwendet, hat vollen Zugriff auf diese Metadaten. Bei einer SP ist das nicht immer der Fall. Z.B. wenn innerhalb der SP eine temporäre Tabelle für die Zwischenspeicherung verwendet wird, kann es sein, dass die Metadaten der Abfrage nicht ermittelt werden können. In SSIS oder SSRS führt dies dazu, dass die Data Source bzw. das Data Set keine Informationen bezüglich der zurückgegebenen Spalten erhält.
      2. Functions können in Select-Statements verwendet werden. Während mit einer SP der folgende Aufruf nicht möglich wäre, SELECT ID, Name FROM SP_XY; funktioniert Gleiches, wenn eine Function verwendet wird. Eine Function ermöglicht somit eine direkte Selektion ihres eigenen Rückgabesets.

      An dieser Stelle also der Appell, den Table-Valued Functions eine Chance zu geben, das zu tun, wofür sie erfunden wurden, und SPs nicht für etwas zu missbrauchen, für das sie nicht gedacht sind!

      Share |

      eXpert Patric Schouler gibt ein Interview zu Windows Phone 7 10.11.2010

      Svenja Henß
      Svenja Henß, Senior Assistant

      Unser eXpert Patric war bei einem großen Carrier an der Entwicklung der Windows Phone 7 Apps zur Markteinführung beteiligt und verfügt daher in diesem Bereich über ein breites praktisches Wissen.

      Für das dot.NET Magazin plaudert Patric aus dem “Nähkästchen” und verrät Tipps und Tricks, die Developer bei der Entwicklung von Apps beachten sollten. Außerdem erhalten Sie einen Einblick in die praktische Arbeit mit Windows Phone 7.

      Das gesamte Interview finden Sie hier: Was Entwickler ・er Windows Phone 7 wissen sollten

      Patric und ich freuen uns auf Ihre Kommentare.

      Share |

      Next Microsoft SQL Server CTP ausgeliefert

      Viktor Ewert
      Viktor Ewert, Senior eXpert

      Microsoft stellt die erste CTP-Version (Community Technology Preview) des neuen SQL Servers mit dem Codenamen “Denali” zum Download bereit.

      Ein Release-Datum wurde von Microsoft nicht genannt, möglich wäre Gerüchten zur Folge aber ein Q3 2011 oder 2012 Termin.

      Der Fokus soll in dem Release wieder auf Business Intelligence Features liegen.

      Ein paar Highlights aus der Feature-Liste sind:

      • SQL Server AlwaysOn: Eine bessere Hochverfügbarkeit, Skalierbarkeit und Flexibilität.
      • Project codename “Apollo”, ist eine Spaltenbasierte Datenbank, die auf den Erkenntnissen aus PowerPivot basiert und extrem performante Abfragen ermöglichen soll.
      • Project codename “Juneau”, eine integrierte Entwicklungsumgebung für die Entwicklung von Datenbanken, Business Intelligence und Web Lösungen
      • Project codename “Crescent”, ein webbasiertes Tool zur Visualisierung und Analyse basierend auf der PowerPivot-Technologie.
      • SQL Server Data Quality Services eine selbst-lernende Technologie zur Klassifizierung, Verknüpfen und Bereinigung von Daten.

      Download und weitere Infos:

      Future SQL Server Editions

      Microsoft® SQL Server® code-named 'Denali' - Community Technology Preview 1 (CTP1)

      Microsoft delivers first test build of next-generation SQL Server 'Denali'

      Microsoft acquires data-quality software start-up Zoomix

      Share |

      Guter Start für Windows Phone 7

      Matthias Jauernig
      Matthias Jauernig, Senior eXpert

      Viele waren skeptisch, auch wenn die meisten Testberichte durchaus positiv waren. Doch die ersten Verkaufszahlen von Windows Phone 7 deuten auf einen unerwartet hohen Absatz der WP7-Geräte hin.

      Die Analysten von Morgan Stanley rechnen z.B. mit 3,5 – 4 Millionen verkauften WP7-Geräten allein im letzten Quartal 2010. Bei O2 ist das HTC HD7 vergriffen, auch an anderen Stellen nehmen Engpässe zu. Mit so einer hohen Nachfrage von Kunden nach Windows Phone 7 hatte wohl niemand gerechnet.

      Mich persönlich freut diese Entwicklung sehr. Vor allem da Microsoft in einigen Bereichen noch aufzuholen hat: Tethering, Copy&Paste, VPN, Multitasking, … etliche Dinge kann das WP7 noch nicht oder noch nicht zufriedenstellend. Umso erfreulicher ist es, dass es bereits jetzt von Kunden so gut angenommen wird! Das Konzept der Nutzerzentrierung anstelle der App-Zentrierung scheint aufzugehen und nach Beseitigung der Kinderkrankheiten könnte Windows Phone zu einem echten Hit werden.

      Hier ein paar Links:

      Doch nicht nur das Phone, auch der Windows Phone Marketplace entwickelt sich prächtig! Bereits kurz nach dem offiziellen Start war die Marke von 1000 Apps erreicht und die Anzahl steigt rasant! Aus Entwicklersicht habe ich nichts anderes erwartet. Ist es doch mit Hilfe von Silverlight so leicht und komfortabel wie nie möglich, hochwertige Apps jeder Art (Business, Consumer, Spiele, …) für eine mobile Plattform zu entwickeln! In der SDX werden wir zukünftig weiter in den Know-How-Ausbau der Entwicklung für Windows Phone 7 investieren und freuen uns auf spannende Projekte bei unseren Kunden.

      Share |

      Mit Werten führen 08.11.2010

      Sascha Michael
      Sascha Michael, Manager Development Services

      Im Anschluss an unserer Technical Council zum Thema Silverlight 4 entstand eine Diskussion über die Fragestellung "Was macht ein Team aus?" und wie man als Führungskraft damit umgeht.

      Ausgangspunkt der Diskussion war die These, dass ein (Projekt-)Team natürlich ein definiertes Ziel hat. Aber - und das ist entscheidend - dieses in der Regel von außen vorgegebene Ziel sei in der Regel nicht die Grundlage des „Wir-Gefühls“. Stattdessen würde der Team-Zusammenhalt durch andere Gemeinsamkeiten entstehen. Das könne so ziemlich alles sein: gleiche Hobbies genauso wie ein gleichartiger Qualitätsanspruch oder jegliche andere Gemeinsamkeit. Entscheidend dafür, dass aus einer losen Ansammlung von Individuen ein funktionierendes Team wird, sei dabei eben dieses einende „Etwas“.

      Macht man sich diese These zu Eigen, dann lassen sich viele Situationen im Projektalltag erklären, in denen das formal vorgegebene Ziel dem Team offensichtlich nicht so wichtig ist, wie es z. B. dem Projektleiter aus seiner Verpflichtung heraus sein muss. In diesen Fällen besteht offenbar ein Zielkonflikt zwischen dem formalen Ziel und dem „Etwas“, welches das Team im Innersten definiert.

      Diese Erkenntnis führte zu einer weiteren interessanten Fragestellung: Kann oder soll eine Führungskraft Teil des Teams sein? Denn der These folgend müsste sie dafür ja das "Etwas" mit dem Rest des Teams gemeinsam haben aber trotzdem die Zielerreichung sicherstellen. Interessenskonflikte sind hier fast unvermeidlich, schließlich ist es Aufgabe der Führungskraft die Zielerreichung des Teams zu gewährleisten.

      Meine persönliche Erfahrung als Führungskraft und Projektleiter ist, dass ich nur dann erfolgreich sein kann, wenn ich ganz bewusst mit mindestens einem Bein im Team stehe: Nur wenn ich weiß, was neben dem offiziellen Projektziel der gemeinsame Nenner des Teams ist - dieses Etwas, der Antrieb, die Motivation - kann ich verstehen oder sogar frühzeitig absehen wie ein Teammitglied reagieren wird. Und nur wenn ich das Verhalten verstehe, kann ich mit Erfolg versuchen, einen möglichen Interessenskonflikt zu lösen, bevor daraus ein Problem entsteht.

      Auf der anderen Seite muss eine Führungskraft auch den übergeordneten Kontext verstehen und akzeptieren, um das Team innerhalb der Organisation einzubetten. „Das andere Bein“ muss also zumindest teilweise außerhalb des Teams bleiben, alleine schon um die Objektivität zu wahren.

      Doch ist es wirklich richtig, dass sich ein Team (nur) über das "gewisse Etwas" definiert? Prinzipiell halte ich das schon für richtig, wenn auch für zu kurz gegriffen: ein Team in unserem Projektalltag ist letztendlich meistens eine mehr oder weniger freiwillige Gemeinschaft: Wer dort nicht sein will, bleibt nur selten lange. Doch betrachtet man den Begriff "Gemeinschaft", so wird klar, dass dieses "Etwas" vielleicht doch nicht so einfach erfassbar ist wie ein gemeinsames Interesse.

      Ferdinand Tönnies folgend ist eine Gemeinschaft die willentliche (d.h. bewusste) Bejahung eines Zusammenschlusses von Individuen. Doch was ist es wirklich, was diesen Zusammenschluss aufrecht erhält? Ich glaube, dass eine der grundlegendsten Voraussetzungen ein gemeinsames Wertebild ist. Viel mehr als gemeinsame Interessen oder gemeinsame Ziele ein Team formen können, sind es meiner Meinung nach die gemeinsamen Werte, die ein Team letztendlich auch nachhaltig zusammenhalten.

      Die Soziologie lehrt uns, dass aus Werten (Verhaltens-)Normen abgeleitet werden. Damit lässt sich auch direkt die Verbindung zu der bekannten Theorie der Gruppenbildung nach Tuckman herstellen:

      Forming - Storming - Norming - Performing

      Das bedeutet letztendlich, dass sich ein Team / eine Gemeinschaft bereits während der Entstehung auf gemeinsame Werte und Normen verständigt hat. Die Werte sind also Teil des Fundaments, über das sich das Team definiert. Hat also eine Führungskraft diesen Prozess nicht von Beginn an mit begleitet und gestaltet, sondern übernimmt diese Funktion erst zu einem späteren Zeitpunkt, dann kann es mit dem bestehenden Team nur funktionieren, wenn die Führungskraft die Werte und Normen teilt - sprich: Teil der Gemeinschaft wird.

      Damit ist die Frage, ob eine Führungskraft Teil des Teams sein kann oder soll, eigentlich bereits beantwortet: sie muss zwangsläufig Teil des Teams sein.

      Denn teilt die Führungskraft die Werte nicht - ist sie also nicht Teil des Teams - dann ist die logische Konsequenz, dass sie als Bedrohung für die Gemeinschaft vom Team abgelehnt wird. Da die Gemeinschaft auf Freiwilligkeit beruht, ist in einer solchen Situation häufig zu beobachten, dass sich das Team nach und nach auflöst. Anders ausgedrückt: das Team muss letztendlich neu formiert werden ("Forming"), um nach dem "Storming" eine erneute "Norming" Phase zu durchlaufen - bevor irgendwann wieder die gewünschte "Performing" Phase einsetzt. Ein neues Team entsteht - geprägt von den Werten der neuen Führungskraft.

      Wie beeinflusst diese Erkenntnis meinen beruflichen Alltag?

      Erfreulicherweise ist dies Erkenntnis nicht wirklich neu für mich. Aber auch auf Grund dieser Erkenntnis weiß ich, warum ich seit mittlerweile fast sechs Jahren bei der SDX AG bin (und mit einigen Kollegen eine noch längere Historie habe): Wir teilen dieselben Werte, die auch das Leitbild der SDX AG geprägt haben - Professionalität, Leidenschaft, die Orientierung am gemeinsamen Erfolg und die Wertschätzung der Individualität der eXperts.

      Dadurch fällt es uns besonders leicht, mit unseren direkten Kollegen auch ad-hoc Teams zu bilden und erfolgreich zusammenzuarbeiten - wir nennen das dann „vernetzte eXperts“.

      Zum anderen bin ich mir dadurch aber auch darüber bewusst geworden, dass mein Erfolg als Führungskraft bzw. Projektleiter maßgeblich davon abhängt, wie sehr ich die individuellen Wertevorstellungen meiner Kollegen aber auch der Kunden-Mitarbeiter im Projekt respektiere und beachte. Natürlich: Wir alle sind Menschen, d.h. nicht immer gelingt das so wie man es sich wünscht und nicht immer wird es vom jeweiligen Gegenüber so wahrgenommen wie es gemeint war - speziell wenn man als Projektleiter auch mal unpopuläre Maßnahmen ergreifen muss. Schnell wird das dann als Verstoß gegen die Werte verstanden.

      Wichtig ist aber vor allem, dass man im Team ein Klima des Vertrauens schafft, in welchem grundsätzlich die Überzeugung herrscht, dass man die gleichen Werte teilt und in welchem Missverständnisse oder Fehler auch offen angesprochen und ausgeräumt werden können. Ohne Fehlerkultur kann es meiner Meinung nach keine Wertekultur geben - und damit in letzter Konsequenz auch kein erfolgreiches Team.

      Wenn man wie ich als externer Projektleiter in der Regel beim Kunden keine disziplinarische Funktion bekleidet, dann bleibt als einzige Option der Führung die Führung durch Überzeugung, durch Einflussnahme - die laterale Führung. Da sich mehrere meiner Kollegen intensiv mit diesem Thema beschäftigen, werden Sie sicher bald Gelegenheit haben etwas mehr darüber in unserem Flurfunk zu lesen.

      Share |

      Dell setzt auf Windows Phone 7 als Ersatz für die Blackberry-Infrastruktur 05.11.2010

      Sascha Michael
      Sascha Michael, Manager Development Services

      Einem Bericht des Wall Street Journals zufolge hat sich Dell entschieden, bereits ab kommender Woche die interne Blackberry-Infrastruktur durch Windows Phone 7 Geräte zu ersetzen. Dell verspricht sich dadurch eine Kosteneinsparung von 25%.

      Darüber hinaus will man die Erfahrung aus diesem Projekt dann dazu nutzen auch andere Unternehmen beim Wechsel zu unterstützen.

      Quelle: Wall Street Journal

      Share |

      Microsofts Silverlight-Strategie

      Matthias Jauernig
      Matthias Jauernig, Senior eXpert

      Microsoft nutzt seine Professional Developer's Conference (PDC) regelmäßig dazu, um Entwickler über aktuelle Ausrichtungen seiner Programmier-Tools zu informieren und ihre zukünftige Strategie darzulegen. Die PDC10 sorgte allerdings für reichlich Verwirrung hinsichtlich der strategischen Ausrichtung von Silverlight, was zu wilden Spekulationen führte und an der ein oder anderen Stelle sogar der Tod von Silverlight heraufbeschworen wurde. Auch intern bei SDX schlugen die Wogen hoch und eine heftige Diskussion entbrannte. Es ist an der Zeit, den Mutmaßungen mit klärenden Worten zu begegnen.

      Was war passiert?

      Eine Verkettung von unglücklichen Umständen und missverständlichen Aussagen führte zu einem Sturm der Spekulationen hinsichtlich der Strategie zu Silverlight am letzten Wochenende nach der PDC10. Alles fing bei der PDC Keynote am Donnerstag an. Steve Ballmer erwähnte Silverlight nur ein einziges Mal: als es darum ging, die Plattform für die Entwicklung von Windows Phone 7 zu benennen. Was er dafür umso öfter betonte, war HTML5: "HTML5 ist the future" lautete seine Aussage und die Nachricht, die bei der Entwicklergemeinde ankam. Doch was war mit Silverlight? Silverlight ordnete er in keinen Kontext zu HTML5 ein, was der erste große Fehler war und das erste Stirnrunzeln verursachte.

      Den eigentlichen Sturm der Mutmaßungen entfesselte allerdings Bob Muglia, Leiter der Abteilung "Server und Tools", durch ein Interview mit Mary-Jo Foley, betitelt mit: Microsoft: Our strategy with Silverlight has shifted. Allein die Kopfzeile lässt den Atem stocken und genau diese eine Aussage stellt den zweiten und entscheidenden Fehler dar. Zitat von Mary-Jo Foley: "But when it comes to touting Silverlight as Microsoft’s vehicle for delivering a cross-platform runtime, 'our strategy has shifted,' Muglia told me".

      Vom lauen Lüftchen zum Hurrikan

      Weder Steve Ballmer noch Bob Muglia schafften es zur PDC, Microsofts Silverlight-Strategie zu klären und sorgten mit ihren Aussagen für Verwirrung und für teils wilde Spekulationen. Dabei wäre es so einfach gewesen: Wo sollten Sie Silverlight einsetzen und wo HTML5? Die Beantwortung dieser Frage hätte genügt, um den Entwicklern Sicherheit zu geben. Stattdessen war die PDC vorbei und ein Wochenende begann, an dem Entwickler als auch "Microsoft-Beobachter" genug Zeit hatten, sich ihren eigenen Reim der Dinge zu machen.

      Bei Twitter, in Foren und in Blogs drückten Entwickler ihre Entrüstung zu den missverständlichen Aussagen von Microsoft aus. Und das aus gutem Grund! Microsoft hat Silverlight immer wieder als die Plattform für geräteübergreifende Entwicklung interaktiver Applikationen dargestellt und sowohl Microsoft als auch Entwickler haben bereits unglaublich viel in Silverlight investiert. Schnell griffen diverse Newsseiten das Thema auf und sorgten für noch mehr Unruhe, z.B. Golem mit seinem Beitrag HTML5 statt Silverlight. Die Spekulationen übertrafen sich geradezu, Fehlinterpretationen wurden zu Fakten umgemünzt und immer stärker wurde vor allem von Microsoft-Kritikern das Versagen und der Tod von Silverlight heraufbeschworen.

      HALT!

      Montag war es dann, als Microsoft endlich seine Strategie und die Abgrenzung von Silverlight und HTML5 klarstellte und die Wogen zu glätten versuchte. Abermals war es Bob Muglia, der sich am 1.11. in einem Beitrag auf dem Silverlight Team Blog äußerte: PDC and Silverlight. In diesem Beitrag räumt er zunächst indirekt Fehler in Bezug auf sein Interview ein: "I understand that what I said surprised people and caused controversy and confusion".

      Anschließend rückt er Silverlight ins rechte Licht:

      1. Silverlight is very important and strategic to Microsoft.
      2. We’re working hard on the next release of Silverlight, and it will continue to be cross-browser and cross-platform, and run on Windows and Mac.
      3. Silverlight is a core application development platform for Windows, and it’s the development platform for Windows Phone.

      icon_silverlightWeiterhin geht er darauf ein, wie sich die Industrie und die Geräte verändert haben, auf denen Anwendungen lauffähig sein müssen und wie Microsoft darauf reagieren will. Und um eine möglichst große Bandbreite an Geräten abzudecken, will Microsoft in Zukunft eben auch auf HTML5 setzen, was aber in keinster Weise bedeutet, dass Silverlight als strategische Entwicklungsplattform fallen gelassen wird.

      Die Silverlight-Strategie

      Bob Muglia trifft Aussagen, die wir in unserer internen Diskussion bei SDX bereits erkannt haben: De facto hat sich Microsofts Silverlight-Strategie nicht geändert! Silverlight war nie dafür gedacht, HTML im Web zu ersetzen oder abzulösen. Vielmehr war und ist Silverlight die Plattform der Wahl in vielfältigen Szenarien und das spiegelt sich auch ganz klar in den Aussagen von Bob Muglia wider:

      1. Silverlight ist erste Wahl für interaktive Business-Applikationen (Line of Business) in Intranet-Szenarien (innerhalb und außerhalb des Browsers) mit Unterstützung verschiedener Systeme und Browser.
      2. Silverlight ist zentrale Entwicklungsplattform für Windows Phone 7.
      3. Silverlight ist erste Wahl für multimediale Anwendungen.
      4. Silverlight ist erste Wahl für Applikationen, für welche die Features von HTML ungenügend sind.

      HTML5 ist da einzuordnen, wo auch HTML4 derzeit steht: als zentrale Technologie für die Bereitstellung von Anwendungen im Internet, die über eine massiv wachsende Anzahl an Geräten ansprechbar sein sollen. Natürlich geht HTML5 mit Features wie Video-Einbettung und dem Canvas-Element über HTML4 hinaus und bietet Funktionalität, die bisher mit Flash und ursprünglich eben auch mit Silverlight abgedeckt wurden. Doch Silverlight hat sich schon längst vom Flash-Konkurrenten zu einer reichhaltigen Plattform für Business-Szenarien gemausert, deren Features auch ein HTML5 längst nicht abdecken kann.

      Als SDX haben wir diese Aussagen bereits in der Vergangenheit immer wieder getroffen und sowohl Silverlight als auch HTML/ASP.NET in der Entwicklung bei unseren Kunden entsprechend eingeordnet.

      Fazit

      Was kann man aus der aktuellen Diskussion mitnehmen? Unseren Kunden können wir als SDX sagen: es ändert sich nichts! Silverlight ist weiterhin die Plattform der Wahl für interaktive Business-Applikationen im Intranet und in vielen anderen Szenarien. Und die Vorteile sind unbestritten: Entwickler erhalten durch Silverlight eine durchgängige Technologie auf Basis von C# und können die bekannten Tools (Visual Studio, Blend, ...) verwenden, mit denen sie hochwertige Silverlight-Anwendungen entwickeln können. Statt HTML, CSS und Javascript zu lernen (das wird sich auch mit HTML5 nicht ändern) können sie ihr bestehendes .NET-Wissen bei der Entwicklung von Silverlight-Anwendungen verwenden.

      HTML5 wird die Zukunft im Web sein. Das ist aber nichts Neues und hat nur geringen Einfluss auf die Einsatzgebiete von Silverlight. HTML4 ist der aktuelle Web-Standard. HTML5 wird der nächste Standard werden. Doch für HTML5 ist es noch (zu) früh. Microsoft hat auf der PDC keine Entwicklertools für HTML5 vorgestellt und selbst das W3C kann derzeit noch nicht den Einsatz von HTML5 empfehlen. Microsoft hat HTML5 auf der PDC als Instrument verwendet, um Werbung für seinen kommenden Browser IE9 zu machen, mehr nicht. Daher sehen auch wir als SDX ein großes Potential in HTML5, doch wenig Einfluss auf die Einsatzgebiete und die Strategie von Silverlight.

      Zusammenfassend muss gesagt werden, dass die Kommunikation zum Thema der Strategie bzgl. HTML5 und Silverlight seitens Microsoft sehr unglücklich verlaufen ist und zu einem vermeidbaren Fegefeuer geführt hat. Microsoft hat damit viele Entwickler und Firmen verunsichert, die bereits einen großen Invest in Silverlight getätigt haben. Der dadurch angerichtete Schaden ist enorm und es zeigt, wie flächenbrandartig sich Informationen und Spekulationen in der heutigen vernetzten Welt verbreiten und hochgespielt werden. Entwickler hatten vor der PDC eine gewisse Erwartungshaltung bzgl. Silverlight, einige erwarteten bereits die Ankündigung von Silverlight 5 und wurden dann enttäuscht. Hätte Microsoft frühzeitig reagiert, hätte viel Schaden vermieden werden können. Nun ist es die Aufgabe von Microsoft, verlorenes Vertrauen wieder aufzubauen. Am besten können sie das dadurch tun, dass sie ihren Worten Taten folgen lassen.

      Share |

      Silverlight: Technologie-Abkündigung oder Kommunikations-GAU? 03.11.2010

      Alexander Jung
      Alexander Jung, Chief eXpert

      Microsoft hat sich anlässlich der PDC letzte Woche einen echten Marketing-GAU geleistet. Fehlende Information (Steve Ballmer sprach ausschließlich über HTML5) und schlechte Kommunikation von Bob Muglia (“unsere Strategie hat sich verschoben”, zdnet) wurde in Windeseile als Abkündigung von Silverlight als Plattform für RIA Anwendungen auf dem Client interpretiert. Die passende Meldung bei Heise: “Microsoft bevorzugt HTML5 statt Silverlight”.

      Es dauerte ein ganzes Wochenende und den Montag bis sich bei Microsoft die Erkenntnis durchgesetzt hatte, dass man – zumindest zwischen den Zeilen – eine fatale Botschaft gesendet hat, die es zu korrigieren gilt. Ein Wochenende und ein Tag, an denen auch uns irritierte Emails von Kunden erreichten.

      Immerhin, die Korrektur kam. Sowohl von Muglia, als auch kurz darauf von Tim Heuer (Program Manager for Microsoft Silverlight). Auch hier wieder die Reaktion von Heise: “Microsoft steht zu Silverlight”.

      Daher an dieser Stelle die Entwarnung: Es gibt aus unserer Sicht keinen Anlass, Silverlight als RIA Plattform mit Potential und Zukunft in Frage zu stellen.

      Ohne Zweifel wird Microsoft noch eine ganze Weile Schadensbegrenzung betreiben müssen. Und auch wir werden sicher nicht umhin kommen, uns daran zu beteiligen. In diesem Sinne ist ein Kollege bereits dabei, einen tiefergehenden Hintergrund-Beitrag zu diesem Thema zu schreiben, der hier sicher in ein paar Tagen erscheinen wird.

      UPDATE 1: Der Hintergrundbeitrag ist jetzt online: “Microsofts Silverlight Strategie” (link)
      UPDATE 2: Auch Microsoft Deutschland hat auf MSDN reagiert: “Silverlight weiter voll auf Kurs” (link)

      Und ich hoffe, mit diesen ersten Aussagen etwas zur Klarstellung beigetragen und Überreaktionen verhindert zu haben.

      Share |

      Windows Phone 7 - Top oder Flop? 02.11.2010

      Matthias Jauernig
      Matthias Jauernig, Senior eXpert

      Das neue Windows Phone 7 (WP7) ist da! Mit seinem neuen Betriebssystem will Microsoft deutlich an Boden gut machen gegenüber der Konkurrenz von Android und iPhone, die dem alten Windows Mobile längst den Rang abgelaufen haben.

      Und alle Welt fragt sich: Top oder Flop? Wie schneiden Mobilgeräte mit WP7 im Vergleich zu Android und iPhone ab?

      WP7_LogoFest steht: Windows Phone 7 hat einige herausragende Merkmale. Das klare und konsistente Design wurde vielfach gelobt, geht weg vom app-zentrierten Ansatz eines Androids oder iPhones und stellt den Nutzer in den Mittelpunkt. Eine nahtlose Office-Integration erlaubt das Öffnen und Bearbeiten von Office-Dokumenten und eine fließende Einbindung von Sharepoint-Sites. Freuen dürfen sich auch die Entwickler: mit XNA und vor allem Silverlight als Entwicklungsplattformen stehen ihnen vielfältige und komfortable Möglichkeiten zur einfachen Entwicklung hochwertiger Apps zur Verfügung. Von einer IDE wie Visual Studio mit ihren zahlreichen Möglichkeiten und Tools wie Blend zum Erstellen von Anwendungen können iPhone- und Android-Entwickler nur träumen! Damit wird potentiell jeder .NET/Silverlight-Entwickler zu einem WP7-Entwickler, womit zukünftig eine hohe Vielfalt an herausragenden Apps erwartet werden darf.

      Doch WP7 ist nicht perfekt. Einige wichtige Funktionen wie Tethering, Copy&Paste sowie VPN fehlen in der initialen Version. Microsoft hat aber angekündigt, diese zu Beginn 2011 nachzuliefern.

      Die Online-Redaktion der PC-Welt hat einen ausführlichen und differenzierten Blick auf Windows Phone 7 auch im Vergleich zur Konkurrenz geworfen, den ich jedem interessierten Nutzer nur ans Herz legen kann: http://www.pcwelt.de/ratgeber/Drei-Kampf-Windows-Phone-7-gegen-iOS-und-Android-1079841.html

      Share |

      .NET 4 Änderungen an string.IndexOf Methode 01.11.2010

      Matthias Straßer
      Matthias Straßer, Chief eXpert

      Mit der Umstellung auf ein neues Framework erhofft man sich ja immer auch ein bisschen bessere Software und auch eine schnellere Anwendung. Das dies aber nicht unbedingt gilt, bewies in einem Projekt die Umstellung der Software von .NET 2.0 auf .NET 4. Bei Lasttests wurden daraufhin Performance-Probleme in einer Methode identifiziert, die einen String entgegen nahm und diesen nach Patterns durchsucht hat. Nähere Untersuchungen haben ergeben, dass der Aufruf der Methode string.IndexOf der Verursacher für den Performanceeinbruch war.

      Für die Nachstellung des Problems durch ein kleines Consolenprogramm wurde eine Textdatei (~400 KB) in einen string eingelesen und dann alle Auftreten eines Patterns gesucht. Der eingelesene String ist somit sehr groß und das Pattern tritt 14.700 mal in dem String auf. Hier die Methode:

         1: private static void SearchPattern(string strPattern, string strSearchString)
         2: {
         3:   int iStartIndex = 0;
         4:   int iIndex = 0;
         5:   int iContentLength = strSearchString.Length - 1;
         6:  
         7:   while (iStartIndex < iContentLength && iIndex != -1)
         8:   {
         9:     iIndex = strSearchString.IndexOf(strPattern, iStartIndex);
        10:     if (iIndex != -1)
        11:       iStartIndex = iIndex + strPattern.Length;
        12:   }
        13: }

      Die Zeitmessungen mit einer unterschiedlichen Anzahl von Iterationen ergab einen dramatischen Performanceeinbruch für das Framework .NET 4.

      Anzahl Iterationen .NET 2.0 .NET 4
      10 00:00:00.0950380 00:00:11.4375732
      100 00:00:00.9233692 00:01:58.5309650
      1000 00:00:09.1416552 00:20:59.8498171

      Mit Hilfe des Reflectors kann man sehen, dass die Methode System.String.IndexOf bzw. die Methode System.Globalization.CompareInfo.IndexOf (diese wird letztendlich aufgerufen) in der Implementierung eine Veränderung erfahren hat beim Wechsel von .NET 2.0 nach .NET 4. Nutzt man die IndexOf-Methode wie in Zeile 9, dann wird auf Basis der CurrentCulture und CompareOptions.None, die Suche durchgeführt.

      Eine Prüfung ergab, dass die Suche nach dem Pattern auch mit der InvariantCulture und mit CompareOptions.Ordinal durchgeführt werden kann, so dass die Zeile 9 in Folgende umgewandelt werden kann

         9: iIndex = strSearchString.IndexOf(strPattern, iStartIndex,StringComparison.Ordinal);
      Mit diesem Aufruf der IndexOf-Methode ergaben sich nun folgende gemessene Zeiten:
      Anzahl Iterationen .NET 2.0 .NET 4
      10 00:00:00.0225000 00:00:00.0170009
      100 00:00:00.2380000 00:00:00.2005000
      1000 00:00:02.0960000 00:00:02.0290000

      Als Fazit kann man zweierlei Dinge ziehen:

      1. Nach einem Framework Wechsel sind bei zeitkritischen Routinen unbedingt Performance-Messungen durchzuführen. Nicht alles was sich unter der Haube verändert hat ist bekannt und kann somit potentiell zu Einbußen bei der Performance führen
      2. String Operationen, ob es nun die IndexOf-Methode oder andere wie Compare usw., sind, sind genau zu analysieren und explizit mit CultureInfo bzw. CompareOptions aufzurufen. Dies zeigt auch die Performance Steigerung bei .NET 2.0 im obigen Beispiel.

      Mittlerweile ist diese Problematik Microsoft zur Untersuchung übergeben worden. Eine erste Einschätzung geht von einem Bug im .NET 4 Framework bei der Behandlung von großen Strings aus und es wird an einer Lösung gearbeitet. Diese wird jedoch voraussichtlich noch einige Zeit auf sich warten lassen.

      Share |