580 likes | 834 Vues
SQL Server 2008 { Was ist neu für Entwickler? }. Jens K. Süßmeier , Daniel Walzenbach DB Consultant, Developer Evangelist Microsoft Deutschland GmbH. Überblick. Mit unstrukturierten Daten arbeiten Neue Zeiten sind angebrochen Hierarchische Daten MERGE Integrierte Volltextsuche
E N D
SQL Server 2008{Was ist neu für Entwickler?} Jens K. Süßmeier, Daniel Walzenbach DB Consultant, Developer Evangelist Microsoft Deutschland GmbH
Überblick • Mit unstrukturierten Daten arbeiten • Neue Zeiten sind angebrochen • Hierarchische Daten • MERGE • Integrierte Volltextsuche • Table Value parameters, Table rowconstructor • Geodaten • Goodies
Unstrukturierte DatenFileStream BLOBs in DB + Datei-system speichern • VARBINARY(MAX) • Unstrukturierte Daten werden direkt in NTFS Dateisystem gespeichert • Zwei Programmiermodelle • T-SQL (genau wie SQL BLOB) • Win32 Streaming APIs mit T-SQL transaktionaler Semantik • Transaktionales Verhalten • Bessere Handbarkeit • Backup/restore • SQL Server Sicherheit • Dateigröße nur durch das Dateisystem limitiert Anwendung BLOB DB
{ Unstrukturierte Daten} demo DerFileStreamDatentyp
Überblick • Mit unstrukturierten Daten arbeiten • Neue Zeiten sind angebrochen • Hierarchische Daten • MERGE • Integrierte Volltextsuche • Table Value parameters, Table rowconstructor • Geodaten • Goodies
Neue Zeiten sind angebrochen Date Time(n) DateTimeOffset(n) DateTime2(n)
Neue Zeiten sind angebrochenDate • Enthält nur den Datumswert • Feste Größe von 3 byte • Spanne: 01.01.0001 – 31.12.9999 • Bsp: 31-08-2007, 2007-08-31
Neue Zeiten sind angebrochenTime(n) • Enthält nur den Zeitwert • Variable Größe von 3-5 byte (je nach konfigurierter Genauigkeit) • Genauigkeit bis zu 100 Nanosekunden möglich) • Bsp: 08:17:36.22332
Neue Zeiten sind angebrochenDateTimeOffset(n) • Datum und Uhrzeit inklusive der Zeitzonenverschiebung • Variable Größe von 8-10 byte (je nach konfigurierter Genauigkeit, bis zu 100 Nanosekunden möglich) • Bsp: 2007-08-31 08:17:36.22332 01:00
Neue Zeiten sind angebrochen DateTime2(n) • Kombination aus dem neuen Date und Time Datentyp mit erweiterter Spanne und Präzision • Variable Größe von 6-8 byte (je nach gewünschter Genauigkeit) • Genauigkeit bis zu 100 Nanosekunden möglich) • Spanne von 01.01.0001 – 31.12.9999 • Bsp: 31-08-2007 08:17:36.22332
Neue Zeiten sind angebrochenVisual Studio 2008 • Erweiterung des SqlDbTypeEnum und der Clientbibliotheken
Überblick • Mit unstrukturierten Daten arbeiten • Neue Zeiten sind angebrochen • Hierarchische Daten • MERGE • Integrierte Volltextsuche • Table Value parameters, Table rowconstructor • Geodaten • Goodies
T-SQL VerbesserungenHierarchyID Datentyp • Perfekter Einsatz für • Unternehmensorganisation, Stücklisten, etc… • Repräsentiert eine Position in einer Hierarchie • Kompakte/effiziente Speicherung • Beliebige Datensätze speichern/löschen • Leistungsfähige Abfragen • GetRoot, GetLevel, IsDescendant, ReParent, etc.
Hierarchische Daten in SQL 2005 • Parent ID <- ChildID • Einfach Daten einzupflegen aber… • Aufwändig in der Abfrage • Rekursion
Hierarchische Daten in SQL 2008 • Neuer „Built-In“ Datentyp – HierarchyID • SQLCLR basierte System UDT • Kann auch in .NET (VB.NET, C#) verwendet werden (SqlHierarchyId) • Als pathenumeration model implementiert (ORDPATH) • HierarchyID (SQLCLR Typ) kann erweitert werden • Von dem Typ ableiten • Um Methoden und Properties erweitern
HierarchyIDerweitern • DaHierarchyIDein SQLCLR Typist • Kann von demTypabgeleitetwerden • Erweitern um Methoden und Properties
HierarchyID IndexstrategienDepth-first • Knoten in einem Unterbaum sind benachbart angeordnet • Effizient für Fragen nach Unterbäumen • „Suche nach allen Dateien in diesem und den untergeordneten Ordnern“ CREATE UNIQUE INDEX Org_Depth_First ON Organization(EmployeeID)
HierarchyID IndexstrategienBreadth-first • Knoten in einer Ebene sind benachbart angeordnet • Effizient für Fragen nach direkt unterstellten Knoten • „Suche nach allen Angestellten eines Managers“ CREATE CLUSTERED INDEX Org_Breadth_First ON Organization(OrgLevel,EmployeeID)
{ Hierarchische Daten} demo • HierarchischeStruktur • anlegen • verwalten
Überblick • Mit unstrukturierten Daten arbeiten • Neue Zeiten sind angebrochen • Hierarchische Daten • MERGE • Integrierte Volltextsuche • Table Value parameters, Table rowconstructor • Geodaten • Goodies
MergestatementAusgangslage • Für einen Abgleich müssen drei separate statements erzeugt werden (INSERT/UPDATE/DELETE) und nacheinander ausgeführt werden • Eine explizite Transaktion muss über alle DML Operationen separat gepflegt werden um bei Fehlern das Rollback zu ermöglichen
MergestatementAnwendungsgebiete • Bietet die Möglichkeit für die gleichzeitige Verwendung von DML Operationen (INSERT / UPDATE / DELETE) in einer Anweisung • Bietet die Möglichkeit Änderungen in einem Batch durch den Client übertragen zu lassen und die Logik serverseitig auszuführen • Befüllungen eines DataWareHouse • BatchUpdate von Clients • Synchronisieren von Datenquellen
MergestatementSyntax [ WITH <common_table_expression> [,...n] ] MERGE [ TOP ( expression ) [ PERCENT ] ] [ INTO ] target_table [ [ AS ] table_alias ] [ WITH ( <merge_hint> ) ] USING <table_source>(… 58 lines of syntax following…)
MergestatementAktionen • WHEN MATCHED (INNER JOIN) • Ermöglicht Operationen wenn Datensätze sowohl in der Quelle als auch im Ziel vorhanden sind • WHEN [TARGET] NOT MATCHED (LEFT OUTER JOIN) • Ermöglicht Operationen wenn Datensätze in der Quelle aber nicht im Ziel existieren
MergestatementAktionen • WHEN SOURCE NOT MATCHED (RIGHT OUTER JOIN) • Ermöglicht Operationen wenn Datensätze im Ziel aber nicht in der Quelle existieren
MergestatementVorteile • MERGE ist transaktional und benötigt keine explizite Transaktion für die beinhaltetenden DML Operationen • MERGE löst Trigger nur einmal pro Aktion aus (BTW: Triggers arefired per statement NOT per row! ) • $action ermöglicht es die ausgeführte Aktion (INSERT / UPDATE / DELETE) des Datensatzes zu erkennen
MergestatementVorteile • UPDATE Nicht-deterministisch: Mehrere gefundene (durch ON clause) Datensätze in der Quelltabelle • MERGE Deterministisch: Join (ON clause) erwartet einen eindeutigen Datensatz in der Quelle
{ Merge } demo Die Verwendung von Merge Statements
Überblick • Mit unstrukturierten Daten arbeiten • Neue Zeiten sind angebrochen • Hierarchische Daten • MERGE • Integrierte Volltextsuche • Table Value parameters, Table rowconstructor • Geodaten • Goodies
Integrierte Volltextsuche • Komplett neue Volltextsuche Architektur • Volltextsuche als Feature der Datenbank • Volltextkataloge sind in DB inregriert • Umfassend Konfiguration von „Noise Words“ • „Noise Word“ Konfiguration bleibt bei Backup/Restore und Detach/Attach intakt • Suchergebnisse visualisieren • Verbesserte Suchergebnisse • Query und Indexing Performance deutlich gesteigert
{ Integrierte Volltextsuche} demo Volltext Index anlegen, abfragen, mit SQL Serve 2005 vergleichen
Überblick • Mit unstrukturierten Daten arbeiten • Neue Zeiten sind angebrochen • Hierarchische Daten • MERGE • Integrierte Volltextsuche • Table Value parameters, Table rowconstructor • Geodaten • Goodies
Table-valuedparameterAusgangslage • Batch Updates benötigten bisher mehrere Roundtrips zum Server um einen Abgleich zu machen • Senden von strukturierten Daten war bisher nicht möglich, außer diese auf dem Server wieder zu zerlegen (TextArrays, XML, Binärdaten) • Untypisierte Daten führten oftmals zu serverseitigen Fehlern
Table-valuedparameterAusgangslage • Grundlage sind benutzerdefinierte Tabellentypen • ErweiterungderbenutzterdefiniertenTypen, derTypwird in sys.table_typespersistiert • Erweiterungderbestehenden “Create Type” Syntax CREATE TYPE myTableType AS TABLE (id INT, name NVARCHAR(100),qty INT); DECLARE @MyVarmyTableType
Table-valuedparameterAnwendung • Table-valuedparameters • Verwendung von benutzerdefinierte Tabellentypen für die temporäre Speicherung von und den lesenden Zugriff auf die Daten (READONLY) • Vereint Vorteile von Tabellenvariablen und temporären Tabellen
Table-valuedparameterAnwendung • Ermöglicht die Übergabe als SqlParameter von Instanzen der Typen • DataTable • DbDataReader • System.Collections.Generic.IList<SqlDataRecord> • Unterstützung der clientstacks OLEDB/ODBC/ADO.NET • Erweiterung der .NET (3.x) Client durch den neuen SqlDbType „Structured“
Table-valuedparameterVorteile • Ermöglicht große Mengen an Daten vom Client an den Server effizient (zur weiteren Verarbeitung) zu übertragen • Bietet die Möglichkeit Parameter / Datensätze an Routinen in einer Variable zu übergeben (vs. XML, BLOB, CSV und andere Möglichkeiten die zusätzliche Verarbeitungen benötigen) • Verringert bei großen Datenmengen die Anzahl der erzeugten Roundtrips erheblich
{ Table-valued parameters} demo MitTable-valuedparameters arbeiten
Überblick • Mit unstrukturierten Daten arbeiten • Neue Zeiten sind angebrochen • Hierarchische Daten • MERGE • Integrierte Volltextsuche • Table Value parameters, Table rowconstructor • Geodaten • Goodies
Geodaten • Geodaten sind vielfältig einsetzbar • Planare (ebene Welt) und geodätische (runde Welt) Algorithmen • Visualisierung von Geodaten mit dem Virtual Earth SDK • Austausch von Geodaten über GML XML • Integration von Geodaten in .NET Anwendungen • Verbesserte Performance durch „Spatial Indexes“ 47.6456, -122.12551
Geodaten Geography Datentyp • Geodätisches Modell („Runde Erde“) • Beschreibt Punkte, Linien und Gebiete durch Längen- und Breitengrade • Berechnet Erdkrümmung und berücksichtigt korrekte „Großkreis“-Entfernungen
GeodatenGeometry Datentyp • Ebenes Modell („Flache Erde“) • Beschreibt Punkte, Linien und Gebiete durch X/Y Koordinaten • Einsetzbar für kleine Gebiete und nichtprojezierte Oberflächen wie Innenräume, etc.
GeodatenMethoden des Geometry Datentyps • OGC Methoden (43) • ErweiterteMethoden (10) • OGC StatischeMethoden (16) • ErweiterteStatischeMethoden (4)
{JobScout24} Partner Sven Schneider TeamleiterSoftwareentwicklung JobScout24
{ Geodaten} demo Übersicht Geodaten Mit Geodaten arbeiten
Überblick • Mit unstrukturierten Daten arbeiten • Neue Zeiten sind angebrochen • Hierarchische Daten • MERGE • Integrierte Volltextsuche • Table Value parameters, Table rowconstructor • Geodaten • Goodies
Die kleinen Dinge im Leben… • C# Unterstüzung für SSIS-Tasks • Large UDTs • Die Größe von 8k wurde gebrochen, neue mögliche Größe der UDTs ist 2GB • Intellisense in SQL Server Management Studio
Die Kleinen Dinge im Leben… • Rowconstructors SELECT * FROM (VALUES (10002,1,12,1,12), (10002,1,12,1,12), (10003,1,12,1,12) ) AS SomeOrders(OrderId, ProductId, UnitPrice, Quantity, Discount)
Die kleinen Dinge im Leben… • Rowconstructors Insert Into [Order Details]VALUES (10001,1,12,1,12) , (10002,1,12,1,12) , (10003,1,12,1,12)
Die kleinen Dinge im Leben… • INSERT over DML • Erweiterung zu OUPUT INTO Anweisung • Ermöglicht die Speicherung und Verarbeitung der DML relevanten Informationen (INSERTED /DELETED / $Actions) Update [Order Details] SET Discount = 0 WHERE Price < 10 Update [Order Details] SET Discount = 0 OUTPUT DELETED.OrderId, DELETED.PosId INTO OrdersThatChanged WHERE Price < 10 INSERT INTO OrdersThatChanged (OrderId,PosId) SELECT OrderId,PosId FROM ( Update [Order Details] SET Discount = 0 OUTPUT DELETED.OrderId, DELETED.PosId WHERE Price < 10 ) ChangedOrders (OrderId, PosId) WHERE ProductId > 1000