Server2014-Das ist neu(Teil 2)

Werbung
Backend
Created for Ralf Zumbrunn ([email protected]) - 15322 on 30.07.2014 23:37:17
Please do not make illegal copies!
SQL Server 2014: Das ist neu, Teil 2
Ent(b)lockungskur
Eine der größten Neuerungen im SQL Server 2014 ist In-Memory OLTP. Es soll die Datenbank-Engine im SQL Server
revolutionieren, da sämtliche Transaktionen direkt im Hauptspeicher ohne Locking & Blocking durchgeführt werden.
Auf einen Blick
Klaus Aschenbrenner bietet
SQL Server Consulting Services
für Unternehmen in ganz
Europa an. Er beschäftigt sich
seit Jahren mit der WindowsProgrammierung und seit 2000
mit dem .NET Framework. 2­ 004
und 2005 wurde er für sein
Engagement als Microsoft MVP
ausgezeichnet. Nähere Informationen zu seiner Person finden
Sie auf www.SQLpassion.at.
I
n-Memory OLTP ist das Schlagwort im SQL
Server 2014: Microsoft versucht mit InMemory OLTP (OLTP = Online Transaction
Processing) die relationale Datenbank-Engine
im SQL Server neu zu erfinden und verspricht
eine bis zu 100-fache Performance-Verbesserung (daher auch der Codename Hekaton =
Griechisch für hundert).
Klingt vielversprechend. Aber was verbirgt sich
eigentlich hinter In-Memory OLTP, warum brauchen wir eine solche neue Technologie, und mit
welchen Fallstricken muss man rechnen?
In diesem Artikel werden Sie zunächst sehen,
was In-Memory OLTP ist und warum eine solche neue Technologie für eine relationale Datenbank-Engine wie den SQL Server wichtig ist.
Anschließend tauchen wir Schritt für Schritt in
In-Memory OLTP ein und Sie lernen, wie Sie es
gewinnbringend in Ihren eigenen Datenbanken
einsetzen können – oder auch nicht ...
Inhalt
Warum In-Memory OLTP?
▸ Warum brauchen wir InMemory OLTP?
▸ Memory Optimized Tables.
▸ Native Compiled Stored
Procedures.
▸ Lock & Latch Free Data
Structures.
Als Erstes möchte ich Ihnen zeigen, warum eine solche neue Technologie im SQL Server notwendig ist und welches die Hintergründe sind.
Relationale Datenbanken können aus verschiedenen Gründen ausgebremst werden:
◼ L
angsames mechanisches Storage.
◼ S
SD-Storage ist extrem teuer.
◼ C
PU-Taktraten sind auf zirka 3 GHz beschränkt.
◼ R
elationale Datenbanken skalieren nicht unendlich.
Serie
1. Mehr Platz im Pool
2. Ent(b)lockungskur
dnpCode
A1405SQLServer2014
60
Sehen wir uns die einzelnen Punkte genauer
an. Wenn Sie Storage-Subsysteme im Einsatz
haben, die traditionelle mechanische Festplatten nutzen, wissen Sie sehr gut, dass Ihre Performance katastrophal ist.
Unsere CPUs sind über die Zeit immer schneller und schneller geworden, Hauptspeicher hat
Latenzzeiten von Nanosekunden. Und dann
werden unsere Daten auf Festplatten gespeichert, wo mechanisch ein Schreib-/Lesekopf
bewegt werden muss und die einzelnen Platten
rotieren – die Latenzzeiten bewegen sich hier im
Millisekundenbereich. Tausende Male langsamer
als Zugriff auf den Hauptspeicher ...
Auf der anderen Seite spricht schon fast jeder
über SSD-Storage-Systeme, die auf Flash-Tech-
nologie basieren und uns ohne mechanische
Komponenten Latenzzeiten im Nanosekundenbereich versprechen. Der einzige Nachteil
daran ist der eher hohe Preis.
Wenn Sie einen Blick auf Hauptspeichermodule (RAM) werfen, kann damit die gleiche
Performance zu einem niedrigeren Preis erzielt
werden, als das mit SSDs möglich wäre. Darum ist es auch schon jetzt ganz wichtig, dem
SQL Server so viel Hauptspeicher wie möglich
zuzuweisen, damit so viele Daten wie möglich
gecacht werden können.
Können Sie sich noch an Ihre erste CPU erinnern? Bei mir war das ein Intel-486-DX2Prozessor. Laut Moore's Law sollte sich die Zahl
der Transistoren in Mikroprozessoren alle 18 bis
24 Monate verdoppeln. Die derzeit schnellsten
Prozessoren (ohne Übertaktung) laufen bei zirka 3 GHz.
Früher ging man davon aus, dass sich das immer weiter steigern lässt: 4, 5, 6, 7, 8 GHz und so
weiter. Aber die Realität hat uns anderes gelehrt.
Denn mit der Zahl der Transistoren nimmt auch
die Entwicklung von Wärme zu, die nicht mehr
effektiv abgeführt werden kann. Dadurch stehen wir jetzt bei etwa 3 GHz. Mehr geht nicht.
Aber auch dieses Problem wurde seitens der
Prozessorhersteller (Intel, AMD) – fast – gelöst:
Statt über die Taktrate zu skalieren, wurden einfach mehrere Cores auf einem physischen CPUSocket verbaut. Anwendungen, die Multithreading unterstützen, können dadurch weiterhin
[Abb. 1] CPU-Taktraten skalieren nicht unbegrenzt [1].
5.2014 www.dotnetpro.de
Backend
Created for Ralf Zumbrunn ([email protected]) - 15322 on 30.07.2014 23:37:17
Please do not make illegal copies!
skalieren und eine enorme Performance
liefern.
In Abbildung 1 können Sie an der blauen
Kurve sehr schön erkennen, dass die Takt­
raten von CPUs nicht bis ins Unendliche
skalieren.
Leider skalieren auch traditionelle relationale Datenbanken nicht bis ins Unendliche. Relationale Datenbanken wie
der SQL Server basieren intern auf Konzepten, die bereits in den 70er Jahren „erfunden“ wurden.
Konzepte, die dem SQL Server hier im
Weg stehen, sind das Locking, Blocking
und Latching. Schauen wir uns das einmal genauer an. Mit Locking und Blocking sollte jeder vertraut sein, der mit
dem SQL Server arbeitet.
Damit parallele Transaktionen voneinander isoliert werden können (und somit
korrekte Ergebnisse liefern), verwendet
der SQL Server intern Locks. Ein Lock im
SQL Server ist eine logische Sperre. Lesende Transaktionen (SELECT) fordern immer
Shared Locks an, schreibende Transaktionen (INSERT, UPDATE, DELETE) fordern
immer Exclusive Locks an. Und die beiden
Locks sind inkompatibel, das heißt, lesende Transaktionen blockieren schreibende
Transaktionen und umgekehrt. Dadurch
entstehen sogenannte Blockaden, die den
Durchsatz und somit die Performance der
Datenbank minimieren.
Abhilfe wurde hier zum Beispiel bereits
mit dem SQL Server 2005 geschaffen, indem ein „Optimistic Concurrency Model“
eingeführt wurde. Hier fordern lesende
Transaktionen keine Shared Locks mehr
an, sondern holen sich eine entsprechend
alte gültige Version des betreffenden Datensatzes aus dem Version Store, der zentral in der TempDb gehalten wird. Schreibende Vorgänge müssen allerdings immer
noch Exclusive Locks anfordern – dies
kann nicht beeinflusst werden.
Neben den Locks auf Transaktionsebene
muss der SQL Server intern auch den parallelen Zugriff auf gemeinsam genutzte
Datenstrukturen zwischen unterschiedlichen Threads synchronisieren. Eine solche
Datenstruktur ist zum Beispiel der Buffer
Pool, in dem alle gelesenen Pages vom Storage zwischengespeichert werden.
Wenn Sie schon einmal MultithreadingAnwendungen implementiert haben, werden Sie wissen, dass für die Thread-Synchronisierung unter anderem sogenannte
Critical Sections eingesetzt werden. Eine
Critical Section ist ein Codeblock, der zu
einem gegebenen Zeitpunkt nur von ei-
nem einzigen Thread ausgeführt werden
darf. Im SQL Server werden diese Critical
Sections als Latches bezeichnet.
Wenn ein Thread einen lesenden oder
schreibenden Zugriff auf Pages im Buffer Pool durchführt, durchläuft dieser
ebenfalls Critical Sections, da ansonsten
sogenannte Race Conditions entstehen
würden. Im Fachjargon des SQL Servers
bezeichnet man diese Vorgehensweise als
Latching einer Page: Bevor eine Page gelesen werden kann, muss sie mit einem
Shared Latch gelatcht werden; bevor eine Page geschrieben werden kann, muss
sie mit einem Exclusive Latch gelatcht
werden. Daraus folgt, dass der Zugriff
auf Pages im Buffer Pool serialisiert, also
single-threaded erfolgt! Auch wenn Sie eine perfekte Indizierungsstrategie für Ihre
Datenbank gefunden und den schnellsten
Storage der Welt im Einsatz haben, werden
Sie in Latching-Probleme im Hauptspeicher laufen, da auf gewisse Datenstrukturen kein Multi-threaded-Zugriff erlaubt ist.
Ein altbekanntes Problem ist hier die sogenannte „Last Page Insert Latch Contention“: Sie kann in einem Clustered Index
auftreten, wenn Sie einen fortlaufenden
Wert wie eine INT IDENTITY-Spalte unter
einer sehr hohen Nutzerlast verwenden.
Aus alldem ist zu erkennen, dass aktuelle relationale Datenbanken nicht in alle
Unendlichkeit skalieren. Wir benötigen
daher eine Technologie mit den folgenden
Eigenschaften, damit eine relationale Datenbank nahtlos skalieren kann :
◼ D
aten werden ausschließlich im Hauptspeicher gehalten.
◼ A
bfragen werden mit den geringstmöglichen CPU-Instructions abgearbeitet.
◼ E
liminierung von Locking, Blocking und
Latching.
Genau hier setzt In-Memory OLTP im
SQL Server 2014 an. Diese neue Technologie baut auf drei Säulen auf :
◼ Memory Optimized Tables
◼ Native Compiled Stored Procedures
◼ Lock & Latch Free Data Structures
Memory Optimized Tables
Die erste der Säulen, auf denen In-Memory OLTP im SQL Server 2014 aufbaut, sind
sogenannte Memory Optimized Tables
(speicheroptimierte Tabellen). Im Unterschied zu den traditionellen Disk-Based
Tables werden die Daten in den In-Memory Tables nur im Hauptspeicher gehalten und nicht in Datenfiles, die physisch
im Storage liegen.
Damit im Fehlerfall (zum Beispiel bei
einem Absturz des SQL Servers) die Daten aus dem Hauptspeicher rekonstruiert
werden können, werden periodisch sogenannte Checkpoint-Files geschrieben,
die in einem sehr effizienten Format die
Daten, die im Hauptspeicher gehalten
werden, in einer FILESTREAM-Filegroup
abspeichern.
Wenn Sie eine Memory Optimized Ta­
ble­im SQL Server 2014 erzeugen, müssen
Sie auch mindestens einen Hash­-Index
anlegen. Ein Hash-Index indiziert die Tabellendaten in einer Hash Table.
Traditionelle Clustered und Non-Clustered Indizes werden von Memory Optimized Tables nicht unterstützt, da der
intern verwendete B+-Baum auf das ineffiziente Latching angewiesen ist, dessen
Probleme wir bereits betrachtet haben.
In der finalen Version des SQL Server
2014 werden pro Memory Optimized Table bis zu acht Hash-Indizes unterstützt,
weitere sind aktuell nicht vorgesehen. Ab
der CTP2 des SQL Server 2014 werden
auch sogenannte Range-Indizes unterstützt, die intern auf einem Bw-Baum
aufbauen. Mehr dazu später.
Memory Optimized Tables bieten Ihnen
auch ein vollständiges neues Concurrency Model an, das auf den Prinzipien von
„Multi Version Concurrency Control“
(MVCC) aufbaut [2]. Traditionell werden
ja beim Lesen und Schreiben von Daten
entsprechende Locks angefordert. Beim
Einsatz von Optimistic Concurrency, dem
optimistischen Locking (ab SQL Server
2005, siehe oben) lässt sich beim Lesen
die Vergabe von Shared Locks vermeiden,
beim Schreiben der Daten müssen aber
immer noch Exclusive Locks angefordert
werden.
Der Einsatz von MVCC ändert dies vollständig, da hier auch beim Schreiben von
Daten keine Exclusive Locks mehr angefordert werden. Bei Datenveränderungen
werden nämlich einfach neue Versionen
erzeugt, die einen Begin- und End-Timestamp aufweisen.
Lesende Transaktionen können dann
sehr einfach aufgrund ihres aktuellen
Timestamps die für sie gültige Version des
Datensatzes zurückliefern. Ältere Versionen eines Datensatzes, die nicht mehr
benötigt werden, entfernt später ein Garbage Collector.
Damit Sie In-Memory OLTP überhaupt
verwenden können, müssen Sie in Ihrer
Datenbank im ersten Schritt eine FILESTREAM-Dateigruppe anlegen, die In-
www.dotnetpro.de 5.201461
Backend SQL Server 2014: Das ist neu, Teil 2
Created for Ralf Zumbrunn ([email protected]) - 15322 on 30.07.2014 23:37:17
Please do not make illegal copies!
Listing 1
Listing 2
Anlegen einer In-Memory-OLTPFilegroup.
Anlegen einer Memory
­Optimized Table.
CREATE DATABASE TestDatabase
GO
ALTER DATABASE TestDatabase
ADD FILEGROUP HekatonFileGroup CONTAINS
MEMORY_OPTIMIZED_DATA
GO
USE TestDatabase
GO
ALTER DATABASE TestDatabase ADD FILE
(
NAME = N'HekatonContainer',
FILENAME = N'C:\Program Files\
Microsoft SQL Server\
MSSQL12.MSSQLSERVER\MSSQL\
DATA\HekatonContainer'
)
TO FILEGROUP [HekatonFileGroup]
GO
Memory-OLTP-Daten beinhalten kann.
Listing 1 zeigt, wie das funktioniert.
Wie Sie erkennen können, handelt es
sich bei einer In-Memory-OLTP-Filegroup
um eine traditionelle FILESTREAM-Filegroup, deren Funktionalität bereits seit
dem SQL Server 2008 zur Verfügung steht.
Der einzige Unterschied ist, dass Sie hier
die Eigenschaft CONTAINS MEMORY_OPTIMIZED_DATA angeben müssen.
Innerhalb der In-Memory-OLTP-Datei­
gruppe können Sie auch wie gewohnt
mehrere FILESTREAM-Container angeben. Das ist zum Beispiel dann von Vorteil, wenn sich die Container auf unterschiedlichen Festplatten befinden: Das
Recovery Ihrer Memory Optimized Tables
kann beim Startup des SQL Servers dann
parallelisiert von allen Containern gleichzeitig durchgeführt werden.
Nachdem Sie die Vorbereitungen auf
Datenbankebene nun abgeschlossen haben, können Sie im nächsten Schritt Ihre
erste Memory Optimized Table anlegen
(Listing 2).
Um die Tabelle als Memory Optimized
Table anzulegen, müssen Sie bei der
WITH-Option nur die Eigenschaft MEMORY_OPTIMIZED angeben. Zusätzlich ist
noch mindestens ein Hash-Index über die
Syntax NONCLUSTERED HASH anzulegen. Auf die Eigenschaft BUCKET_COUNT
werden wir später noch eingehen.
62
CREATE TABLE TestTable
(
Col1 INT NOT NULL,
Col2 VARCHAR(100) NOT NULL,
Col3 VARCHAR(100) NOT NULL
CONSTRAINT chk_PrimaryKey PRIMARY KEY
NONCLUSTERED HASH (Col1) WITH (BUCKET_
COUNT = 1024)
) WITH (MEMORY_OPTIMIZED = ON)
GO
Das Interessante ist, was nun im Hintergrund im SQL Server passiert, wenn Sie
das CREATE TABLE-Statement ausführen.
Der SQL Server erstellt nämlich für Ihre
Memory Optimized Table eine eigenständige DLL-Datei, die in den Prozessraum
des SQL Servers geladen wird! Im Detail
passiert hier Folgendes:
1.Die Tabellen-Definition des T-SQLStatements CREATE TABLE wird über
mehrere Zwischenschritte in C-Code
konvertiert.
2.Der C-Code wird über den C++-Compiler (cl.exe) und den Linker (link.exe) zu
einer DLL kompiliert.
3.Die generierte DLL schließlich wird zur
Laufzeit in den Prozessraum des SQL
Servers geladen.
Als Resultat wird der komplette Zugriff auf die speicheroptimierte Tabelle
über nativ kompilierten Maschinencode
durchgeführt – und die begrenzt verfügbaren CPU-Zyklen (CPU-Taktraten skalieren nicht unendlich) dadurch so effektiv
wie möglich ausgenutzt.
Ein Nebeneffekt dabei: Es ist auch nicht
mehr möglich, bei einer Memory Optimized Table zu einem späteren Zeitpunkt
einen Index zu definieren. Sämtliche Indizes, Tabelleneigenschaften und Constraints müssen Sie direkt im T-SQL-Statement CREATE TABLE definieren, da dieser
komplette Codeblock in einem Schritt zu
einer DLL kompiliert wird.
Den daraus resultierenden C-Code
können Sie sich sogar ansehen. Er wird
in einem Unterverzeichnis im Ordner C:\
Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\xtp
abgelegt. Die Zahl des Unterverzeichnisses
stellt die entsprechende interne Datenbank-ID dar. Wenn Sie das T-SQL-State-
ment CRE­ATE TABLE ausgeführt haben, sehen Sie auch in der Dynamic Management
View sys.dm_os_loaded_modules, dass die
daraus resultierende DLL in den Prozessraum des SQL Servers geladen wurde.
Bei all diesen Vorteilen von speicheroptimierten Tabellen gibt es auch Nachteile,
da in der finalen Version des SQL Server
2014 nicht sämtliche Funktionalitäten unterstützt werden, die Sie von unseren klassischen Disk-Based Tables kennen:
◼ D
ie Datensatzlänge ist auf 8 KByte limitiert.
◼ T
RUNCATE TABLE und ALTER TABLE
werden nicht unterstützt.
◼ K
eine Unterstützung für Fremdschlüssel und LOB-Datentypen.
◼ N
icht alle Datentypen werden unterstützt.
Nachdem Sie eine Memory Optimized
Table angelegt haben, können Sie ganz
normal Datensätze einfügen, aktualisieren und löschen. Mit dem großen Unterschied, dass sich alles im Hauptspeicher
abspielt und Sie mit dem eigentlichen Datenfile nicht mehr interagieren (zum Beispiel im Rahmen des CHECKPOINT-Prozesses). Trotzdem interagiert In-Memory
OLTP immer noch mit Ihrem Transaktionslog. Standardmäßig werden hier alle
Datenveränderungen in Ihren Memory
Optimized Tables mitprotokolliert, da diese für ein mögliches Crash Recovery Ihrer
Datenbank benötigt werden.
Der große Unterschied zu traditionellen Disk-Based Tables ist, dass hier nicht
auf der Granularität der verschiedenen
Indizes mitprotokolliert wird, sondern
auf der Granularität der Tabelle. Wenn Sie
zum Beispiel auf Ihrer Tabelle acht HashIndizes definiert haben und Sie fügen
einen Datensatz in die Tabelle ein, wird
diese Einfüge-Operation genau ein Mal
im Transaktionslog mitprotokolliert.
Bei traditionellen Tabellen hingegen wird
für jeden Index (Clustered/Non-Clustered
Index) separat im Transaktionslog mitgeschrieben. Das Transaktionslog lässt sich
bei In-Memory OLTP daher um einiges effizienter schreiben und verwenden.
Wenn Sie mit In-Memory OLTP den
Flaschenhals des Transaktionslogs ebenfalls eliminieren möchten, bieten Ihnen
Memory Optimized Tables die Möglichkeit, sogenannte Schema-only Tables zu
definieren. Dadurch wird nur die Tabellendefinition selbst in der Datenbank
persistiert (das Schema), aber nicht mehr
die Daten. Daher müssen Datenverände-
5.2014 www.dotnetpro.de
Backend
Created for Ralf Zumbrunn ([email protected]) - 15322 on 30.07.2014 23:37:17
Please do not make illegal copies!
Listing 3
Schema-only-Tabellen.
CREATE TABLE Orders
(
OrderID UNIQUEIDENTIFIER NOT NULL,
CustomerID INT NOT NULL,
ProductID INT NOT NULL,
Quantity INT NOT NULL,
Price DECIMAL(18, 2) NOT NULL
CONSTRAINT chk_PrimaryKey PRIMARY KEY
NONCLUSTERED HASH (OrderID) WITH
(BUCKET_COUNT = 1048576)
) WITH
(
MEMORY_OPTIMIZED = ON,
DURABILITY = SCHEMA_ONLY
)
GO
rungen auch nicht mehr im Transaktionsprotokoll mitgeschrieben werden.
Der Nachteil? Sobald Sie Ihren SQL Server neu starten, haben Sie die kompletten
Daten der Tabelle verloren und die Tabelle
ist leer. Daraus folgt, dass diese Funktionalität nicht für alle denkbaren Szenarien
geeignet ist. Sie eignet sich vorwiegend
dann, wenn Sie die Daten in der Tabelle
reproduzieren können.
Denken Sie etwa an einen ETL-Prozess,
der Ihr Data Warehouse jede Woche belädt. Die hier involvierten Staging-Tabellen könnten Sie ohne Probleme als Schema-only definieren, weil Sie im Fehlerfall die Daten einfach nochmals aus den
Quellsystemen laden können. Listing 3
zeigt, wie Sie eine solche Tabelle erstellen.
Sie geben hier bei der Eigenschaft DURABILITY einfach SCHEMA_ONLY an.
Dadurch werden die Tabellendaten nur
mehr im Hauptspeicher gehalten und zu
keiner Zeit physisch in den Storage geschrieben. Wie bereits erwähnt, müssen
Sie im Hinterkopf behalten, dass die Daten in der Tabelle verloren sind, sobald
der SQL Server neu gestartet wird.
wiederum zur Laufzeit in den Prozessraum des SQL Servers geladen wird. Die
Kompilierung zu nativem Maschinencode
bringt folgende Performance-Vorteile :
◼ T
-SQL Stored Procedures werden nicht
mehr während ihrer Ausführung interpretiert, sondern laufen mit nativem
Maschinencode.
◼ Z
usätzliche, teure CPU-Instructions
durch die notwendigen C++-VirtualFunction-Calls eines traditionell ausgeführten Ausführungsplans können
vermieden werden.
Abbildung 2 zeigt, wie aus einer normalen in T-SQL geschriebenen Stored Procedure eine C-DLL generiert wird. Der genaue Ablauf der Generierung der C-DLL
gestaltet sich wie folgt :
1.Im ersten Schritt wird ein „normaler“
Execution Plan über den SQL Server
Query Optimizer erzeugt.
2.Danach wird dieser Ausführungsplan
in einen sogenannten „Mixed Abstract
Tree“ (MAT) konvertiert.
3.Unter Zuhilfenahme der Tabellen-Metadaten wird der MAT in einen „Pure Imperative Tree“ (PIT) konvertiert. Hier werden zum Beispiel alle T-SQL-Datentypen
in die C-Äquivalente transformiert.
4.Der PIT wird anschließend zu C-Code
transformiert, der dann wiederum über
den C-Compiler und den Linker zu einer DLL kompiliert wird.
5.Die generierte DLL wird in den Prozessraum des SQL Servers geladen.
Wenn Sie anschließend Ihre Stored Procedure ausführen, wird nicht Ihre T-SQL
Stored Procedure interpretiert, sondern
Sie führen nativ kompilierten, performanten Maschinencode aus. Dadurch können
die CPU-Zyklen so effektiv wie möglich
ausgenutzt und die Performance gesteigert werden.
Der generierte C-Code der Stored Procedure wird wiederum im Ordner C:\Program
Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\xtp abgelegt.
Wenn Sie hier einen Blick in die generierte C-Datei werfen, werden Sie feststellen,
dass Spaghetticode erzeugt wurde, der
sehr viele goto-Statements beinhaltet. Was
nicht heißt, dass schlechter Code erzeugt
wurde – goto-Statements wurden hier bewusst gewählt, weil sich die generierte CDLL dadurch klein halten lässt.
Aufrufe von gemeinsam genutzten
Funktionen kosten entsprechende zusätzliche CPU-Instructions (der Callstack muss
gepflegt, Rücksprung-Adressen müssen
gespeichert werden et cetera), während
ein goto-Statement ein einziger AssemblerBefehl ist. Denken Sie also daran, wenn Sie
das nächste Mal ein goto in Ihrem eigenen
Code verwenden.
Eine Native Compiled Stored Procedure wird bereits bei der Erstellung vollständig kompiliert. Das ist einer der großen Unterschiede zu traditionellen gespeicherten Prozeduren, die erst bei der
ersten Ausführung kompiliert werden,
wodurch der generierte Ausführungsplan
für weitere Ausführungen im Plan Cache
gecacht wird.
Listing 4 zeigt, wie Sie eine Native Compiled Stored Procedure im SQL Server
2014 erstellen.
Native Compiled Stored
Procedures
Eine weitere Säule von In-Memory OLTP
im SQL Server 2014 sind die sogenannten
„Native Compiled Stored Procedures“.
Die Namensgebung lässt schon erahnen, welcher Tricks sich der SQL Server
hier bedient: Ihre in T-SQL geschriebenen
Stored Procedures (gespeicherten Prozeduren) werden zu nativem Maschinencode in Form einer C-DLL kompiliert, die
[Abb. 2] Aus einer
C-DLL wird eine
T-SQL Stored ­
Pro­cedure [3].
www.dotnetpro.de 5.201463
Backend SQL Server 2014: Das ist neu, Teil 2
Created for Ralf Zumbrunn ([email protected]) - 15322 on 30.07.2014 23:37:17
Please do not make illegal copies!
Listing 4
Native Compiled Stored
Procedure.
CREATE PROCEDURE HekatonProcedure
(
@Param INT
)
WITH NATIVE_COMPILATION, SCHEMABINDING,
EXECUTE AS OWNER
AS
BEGIN
ATOMIC WITH
(
TRANSACTION ISOLATION LEVEL =
SNAPSHOT, LANGUAGE = 'us_english'
)
INSERT INTO dbo.TestTable (Col1, Col2,
Col3) VALUES (@param, 'Klaus',
'Aschenbrenner')
SELECT Col1, Col2, Col3 FROM dbo.
TestTable
END
GO
Sie müssen hier mit dem WITH-Schlüsselwort die Optionen SCHEMABINDING,
EXECUTE AS und NATIVE_COMPILATION
angeben. Zusätzlich müssen Sie noch einen Atomic-Block definieren, der den gewünschten Isolation Level und die Sprache angibt. Zu beachten ist hierbei, dass
die Isolation Level von In-Memory OLTP
nicht mit den traditionellen Isolation­Leveln des SQL Servers gleichzusetzen sind.
In-Memory OLTP unterstützt die Isolation
Level SNAPSHOT, REPEATABLEREAD und
SERIALIZABLE, wobei SNAPSHOT dem
traditionellen Isolation Level Read Committed entspricht.
Eine der größten Einschränkungen von
Native Compiled Stored Procedures ist,
dass Sie damit nur auf Memory Optimized
Tables zugreifen können – nicht aber auf
normale Disk-Based Tables. Native Code
kann nur mit Native Code zusammenarbeiten. Ebenso wenig wie bei Memory
Optimized Tables können Sie die Implementierung der Stored Procedure durch
ein ALTER PROCEDURE ändern, da dieser
Befehl nicht unterstützt wird. Sie müssen
daher die Native Compiled Stored Procedure löschen und anschließend über
CREATE PROCEDURE neu anlegen.
Da die Implementierung der T-SQL
Stored Procedure zu einer C-DLL kompiliert wird, gibt es derzeit auch keine Mög64
lichkeit, ein Recompile der Stored Procedure während der Laufzeit durchzuführen,
wenn sich zum Beispiel die Statistiken
geändert haben. Sie können also durchaus
Native Compiled Stored Procedures laufen
haben, die ineffektiv ausgeführt werden,
weil sich in der Zwischenzeit die Datenverteilung in den Tabellen geändert hat. Dadurch ist der generierte C-Code nicht mehr
der effektivste. Der einzige Ausweg ist hier
ein DROP und anschließendes CREATE der
Stored Procedure.
Alles im allem gibt es hier noch sehr
viele Einschränkungen und Fallstricke,
die Sie für einen produktiven Einsatz im
Vorfeld beachten und validieren müssen.
Lock & Latch Free Data Structures
Wie eingangs bereits erwähnt, können
traditionell implementierte relationale
Datenbanken wie der SQL Server nicht
ohne Probleme skalieren, weil der Zugriff
auf gemeinsam genutzte Datenstrukturen
im Hauptspeicher serialisiert zwischen
verschiedenen Threads ausgeführt werden muss. Dieses Problem nennt sich im
SQL Server „Latch Contention“ und kann
unter sehr hoher Nutzerlast auftreten.
Aus diesem Grund gibt es in der Multithreaded-Programmierung den Ansatz der
sogenannten „Wait & Lock Free Algorithm
& Data Structures“ [4]. Dabei handelt es
sich um Programmierprinzipien, die ohne den Einsatz von Critical Sections eine
sichere Multithreading-Programmierung
erlauben – unter Einsatz von „Atomic CAS
Operations“ (Atomic Compare-and-Swap
Operations) [5].
Auf genau solchen Prinzipien und Datenstrukturen setzt auch In-Memory OLTP
im SQL Server 2014 auf. Im Speziellen verwendet hier der SQL Server Hash-Indizes
und Range-Indizes für die Datenspeicherung in Memory Optimized Tables.
Ein Hash-Index basiert intern auf einer Hash Table; ein Range-Index ist intern über einen Bw-Tree implementiert.
Beide Datenstrukturen sind Lock- und
Latch-frei; das heißt, sie können für Multithreaded-Anwendungen ohne Critical
Sections implementiert werden. Der BwTree verwendet zusätzlich noch AtomicCAS-Operationen, um Änderungen in der
Baumstruktur threadsicher ohne den Einsatz von Latches zu ermöglichen.
Sehen wir uns den Hash-Index näher an.
Wie schon erwähnt speichert ein Hash-Index die Daten in einer Hash Table ab. Der
Zugriff auf die Hash Table kann wiederum
ohne Latches erfolgen, wodurch eine hohe
Skalierbarkeit erreichbar ist.
Wie Sie in Listing 2 gesehen haben,
müssen Sie bei der Erstellung eines HashIndex einen Bucket Count angeben. Intern ist eine Hash Table in sogenannte
Hash Buckets unterteilt und der Bucket
Count gibt an, wie viele Hash Buckets erzeugt werden sollen.
Der Inhalt der Tabellenspalten, wo Sie
den Hash-Index definiert haben, wird über
eine sogenannte Hash-Funktion gleichmäßig zwischen den verschiedenen Hash
Buckets verteilt. Nehmen wir an, wir haben
einen Hash-Index auf einer Spalte LastName definiert und der SQL Server verwendet eine Hash-Funktion, die aufgrund
des ersten Buchstabens definiert, in welches Hash Bucket der entsprechende Datensatz abgespeichert wird. In diesem Fall
werden unsere Datensätze über 26 verschiedene Hash Buckets verteilt (A bis Z).
Tatsächlich verwendet der SQL Server
eine komplexere Hash-Funktion, die auch
gewährleistet, dass die Daten zwischen
den verschiedenen Hash Buckets gleichmäßig aufgeteilt werden. Welche HashFunktionen hier verwendet werden, ist
undokumentiert.
Natürlich kann es vorkommen, dass Datensätze aufgrund der Spaltenwerte in gleiche Hash Buckets gemappt werden (mehrere Namen, die mit dem gleichen Buchstaben beginnen). Wir sprechen von einer
Hash Collision. Bei einer Hash Collision
[Abb. 3] Clustered Index:
Hotspot durch Latching im
Hauptspeicher.
5.2014 www.dotnetpro.de
n
e
r
T
ds
u
s
ö
L
Created for Ralf Zumbrunn ([email protected]) - 15322 on 30.07.2014 23:37:17
Please do not make illegal copies!
web & mobile
DEVELOPER
präsentieren:
n
nge
Kn
o
Ho
w
w
Unsere
Leser spar
en
€ 149,–
mit Code
DWX14dnp
14.-17. Juli 2014
NCC Ost, Nürnberg
DDC
■
.NET Developer
Conference
MDC
3-Tages-Konferenz
– 250 Vorträge
– 40 Thementracks
– Networking auf Abendveranstaltungen
■
Top-Referenten
über 150 Experten aus den
Themenbereichen Web-,
Mobile- und .NET-Entwicklung
www.developer-week.de
Aussteller & Sponsoren:
Mobile Developer
Conference
WDC
Web Developer
Conference
10 parallele Workshops
am 17. Juli 2014
■
– Ganztägig
– Vertiefend
■
Fachausstellung
mehr als 40 Partner präsentieren
sich in der begleitenden Fachausstellung vom 14.-16. Juli 2014
DeveloperWeek
Created for Ralf Zumbrunn ([email protected]) - 15322 on 30.07.2014 23:37:17
Please do not make illegal copies!
Programm Developer Week 2014
Tag 1: Montag, 14. Juli 2014
Architektur
Visual Studio
Webentwicklung
09.00 – 09.15
Begrüßung
09.15 – 10.00
Eröffnungs-Keynote
10.00 – 10.30
Kaffeepause
10.30 – 11.30
Design Patterns sind
Naturgesetze,
Thomas Mentzel
VisualStudio –
Ein Überblick,
David Tielke
Die Architektur der
ASP.NET Web API,
Marius Schulz
Architecting the
Cloud,
Robert Eichenseer
Rapid Application
Development –
Nur Spielerei?
Constantin Klein
OWIN – der Microsoft
Web Stack erfindet
sich neu,
Robert Mühsig
11.30 – 11.45
11.45 – 12.45
Von den Anforderungen zur Architektur:
Leitfaden für einen
guten Softwareentwurf
7 Jahre Visual Studio
TFS – Tipps & Ausblick,
Neno Loje
Flexible verteilte
Anwendungen mit
Micro-Service,
Mike Bild
Visual Studio 2013 –
Produktiver werden,
David Tielke
ab 19.00
Datenbackends in der
Cloud und deren
Integration,
Peter Kirchner
Erfolgreiche
Rewrites,
Johann-Peter
Hartmann
Enterprise-Webanwendungen mit
Ext JS / EXT.NET,
Johannes Hoppe
Debugging im Zeichen
der Cloud,
Robert Eichenseer
‘Triple-E‘ class
Continuous Delivery,
Werner Keil
Real Time Anbindung
an SAP ERP,
Rainer Barthels,
Otto Neff
Connected Web,
Damir Dobric
ALM konkret,
Sebastian Rölz
Was ist neu in
Windows Azure
Mobile Services?
Damir Dobric
Sourcingstrategien
für nationale
und internationale
Projekte,
Reiner Hörger
Mobile Games mit
Windows Azure,
Jürgen Gutsch
Zentrales Build &
Release Management,
Thomas Rümmler,
Christian Schlag
Kaffeepause
Schnee von gestern
– Was ist ein Event
Store?
Jan Fellien
Visual Studio
Online IDE,
Patrick Boscolo
17.30 – 17.45
17.45 – 18.45
Continuous
Delivery und Deployment in der Praxis,
Martin Aschoff
Raumwechsel
16.00 – 16.30
16.30 – 17.30
Einführung in
die Windows Azure
Plattform,
Sascha Dittmann
Mittagspause
14.45 – 15.00
15.00 – 16.00
ALM
Raumwechsel
12.45 – 13.45
13.45 – 14.45
Azure
Eine moderne
RESTful basierte
Web-Anwendung,
Marc André Zhou
Raumwechsel
Weißbuch der
ArchitekturDokumentation,
Stefan Zörner
Testmanagement mit
Visual Studio 2013,
Nico Orschel
Webanwendungen in
Minuten hochskalierbar bereitstellen,
Peter Kirchner
Abendveranstaltung
Ausführliches Programm, alle Abstracts, Referenten
und die Anmeldung online unter:
developer-week.de
Created for Ralf Zumbrunn ([email protected]) - 15322 on 30.07.2014 23:37:17
Please do not make illegal copies!
JavaScript
Webarchitekturen Web-Frameworks Android
iOS
Begrüßung
09.00 – 09.15
Eröffnungs-Keynote
09.15 – 10.00
Kaffeepause
10.00 – 10.30
Code-Qualität trotz
JavaScript,
Niko Köbler,
Heiko Spindler
Das Märchen vom
agilen Architekten,
Stefan Zörner
SinglePageApplications mit Ember.js,
Christian Ringler,
Robert Rieger
JavaScript Debugging
und Profiling,
Sebastian Springer
REST und RESTful
HTTP: Was es ist –
und was nicht,
Stefan Tilkov
Datenvisualisierung,
Martin Walter
Integration von
Google+ in iOS- und
Android-Apps,
Peter Friese
CoreBluetooth in
iOS 7,
Tammo Freese
Android Builds
automatisieren,
Janusz Leidgens
iBeacons allüberall
und in der Praxis,
Ivo Wessel
Raumwechsel
11.30 – 11.45
Mittagspause
JavaScript für
.NET-Entwickler,
Tilman Börner,
Golo Roden
Prinzipien für skalierbare Architekturen,
Sven Günther,
Andreas Havenstein
Tools und Tipps für
den modernen
Frontend-Workflow,
Sven Wolfermann
Autos verkaufen mit
CQRS und Event
Sourcing,
Marco Stechl,
Philipp Garbe
Web Services mit
Symfony2,
Paul Seiffert
Testing mit Robolectric und FEST in
Android Studio,
Onur Güngören
iOS meets Arduino –
Electronics prototyping mit iOS,
Jens Meder
Offline-Architekturen
für mobile Endgeräte,
Christian Pöcher
A Better CSS:
LESS is More
Bildbearbeitung für
iOS und Android mit
OpenCV,
Uwe Frieser
Modular iOS-Apps
Piet Brauer
High performance
websites,
Stefan Priebsch
Arne Blankerts
Twig – Eine PHP
Template Engine,
Timo Haberkern
Abendveranstaltung
15.00 – 16.00
16.00 – 16.30
Oberflächendesign
für Android Apps
Automatisiertes
Testing mit iOS,
Felix Schulze
Raumwechsel
Mit Angular.js schnell
zur Single Page
Application
13.45 – 14.45
14.45 – 15.00
Kaffeepause
Meteor JS – Eine
flexible JavaScript
Plattform,
Niko Köbler,
Heiko Spindler
11.45 – 12.45
12.45 – 13.45
Raumwechsel
Überlebenswichtig: Die wichtigsten Frameworks für
JavaScript
10.30 – 11.30
16.30 – 17.30
17.30 – 17.45
Modularer Android
Code mit Dagger,
Onur Güngören
Der einzig wahre
Objective-C Stil,
Tammo Freese
17.45 – 18.45
ab 19.00
Programmänderung vorbehalten
Created for Ralf Zumbrunn ([email protected]) - 15322 on 30.07.2014 23:37:17
Please do not make illegal copies!
Programm Developer Week 2014
Tag 2: Dienstag, 15. Juli 2014
ArchitekturPraxis
09.00 – 10.00
Das Event im Mittelpunkt: EDA und CEP,
Tobias Richling
.NET-Praxis
Next.NET
Daten
Trends
Standardsoftware –
Wege aus dem
Verwaltungschaos,
Boris Wehrle
LoB Windows 8 Apps,
Lars Heinrich
MapReduce in der
Praxis,
Sascha Dittmann
Kommunikation im
Internet der Dinge
mit MQTT,
Christian Götz
Professionelle Datenbankentwicklung mit
den SSDT,
Constantin Klein
Internet der Dinge –
mit Webtechnologien,
Timo Haberkern
Herausforderungen
im Datenzeitalter,
Constantin Klein
Wearable
Android – Developing
for Google Glass,
Sebastian Kaspari
Twitter insights mit
StreamInsight und
HDinsight,
Olivia Klose,
Patric Boscolo
3D-Druck für
Entwickler
Entkopplung und
Datenqualität in
Datenbanken,
Thomas Worm
Raspberry Pi für
Entwickler
Anwendungsfälle für
Elasticsearch,
Florian Hopf
Smartwatch Hacking,
Robert Virkus
Entity Framework 6.x
– Erweiterungsmöglichkeiten ausloten,
Thomas Haug
Spaß und Freude mit
Kinect,
Tam Hanna
10.00 – 10.30
10.30 – 11.30
Kaffeepause
Extreme Domain
Modelling,
Dennis Traub
Code Reviews –
Jeder kennts,
keiner machts,
Boris Wehrle
11.30 – 11.45
11.45 – 12.45
Raumwechsel
Die mystische
CRUD-3-SchichtenApplikation,
Tobias Richling
Prototyping und
Entwicklung mit dem
SharePoint Designer,
Alexander Tews
12.45 – 13.45
13.45 – 14.45
SeekYouRS –
Happy Path CQRS
Framework,
Jan Fellien
CodedUI in der
Praxis: Lokalisierung
bis Nachhaltigkeit,
Nico Orschel
Architecting
.NET Solutions for
the Enterprise,
Dino Esposito
OAuth2 und OpenID
Connect,
Daniel Basler,
André Meier
ab 19.00
Basics of hardware
programming in .NET,
Marcin Kawalerowicz
Kaffeepause
Gießen beliebiger
Datenstrukturen mit
Events,
Ralf Westphal
Reactive Extensions,
Mike Bild
17.30 – 17.45
17.45 – 18.45
Roslyn – Compiler as
a Service,
Christoph Wille
Raumwechsel
16.00 – 16.30
16.30 – 17.30
Cross-Plattform
Entwicklung mit C#,
Christian Lang, Loek
van den Ouweland
Mittagspause
14.45 – 15.00
15.00 – 16.00
Erstellung einer
prototypischen
Windows 8.1 App,
Peggy Reuter-Heinrich, Lars Heinrich
Libs, ohne die ich
nicht mehr
programmieren will,
Timothée
Bourguignon
Raumwechsel
Softwareentwurf Live,
Ralf Westphal
Usability praktisch,
Bernhard Pichler
Tasks – Wie
funktionieren die?
Bernd Marquardt
Abendveranstaltung
Ausführliches Programm, alle Abstracts, Referenten
und die Anmeldung online unter:
developer-week.de
Created for Ralf Zumbrunn ([email protected]) - 15322 on 30.07.2014 23:37:17
Please do not make illegal copies!
Node.js
Node.js-Anwendungen mit Visual Studio,
Peter Hecker
Datenbanken /
Datenzugriff
Responsive
Webdesign
Cross-Plattform
Mobile Praxis
Wie halte ich meine
Daten synchron?
Responsive Webdesign – Status Quo,
Roberto Bez
Vermeiden der Top 10
Entwicklungsfehler,
Thomas Gronbach
App Marketing:
Nobody loves my App,
Gregor Biswanger,
Alexander Witkowski
Kaffeepause
Building libraries
using Coffee Script,
Node.js,
Thorsten Hans
ArangoDB – A
different approach
to NoSQL,
Lucas Dohmen
Responsive
Webdesign verkaufen,
Patrick Lobacher
10.00 – 10.30
jQuery Mobile WebApp an SAP ERP
anbinden,
Philipp Friberg
Lessons Learned:
Building a Mobile
CRM,
Patrick Blitz
Raumwechsel
Leistungssteigernde
Maßnahmen:
Streams,
Golo Roden
Datenbankentwicklung für
Webentwickler
Fiese Fallstricke und
sexy Strategien,
Johannes Weber
Entkopplung und
Datenqualität in
Datenbanken,
Thomas Worm
Responsive Design
mit Bootstrap,
Gregor Biswanger
Plattformübergreifende App Usability,
Thorsten Stark,
Michal Gralak
Mobile Testing,
Felix Schulze
11.45 – 12.45
12.45 – 13.45
Firefox OS –
A (mobile) Web
Developer´s dream,
Carsten Sandtner
Smartere Web-Apps
entwickeln,
Dr. Michael Nolting
Raumwechsel
Node.js für
Webapplikationen,
Sebastian Springer
Event Sourcing in der
Praxis,
Benjamin Reitzammer, Johannes Seitz
Responsive Webdesign testen/debuggen,
Sven Wolfermann
Worauf kommt es
beim Design von
Datenbanken an?
Neue Techniken für
Responsive Design
Qualität und Sicherheit aus der Cloud,
Peter Bruhn,
Richard Süselbeck
Cross-Platform
Levels,
Udo Trappe
Skalieren mit Amazon
Web Services
Anbindung an das
CMS
Abendveranstaltung
15.00 – 16.00
16.00 – 16.30
Native multiplattform
Apps mit Enterprise
Scope,
Martin Wieschollek,
Christopher Klewes
Apache Cordova und
Frameworks für
hybride Apps,
Johannes Hoppe
Raumwechsel
Node.js versus .NET –
Teil 2,
Jürgen Gutsch,
Golo Roden
13.45 – 14.45
14.45 – 15.00
Kaffeepause
Node.js versus .NET –
Teil 1,
Jürgen Gutsch,
Golo Roden
10.30 – 11.30
11.30 – 11.45
Mittagspause
Richtig arbeiten mit
npm
09.00 – 10.00
16.30 – 17.30
17.30 – 17.45
Cross-PlattformEntwicklung mit
XAMARIN und .NET,
Sebastian Seidel
Copyright für
Developer,
Claus Volke
17.45 – 18.45
ab 19.00
Programmänderung vorbehalten
Created for Ralf Zumbrunn ([email protected]) - 15322 on 30.07.2014 23:37:17
Please do not make illegal copies!
Programm Developer Week 2014
Tag 3: Mittwoch, 16. Juli 2014
09.00 – 10.00
.NET-Tools
Craftsmanship
Desktop
Sprachen
Vorgehensmodelle
Codeanalyse Marke
Eigenbau,
Thomas Haug
Clean Code – Code
als kleinster gemeinsamer Nenner,
Ilias Foukis
WPF UI Development
Unchained,
David C.Thömmes,
André Lanninger
C# Dynamics in freier
Wildbahn,
Timothée
Bourguignon
Produktentwicklung
für die intelligente
Gebäudetechnik,
Urs Boehm
Hitchhiker‘s Guide to
Functional Programming,
Sergey Shishkin,
Steffen Forkmann
Srum, Kanban oder
doch beides?
Ilias Foukis
F# im Web und auf
dem Client,
Carsten König
Agiles Vorgehen in
traditionellen
Projekten,
Steve Graegert
Die JavaScript
Engine V8 in .NETAnwendungen nutzen,
Torsten Zimmerman
Football, Poker, PM
oder: Wir führen
Srum ein!
Marcus Jacob
Monaden durch
Beispiele begreifen,
Carsten König
Definition of almost
done,
Dominik Jungowski
Noch eine!? – Eine
neue Hochsprache für
JVM und CLR,
Michael Wiedeking
Best Practices für
globale Scrum Teams,
Jürgen Toth
10.00 – 10.30
10.30 – 11.30
Kaffeepause
Päckchen packen mit
NuGet,
Thomas Schissler
ATDD – Der Weg
zur lebenden
Dokumentation,
Hendrik Lösch
11.30 – 11.45
11.45 – 12.45
Raumwechsel
Code Generierung mit
.NET,
Philip Jander
The Black Art of GUI
Testing,
Christoph Thelen
12.45 – 13.45
13.45 – 14.45
FAKE: Echt starkes
Build für .NET, mit
.NET,
Philip Jander
Mit agilen Praktiken
SOLIDe Systeme
bauen,
Sven Günther
17.45 – 18.45
Building Rich Media
Apps,
Robert Eichenseer
Raumwechsel
Unit Testing und
Mocking mit
Microsoft FAKE,
Christian Jacob
SOLIDe Prinzipien des
objektorientierten
Entwurfs,
Dennis Traub
16.00 – 16.30
16.30 – 17.30
Missverständnisse bei
der WPF Look & Feel
Entwicklung,
Alexander Keller
Mittagspause
14.45 – 15.00
15.00 – 16.00
WPF – Deep Data
Binding,
Bernd Marquardt
Die eigene App mit
dem Cloud AD
verbinden,
Robert Mühsig
Kaffeepause
Installer bauen leicht
gemacht,
Marcus Jacob
Qualitätsmanagement
für kleine und mittlere Unternehmen,
Matthis Radke
Win 8.1 Apps mit
Hardware verbinden,
Alexander Witkowski
Abschlusskeynote
Ausführliches Programm, alle Abstracts, Referenten
und die Anmeldung online unter:
developer-week.de
Created for Ralf Zumbrunn ([email protected]) - 15322 on 30.07.2014 23:37:17
Please do not make illegal copies!
Softskills
Websprachen
Schnittstellen
Windows Phone
Mobile-Tools
Überleben im
Projektdschungel als
Softwareentwickler,
Dr. Christian Heiss
Das streichzarte Web,
Paul Bakaus
HTML5 Video:
Curing plugin
maladies since 2007,
Matthew George
McClure
Windows Phone und
Windows AppEntwicklung,
Daniel Meixner
Mit Touch Develop in
die Zukunft,
Christian Jacob
Kaffeepause
Verhaltensmuster in
der IT-Systementwicklung,
Chris Rupp,
Ulrike Friedrich
TestDriven
Development.php,
Dominik Jungowski,
Jakob Ketterl
Frontend First
Development,
Mike Bild
10.00 – 10.30
Windows Phone <3
Unternehmen,
Patrick Boscolo,
Bernd Mayer
Phone Gap and
other hybrid tools for
mobile development,
Dino Esposito
Raumwechsel
Abenteuer
Recruitment,
Julia Schüller
Endlich neue
Software,
Martin Ruprecht
Maintain your
Environment
with Puppet,
Hans-Christian Otto
TYPO3 Neos – Next
Generation CMS,
Patrick Lobacher
Mobile Security:
Death to passwords,
Tim Messerschmidt
Vier Stores für eine
App: Entwicklung in
60 Minuten,
Jan Schweda,
Marco Richardson
Mobiles E-Learning
mit Moodle,
Thomas Kraehe,
Tobias Hauser
Lieber generieren
als implementieren
Shops integrieren
Vier Stores für eine
App: Deployment,
Marco Richardson,
Jan Schweda
Der internationale
Markt: Lokalisierung
von Apps,
Daniel Schneller
Neue Techniken
für Webprojekte
einsetzen,
Peter Kröner
Produktionsdaten
anbinden
Abschlusskeynote
13.45 – 14.45
14.45 – 15.00
Cross-Platform
Mobile mit C#,
Kerry W. Lothrop
Vorgehen für die
Tablet-AppEntwicklung,
Patrick Blitz,
Sonja Harrer
Kaffeepause
Das Zen des
Rasenmähens,
Marco Klawonn
11.45 – 12.45
12.45 – 13.45
Raumwechsel
Vom Entwickler zur
Führungskraft,
Johann-Peter
Hartmann
10.30 – 11.30
11.30 – 11.45
Mittagspause
Führungskompetenz
Teamentwicklung
Julia Schüller
09.00 – 10.00
15.00 – 16.00
16.00 – 16.30
Multi Platform Game
Development mit
Unity,
Dariusz Parys
TFS & Java – Ein SDK,
das Türen öffnet
Denny Israel,
Thomas Wilk
16.30 – 17.30
17.45 – 18.45
Programmänderung vorbehalten
Created for Ralf Zumbrunn ([email protected]) - 15322 on 30.07.2014 23:37:17
Please do not make illegal copies!
Programm Developer Week 2014
Tag 4: Donnerstag, 17. Juli 2014 – Workshops, 09.00-17.00 Uhr
Test Driven Development in der Praxis Workshop 1 – Workshopleiter: Hendrik Lösch
TDD – Dieses unvergleichlich tolle Vorgehen, das Architekturen vereinfacht, die Produktivität steigert und
dabei den Spaß an der Entwicklung fördert. Versucht man es dann jedoch in der Praxis einzusetzen, ergibt
sich nicht selten Ernüchterung. Aus diesem Grund geht dieser Workshop näher auf die Hintergründe von
TDD und agiler Softwareentwicklung ein. Nach einer kurzen Einführungs ins Thema zeigt er unterschiedliche Ausprägungen des Vorgehens, deren Vor- und Nachteile sowie die Praxistauglichkeit. Ziel des Workshops ist es, dass Sie am Ende selbst entscheiden können, wie viel TDD wirklich gut für Ihr Projekt ist.
Eventsourcing: Blackbox im Eigenbau
Workshop 2 – Workshopleiter: Ralf Westphal
Statt nur den Zustand eines Datums festzuhalten, erfasst das Eventsourcing jede Veränderung. Damit ist
eine Historie schon eingebaut und eine Undo-Funktion eine Sache von wenigen Zeilen Code. Im Workshop
entsteht eine Blackbox, die Daten aufnimmt. Zwei Apps greifen dann auf diese zu.
MVVM – Eine Einführung Workshop 3 – Workshopleiter: Bernd Marquardt
MVVM – das ist ein Begriff, den jeder Entwickler einer Benutzerschnittstelle schon einmal benutzt hat.
In diesem Workshop lernen Sie an mehreren Bespielen Schritt für Schritt die Grundlagen einer MVVMAnwendung mit WPF kennen. Nach einer Einführung (DataBinding, INotifyChanged, DataTemplates, ObservableCollection, ...) wird das MVVM-Pattern in verschiedenen Ausprägungen besprochen. Hierzu gehören auch Dialoge, Nebenläufigkeit, Parameterübergabe, Unit-Tests usw.
Neue Techniken für Responsive Design
Workshop 4 – Workshopleiter: Peter Kröner
Dass es neben Desktop-PCs auch allerlei Mobilgeräte mit speziellen Designanforderungen gibt, hat sich
mittlerweile herumgesprochen. Ebenso ist bekannt, dass sich RWD verschiedenen Formfaktoren automatisch anpasst. Noch nicht so bekannt sind die neuesten Techniken, mit denen man einen Responsive-Design-Workflow heutzutage unterstützen kann. Neue CSS3-Layout-Module lassen komplexe, flexible Layouts zum Kinderspiel werden. In diesem Workshop lernen Sie diese und viele andere Techniken
rund um Responsive Design kennen, die über den einfachen Einsatz von Media Queries hinausgehen.
.NET De
DDC Confere
.NET De
DDC Confere
.NET De
DDC Confere
Mobile
MDC Confere
Ausführliches Programm, alle Abstracts, Referenten
und die Anmeldung online unter:
developer-week.de
Created for Ralf Zumbrunn ([email protected]) - 15322 on 30.07.2014 23:37:17
Please do not make illegal copies!
Backend, Website und App in einem Tag
Workshop 5 – Workshopleiter: Dr. Lutz Kohl / Philipp Michel
Am Beispiel eines Spiels wird im Rahmen des Workshops ein kompletter App/Website Entwicklungsprozess abgearbeitet. Nach einer Schilderung des Problems werden
Screens designt. Basierend auf den abzubildenden Daten wird ein objektorientiertes Datenmodell erstellt und unter Verwendung von Backend as a Service umgesetzt. Im Anschluss werden eine Android-App und eine Website (HTML und Javascript) erstellt, die
mittels SDKs auf die Daten des Backends zugreifen.
Enterprise-Webanwendungen mit Ext JS / EXT.NET
Workshop 6 – Workshopleiter: Johannes Hoppe
Lernen Sie im Workshop das universelle Framework Ext JS, den .NET Wrapper EXT.NET und die konsequente Umsetzung bekannter Patterns im Ext JS Core kennen. Sehen Sie, wie man mit über 100 Komponenten eine stringente Oberfläche gestalten kann. Im Detail werden die flexible Client-Server Kommunikation über „"Proxys"“ & „"Stores"“, die Möglichkeiten zum Theming und LayoutManagement sowie die Entwicklung eigener Plugins und Komponenten behandelt. Es wird ASP.NET MVC,
Razor und das Framework EXT.NET, welches Ext JS als Nuget-Paket zur Verfügung stellt, verwendet.
High performance websites
Workshop 7 – Workshopleiter: Stefan Priebsch / Arne Blankerts
Kurze Antwortzeiten sind im Web das Wichtigste. Aber was tun, wenn die Performance
nicht ausreicht? Mehr und leistungsfähige Hardware kaufen? In die Cloud migrieren?
Eine weitere Cache-Schicht einführen oder die Schuld auf die überforderte Datenbank
schieben? Es lohnt sich, zuerst die Software-Architektur anzusehen! Im Workshop lernen
die Teilnehmer, wie eine hoch-performante Software- und System-Architektur aussehen kann, mit der man vom einzelnen Server bis in die Cloud problemlos skalieren kann.
Introduction to Symfony2
Workshop 8 – Workshopleiter: Andreas Hucks
Die Teilnehmer lernen die Grundlagen von Symfony kennen, um in der Folge ihre ersten eigenen Anwendungen mit dem Framework entwickeln zu können. An einem Tag bieten wir einen Rundgang durch alle
gängigen Features, von der Installation und Konfiguration zur Abarbeitung eines Requests. Wir stellen
Routing und Templating vor und definieren erste eigene Formulare. Voraussetzungen: Dies ist ein Workshop für Einsteiger in Symfony. Es sind keine Vorkenntnisse im Framework selbst erforderlich. Allerdings sollten die Teilnehmer solide Grundkenntnisse im objektorientierten Arbeiten mit PHP mitbringen.
Effektive Kommunikation: Praxis-Workshop
Workshop 9 – Workshopleiterin: Solveig Grundler
„Warum versteht mich keiner?“ – „Warum hört mir keiner zu?“ – der Praxis-Workshop „Effektive Kommunikation“ geht diesen Fragen auf den Grund und beantwortet vor allem auch die dritte: „Wie kann ich
das ändern?“. Im Zentrum des interaktiv aufgebauten Workshops steht dabei nicht der reine Wissenstransfer zum Thema „Konfliktkompetenz“ sondern die Möglichkeit anhand alltagsbezogener Übungen
das Handwerkszeug konstruktiver Kommunikation auszuprobieren und zu üben.
Mobile D
MDC Confere
Web De
WDC Confere
Web De
WDC Confere
Web De
WDC Confere
.NET De
DDC Confere
Mobile
MDC Confere
Web De
WDC Confere
Sichern Sie sich Ihr Ticket online unter: developer-week.de
Unsere
Leser spare
Created for Ralf Zumbrunn ([email protected]) - 15322 on 30.07.2014 23:37:17
Please do not make illegal copies!
K
ombi-Ticket
DWX & Workshop
14.-17. Juli 2014
Ticketpreis 1.650,– € zzgl. MwSt.
n
2
-Tages-Ticket
€ 149,–
14. / 15.07.2014 od. 15. / 16.07.2014
Ticketpreis 750,– € zzgl. MwSt.
mit Code
DWX14dnp
(statt 899,– € zzgl. MwSt.)
(statt 1.799,– € zzgl. MwSt.)
3
-Tages-Ticket
1
-Tages-Ticket
W
orkshop-Ticket
14.-16. Juli 2014
Ticketpreis 1.150,– € zzgl. MwSt.
14.07.2014, 15.07.2014 od. 16.07.2014
Ticketpreis 550,– € zzgl. MwSt.
17.07.2014
Ticketpreis 550,– € zzgl. MwSt.
(statt 1.299,– € zzgl. MwSt.)
(statt 699,– € zzgl. MwSt.)
(statt 699,– € zzgl. MwSt.)
Die Referenten der Developer Week:
Aschoff, Martin, AGNITAS AG
Barthels, Rainer, NovaTec GmbH
Bakaus, Paul, Google Germany GmbH
Basler, Daniel, deltra Business Software GmbH & Co. KG
Bez, Roberto
Bild, Mike
Biswanger, Gregor, CleverSocial.de
Blankerts, Arne, The PHP Consulting Company
Blitz, Patrick, Weptun GmbH
Boehm, Urs, Noser Engineering AG
Börner, Tilman, Neue Mediengesellschaft Ulm mbH
Boscolo, Patric, Microsoft Deutschland GmbH
Bourguignon, Timothée, Mathema Software GmbH
Brauer, Piet, Xing AG
Bruhn, Peter, Deutsche Telekom AG
Dittmann, Sascha, Ernst & Young GmbH
Dobric, Damir, DAENET GmbH
Dohmen, Lucas, triAGENS GmbH
Eichenseer, Robert, Microsoft Deutschland GmbH
Esposito, Dino, JetBrains s.r.o
Fellien, Jan, devCrowd GmbH
Forkmann, Steffen, msu solutions GmbH
Foukis, Ilias, AutoScout24 GmbH
Freese, Tammo, FlockOfBirds UG
(haftungsbeschränkt)
Friberg, Philipp, itelligence Schweiz AG
Friedrich, Ulrike, SOPHIST GmbH
Friese, Peter, Google UK
Frieser, Uwe, adorsys GmbH & Co. KG
Garbe, Philipp, AutoScout24 GmbH
Götz, Christian, dc-square GmbH
Graegert, Steve, Ciber AG
Gralak, Michal, schöngeist UG (haftungsbeschränkt)
Gronbach, Thomas, Keynote Europe Ltd.
Grundler, Solveig, mediation-moderation.de
Güngören, Onur, schöngeist UG (haftungsbeschränkt)
Günther, Sven, It-agile GmbH Hamburg
Gutsch, Jürgen, YooApplications AG
Haberkern, Timo, Kaufland Informationssysteme GmbH & KG.
Hanna, Tam, Tamoggemon Holding k.s.
Hans, Thorsten, ExpertsInside GmbH,
Harrer, Sonja, Weptun GmbH
Hartmann, Johann-Peter, Mayflower GmbH
Haug, Thomas, Mathema Software GmbH
Hauser, Tobias, Arrabiata Solutions GmbH
Havenstein, Andreas, It-agile GmbH Hamburg
Hecker, Peter, GFU Cyrus AG
Heinrich, Lars, Heinrich & Reuter Solutions GmbH
Heiss, Dr. Christian, Performance Entwicklung
Hörger, Reiner, Pentalog Deutschland GmbH
Hopf, Florian
Hoppe, Johannes, HAUS HOPPE - IST
Hucks, Andreas, SensioLabs Deutschland
Israel, Denny, Saxonia Systems AG
Jacob, Christian, TOP TECHNOLOGIES
CONSULTING GmbH
Jacob, Marcus, TOP TECHNOLOGIES
CONSULTING GmbH
Jander, Philip, Jander IT
Jungowski, Dominik, inovex GmbH
Kaspari, Sebastian, Quartett mobile GmbH
Kawalerowicz, Marcin, CODEFUSION Sp. z o.o.
Keil, Werner, Creative Arts & Technologies
Keller, Alexander, Centigrade GmbH
Ketterl, Jakob
Kirchner, Peter, Microsoft Deutschland GmbH
Klawonn, Marco, Portaltech Reply GmbH
Klein, Constantin, Freudenberg Forschungsdienste SE & Co. KG
Klewes, Christopher, QuinScape GmbH
Klose, Olivia, Microsoft Deutschland GmbH
Köbler, Niko, Niko Köbler IT-Beratung
Kohl, Dr. Lutz, Apinauten GmbH
König, Carsten, Wiegand-Glas GmbH
Kraehe, Thomas, Arrabiata Solutions GmbH
Kröner, Peter, Brainfire Design
Lanninger, André, Ergosign GmbH
Lang, Christian, 6 Wunderkinder GmbH
Leidgens, Janusz, Kupferwerk GmbH |
community experts
Lobacher, Patrick, lobacher.de
Loje, Neno, Ingo Rammer und Christian Weyer GBR
Lösch, Hendrik, Saxonia Systems AG
Lothrop, Kerry W., Zühlke Engineering GmbH
Marquardt, Bernd, www.IT-Visions.de
Mayer, Bernd, Microsoft Deutschland GmbH
McClure, Matthew George, Brightcove Inc.
Meder, Jens
Meier, André
Meixner, Daniel, Microsoft Deutschland GmbH
Mentzel, Thomas, CGI (Germany) GmbH & Co. KG
Messerschmidt, Tim, PayPal (Europe) S.à r.l.
et Cie, S.C.A.
Michel, Philipp, Apinauten GmbH
Mühsig, Robert, OneOffixx AG
Neff, Otto, NovaTec GmbH
Nolting, Dr. Michael, Toughenough
Orschel, Nico, AIT GmbH & Co. KG
Otto, Hans-Christian, crosscan GmbH
Parys, Dariusz, Microsoft Deutschland GmbH
Pichler, Bernhard, Informare Consulting GmbH
Pöcher, Christian, QuinScape GmbH
Priebsch, Stefan, The PHP Consulting Company
Radke, Matthis, ma design GmbH & Co. KG
Reitzammer, Benjamin, Vaamo Finanz AG
Reuter-Heinrich, Peggy, Heinrich & Reuter
Solutions GmbH
Richardson, Marco, conplement AG
Richling, Tobias, meta-objects.NET IT Solutions GmbH
Rieger, Robert, GfK Retail & Technology GmbH
Ringler, Christian, GfK Retail & Technology GmbH
Roden, Golo, the native web UG (haftungsbeschränkt)
Rölz, Sebastian, conplement AG
Rümmler, Thomas, AIT GmbH & Co. KG
Rupp, Chris, SOPHIST GmbH
Ruprecht, Martin, Mayflower GmbH
Sandtner, Carsten, Mediaman GmbH
Schissler, Thomas, artiso AG
Schlag, Christian, AIT GmbH & Co. KG
Schneller, Daniel, CenterDevice GmbH
Schüller, Julia, Triumph International AG
Schulz, Marius, 69 Grad GmbH
Schulze, Felix, AutoScout24 GmbH
Schweda, Jan, conplement AG
Seidel, Sebastian, Cayas Software
Seiffert, Paul, SensioLabs Deutschland GmbH
Seitz, Johannes, Vaamo Finanz AG
Shishkin, Sergey, shishkin.org
Spindler, Heiko
Springer, Sebastian, Mayflower GmbH
Stark, Thorsten, Beuth Hochschule für Technik Berlin
Stechl, Marco, Autoscout24 GmbH
Süselbeck, Richard, Deutsche Telekom AG
Tews, Alexander, Ciber AG
Thelen, Christoph, Technische Hochschule
Mittelhessen
Thömmes, David C., Ergosign GmbH
Tielke, David, david-tielke.de
Tilkov, Sebastian, innoQ Deutschland GmbH
Toth, Jürgen, Novartis Pharma AG
Trappe, Udo, oput GmbH
Traub, Dennis, Holisticon AG
van den Ouweland, Loek, 6 Wunderkinder GmbH
Virkus, Robert, Enough Software GmbH & Co.KG
Volke, Claus, volke2.0 – Intellectual Property and
Information Technology
Walter, Martin, Deutsche Welle
Weber, Johannes, Mayflower GmbH
Wehrle, Boris, AIT GmbH & Co. KG
Wessel, Ivo, iCodeCompany
Westphal, Ralf, One Man Think Tank
Wiedeking, Michael, MATHEMA Software GmbH
Wieschollek, Martin, QuinScape GmbH
Wille, Christoph
Wilk, Thomas, Saxonia Systems AG
Witkowski, Alexander, Heinrich & Reuter
Solutions GmbH
Wolfermann, Sven, maddesigns
Wondratschek, Ralf, adorsys GmbH & Co. KG
Worm, Thomas, DATEV eG
Zhou, Marc André, dev-sky.net
Zimmermann, Torsten
Zörner, Stefan, embarc Software Consulting GmbH
Kooperationspartner (Stand: 28.03.2014):
Veranstalter:
Backend
Created for Ralf Zumbrunn ([email protected]) - 15322 on 30.07.2014 23:37:17
Please do not make illegal copies!
[Abb. 4] Durchsatz eines SQL
Servers unter Einsatz von
In-Memory OLTP.
wird in einem Hash Bucket mehr als ein
Datensatz abgespeichert. Intern wird hier
eine entsprechende Linked List angelegt.
Da In-Memory OLTP auf MVCC basiert,
müssen Sie auch berücksichtigen, dass
bei Datensatzänderungen neue Versionen
ebenfalls im gleichen Hash Bucket abgelegt werden.
Hash Collisions sind extrem teuer hinsichtlich der benötigten CPU-Instructions.
Und mit In-Memory OLTP sollen ja CPUInstructions eingespart werden. Daraus
folgt, dass Hash Collisions so weit wie
möglich in einem Hash-Index vermieden
werden. Aus diesem Grund ist es auch
sehr wichtig, sich genaue Gedanken über
den Bucket Count eines Hash-Index zu
machen. Als Empfehlung sollten Sie hier
mindestens die Anzahl der eindeutigen
Werte in der Schlüsselspalte des HashIndex wählen – lieber einige Buckets mehr
als zu wenig.
Wählen Sie allerdings zu viele Hash Buckets, verschenken Sie wiederum kostbaren Hauptspeicher. Wie teuer Hash Colli­
sions wirklich sind, können Sie [6] entnehmen. Weiterführende Informationen zu
Hash-Indizes finden Sie auch in [7].
Eine detaillierte Beschreibung von BwTrees, die von Range-Indizes im SQL Server
2014 verwendet werden, würde den Rahmen dieses Artikels sprengen. Daher verweise ich Sie hier auf ein entsprechendes
Whitepaper von Microsoft Research [8].
Einsatzmöglichkeiten
Bevor Sie nun anfangen, Ihre kompletten
Datenbanken auf In-Memory OLTP umzustellen, möchte ich Ihnen zum Schluss
noch einige Tipps mitgeben, in welchen
Szenarien In-Memory OLTP überhaupt
sinnvoll ist. Die wichtigste Empfehlung ist,
dass niemals eine komplette Datenbank
umgestellt werden sollte! Sie müssen sich
nämlich auf die Datenbanktabellen und
Stored Procedures konzentrieren, bei denen Sie spezifische Probleme haben, die
sich mit klassischen Bordmitteln des SQL
Servers nicht lösen lassen.
Was sind aber solche spezifischen Probleme? Wenn Sie Schwierigkeiten mit
langsamen Storage-Subsystemen haben
oder mit Ihrer Indizierungsstrategie, wenn
Blockaden aufgrund von Locking und Blocking in Ihrer Datenbank auftreten, dann
sollten Sie zunächst diese Probleme lösen.
In-Memory OLTP setzt erst danach an,
wenn Sie all dies bereits gelöst haben. Ein
klassisches Problem, das zum Beispiel
In-Memory OLTP adressiert, ist die sogenannte „Last Page Insert Latch Contention“ – sie kann in einem Clustered Index
auftreten, wenn Sie einen fortlaufenden
Clustered Key wie etwa eine INT IDENTITY verwenden. Einfüge-Operationen
finden hier immer nur am Ende des Clustered Index statt, wodurch im Hauptspeicher durch das Latching ein Hotspot entsteht (Abbildung 3).
Ein solches Problem lässt sich klassisch mit einem Random Clustered Key
entschärfen, weil dadurch die EinfügeOperationen im Clustered Index verteilt
werden. Alternativ lässt sich hier auch
In-Memory OLTP einsetzen, weil dadurch
ebenfalls kein Latching im Hauptspeicher
mehr durchgeführt werden muss.
Interessant kann der Einsatz von InMemory OLTP auch für Staging-Tabellen
beim Beladen eines Data Warehouse sein:
Hier lässt sich ebenfalls das Schreiben des
Transaktionslogs unterdrücken, da Sie im
Fehlerfall den ETL-Prozess einfach nochmals starten können und somit keine Daten verlieren.
Der Einsatz von Native Compiled
Stored Procedures ist aus meiner Sicht
schon etwas kontroverser. Durch diese
lässt sich die Anzahl der benötigten CPUInstructions minimieren, wodurch Sie die
verfügbaren CPU-Zyklen ebenfalls effektiver ausnutzen können.
Nur müssen Sie bedenken, dass der
SQL Server eine Datenbank ist und kein
Application Server. Wenn Sie hier die Lizenzierungskosten betrachten, kann es
durchaus Sinn machen, CPU-intensive
Businesslogik, die in Stored Procedures
implementiert ist, nicht im SQL Server
auszuführen, sondern auf einem Application Server. Den SQL Server müssen Sie
auf CPU-Core-Ebene lizenzieren, für einen Application Server benötigen Sie nur
eine Windows-Betriebssystem-Lizenz.
Eine Migration auf In-Memory OLTP
ist daher nicht immer die erste Wahl und
muss sorgfältig überlegt und evaluiert werden. Und natürlich ist In-Memory OLTP
auch nur Bestandteil der Enterprise Edition vom SQL Server 2014.
Abschließend zeigt Abbildung 4 den
Durchsatz, den ein SQL Server mit In-Memory OLTP erreichen kann. Diese Performance-Tests wurden auf einer 32-Core-Maschine mit 256 GByte RAM durchgeführt.
Fazit
Eingangs haben Sie gesehen, welche Probleme bei relationalen Datenbanken aufgrund spezifischer Hardware-Eigenschaften auftreten können.
Im SQL Server 2014 sollen durch InMemory OLTP diese Probleme umgangen
und vermieden werden. Die drei wichtigsten Säulen sind Memory Optimized Tables,
Native Compiled Stored Procedures und
Lock/Latch Free Data Structures.
Ich hoffe, dass Sie in puncto In-Memory
OLTP auf den Geschmack gekommen sind.
In der nächsten Ausgabe der dotnetpro
werden wir uns einem Thema widmen,
das ebenfalls neu im SQL Server 2014 ist:
Clustered-ColumnStore-Indizes.
[sb]
[1] H
erb Sutter, The Free Lunch Is Over: A Fundamental Turn Toward Concurrency in Software,
www.dotnetpro.de/SL1405SQLServer20141
[2] C
ristian Diaconu u. a., Hekaton: SQL Server’s
Memory-Optimized OLTP Engine,
www.dotnetpro.de/SL1405SQLServer20142
[3] M
SDN Blogs, SQL Server 2014: Inside Hekaton
Natively Compiled Stored Procedures,
www.dotnetpro.de/SL1405SQLServer20143
[4] Wikipedia, Non-blocking algorithm,
www.dotnetpro.de/SL1405SQLServer20144
[5] Wikipedia, Compare-and-swap,
www.dotnetpro.de/SL1405SQLServer20145
[6] K laus Aschenbrenner, Choose your Hash
Bucket Count very wisely in Hekaton!,
www.dotnetpro.de/SL1405SQLServer20146
[7] K laus Aschenbrenner, SQL Server Quickie #8 –
Hash Indexes,
www.dotnetpro.de/SL1405SQLServer20147
[8] J. Levandoski, D. Lomet, S. Sengupta, The BwTree: A B-tree for New Hardware Platforms,
www.dotnetpro.de/SL1405SQLServer20148
www.dotnetpro.de 5.201475
Herunterladen