eBizTalk - Berichten, Unterhalten, Weiterbilden
Ob Branchendiskurs, Fachartikel oder ein Blick hinter die Unternehmenskulissen: eBizTalk ist die Plattform, die uns auffordert, unsere Leser über Events und Projekte auf dem Laufenden zu halten. Und uns gegenseitig natürlich auch.

Content Management @eBiz

Veröffentlicht am 19.01.2018 von Alexander Müller , Insights@ebizcon , Custom Development

Etwas mehr als zwei Jahre ist der Relaunch unserer Unternehmens-Website nun her. Zunächst als moderne Seite mit weitgehend statischem Inhalt konzipiert, veränderten sich über die Zeit die fachlichen Anforderungen an die Website. Das eBiz-Team wuchs, neue Projektreferenzen kamen hinzu und die Stellenausschreibungen wandelten sich. Ohne ein geeignetes Tool wurde die Datenpflege zum Zeitfresser neben dem Projektalltag. Wie jeder eBiz-Mitarbeiter erhielt ich in meiner Einarbeitungsphase ein internes Projekt, in meinem Fall war es die Entwicklung eines rudimentären Content-Management-Systems (CMS) für die eBiz-Website

Warum ein eigenes CMS?

Zu Beginn des Projekts entschieden wir uns gegen die Verwendung eines out-of-the-box Alleskönner-CMS und für die Entwicklung eines eigenen, auf unsere Bedürfnisse zugeschnittenes CMS. Zum einen weil Flexibilität im Funktionsumfang und ein leichtgewichtiges Tooling für uns im Fokus standen zum anderen, weil bei uns die Weiterbildung der Mitarbeiter in den unterschiedlichen Technologien und in der agilen Softwareentwicklung ebenso eine Triebfeder für solche internen Projekte sind.

Agil - Muss das sein?!

Als mir mitgeteilt wurde, dass wir in diesem Projekt SCRUM als Vorgehensmodell einsetzen, war ich zunächst skeptisch. Schließlich waren die ersten Anforderungen überschaubar und das Entwicklungsteam bestand nur aus einer Person, nämlich mir selbst. Das kam mir für ein solch kleines Projekt zunächst sehr aufgebläht vor. Im Nachhinein betrachtet, war es für ein Lernprojekt dieser Art genau das Richtige für mich. Zwei Kollegen trieben in den Rollen Scrum Master und Product Owner das Projekt voran. Das Product Backlog füllte sich, die Definition of Done wurde festgehalten, der Sprint wurde geplant (der Scrum Master wurde hier für Schätzungen auch schon mal zum Teil des Entwicklungsteams), User Stories mit Hilfe von Akzeptanzkriterien wurden abgenommen und Sprint Reviews abgehalten. Dies alles mit richten Mischung aus Lockerheit und der notwendigen Professionalität.

Was habe ich gelernt?

Was die agile Projektdurchführung angeht, musste ich feststellen, dass ich, trotz meiner anfänglichen Zweifel, auch im kleinen Stil ein gutes Verständnis für das agile Vorgehensmodel erlangen konnte. Zwar war mir die Theorie im Vorhinein bekannt, doch in der Praxis werden viele Dinge viel klarer und die Sinnhaftigkeit bewusster.

Technologisch gesehen, arbeitete ich mit alten Bekannten, wie ASP.NET MVC, Entity Framework, jQuery und Bootstrap, aber auch mit mir neuen Technologien und Services, wie Azure SQL, Azure BLOB Storage, Azure AD-Authentifizierung und Azure App Services. Zusätzlich konnte ich mich auch mit dem Thema Continuous Deployment in den Visual Studio Team Services (VSTS) auseinandersetzen. So etablierte ich für die automatisierten Deployments in unsere Test- und Live-Umgebungen einen automatisierten Build-, Release- und Genehmigungsprozess.

Fazit

Insgesamt hat das Projekt sehr viel Spaß gemacht und den gewünschten Lerneffekt gebracht. Nebenbei ist auch noch ein kleines CMS entstanden, mit dem wir nun neue Seiten anlegen und Inhalte pflegen können. Und so sieht das dann aus:

Admintool-Screenshot

google_about_ebiz fb_about_ebiztwitter_about_ebizxing_about_ebiz
ebiz_consulting_expertise

SQL Server 2016 - Improvements: Temporale Tabellen

Veröffentlicht am 04.08.2017 von Ireen Raue , SQL Server , Custom Development , Data

Am 06.12.2017 und 07.12.2017 fand in Darmstadt die TechSummit von Microsoft statt. Wie auch letztes Jahr, waren wir wieder mit einigen Kollegen vor Ort. In diesem Jahr gab es allerdings im Gegensatz zum letzten Jahr deutlich weniger SQL Server Sessions. Eine davon beschäftigte sich mit den temporalen Tabellen, ein neues Feature des SQL Server 2016, das ich bereits kurz bei den SQL Days in Leipzig kennengelernt habe.

Temporale Tabellen

Es handelt sich dabei um eine aus meiner Sicht sehr nützliche Erweiterung des SQL Server 2016. Hiermit ist ohne größeren Aufwand eine Versionierung und Historisierung der Daten möglich.

clip_image002[7]

Code Snippet

ALTER TABLE dbo.Orders

ADD SysStartTime datetime2 GENERATED ALWAYS AS ROW START

CONSTRAINT P_ValidFromConstraint DEFAULT SYSUTCDATETIME() NOT NULL,

       SysEndTime datetime2 GENERATED ALWAYS AS ROW END

CONSTRAINT P_ValidToConstraint DEFAULT CONVERT (DATETIME2, '9999-12-31 23:59:59.9999999') NOT NULL,

PERIOD FOR SYSTEM_TIME (SysStartTime, SysEndTime)

GO

ALTER TABLE dbo.Orders

SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.Orders_History))

GO


Der Tabelle wird ein Start- und Enddatum hinzugefügt und die System-Versionierung muss eingeschaltet werden. Danach wird automatisch bei jeder Änderung ein Historiendatensatz anlegt.

Ein großer Vorteil ist hier auch, dass man über die Originaltabelle Abfrage des Datenstandes zu einem bestimmten Zeitpunkt machen kann, ohne selbst die History-Tabelle zu durchsuchen.


Code Snippet

SELECT * FROM dbo.Orders FOR SYSTEM_TIME AS OF '2016-10-27 15:47:00.3823880'

WHERE orderID = 10248


Allerdings sollte man hier immer ein Auge auf die Datenmenge haben, da diese Art der Versionierung bei häufigen Änderungen der Daten und evtl. auch noch sehr großen Datenmengen je Datenzeile sehr viel Platz benötigt.

Einige Einschränkungen:

Trigger

In die Historie Tabelle kommt das rein, was geändert wurde. Das bedeutet Datenmanipulationen innerhalb des Trigger Aufrufs werden in der Historie Tabelle nicht wiedergespiegelt.

Schemaänderungen

Solange keine Historie Eintrage gemacht wurden, ist das Löschen, Hinzufügen oder Ändern von Spalten uneingeschränkt möglich. Sobald Daten vorhanden sind, funktioniert nur noch das Löschen einer Spalte. Dabei wird die Spalte nicht nur aus der Originaltabelle, sondern auch aus der Historie Tabelle mit allen Daten entfernt.

Index

Um eine Indexierung der Historie Tabelle muss und sollte man sich dann auch selbst kümmern.

CREATE CLUSTERED COLUMNSTORE INDEX IX_OrdersHistory
ON dbo.OrdersHistory
WITH (DROP_EXISTING = ON);

Wer schon mal selbst eine Historisierung bauen musste, weiß sicher genau, wie aufwendig sowas werden kann. Deshalb halte ich diese Erweiterung des SQL Server 2016 für eine der Nützlichsten. Solange man den Plattenplatz im Auge behält oder am Anfang entsprechend mit plant, kann man mit den temporalen Tabellen eine ganze Menge Entwicklungszeit einsparen.

google_about_ebiz fb_about_ebiztwitter_about_ebizxing_about_ebiz
ebiz_consulting_expertise

SQL Server 2016 - Improvements: InMemory

Veröffentlicht am 01.05.2017 von Ireen Raue , SQL Server , Custom Development , Data

Seit Juni 2016 steht der SQL Server 2016 zur Verfügung und bringt eine Unmenge an Weiterentwicklungen und Verbesserungen mit sich.

Einen ersten groben Überblick dazu habe ich bei den ‚SQL TechnologieDay SQL Server 2016‘ der ppedv in Leipzig bekommen. Dort wurde sehr kompakt auf die Neuerungen eingegangen. Manche dieser Neuerungen sind sehr interessant und spannend, weshalb ich mich damit etwas intensiver beschäftigt habe.

Sehr viele Verbesserungen gab es vor allem im InMemory-Bereich. Da ich mich aktuell für den SQL Server 2014 mit diesem Thema beschäftige, war das eine der für mich sehr interessanten Neuerungen.

InMemory-Erweiterung

Die erste inMemory-Technologie wurde mit dem SQL Server 2012 mit dem ColumnStore Index eingefügt und von Version zu Version stetig erweitert.

image

Auch die Analyse bestehender Projekte auf Migrationsmöglichkeiten hat sich deutlich vereinfacht. Wo beim SQL Server 2014 noch über ein Data Warehouse und DataCollector eine Datenbasis zum Auswerten aufgebaut werden muss, kann der ARM-Report beim SQL Server2016 direkt auf den Produktivdaten ausgeführt werden. So ist ohne größeren Aufwand eine Analyse möglich.

image

Durch die Aufhebung vieler Einschränkungen bei der Migration zu InMemory-Tabellen oder nativly compiled Procedures wird es mit dem SQL 2016 auch deutlich einfach für bestehende Projekte diese Technologie einzusetzen.

google_about_ebiz fb_about_ebiztwitter_about_ebizxing_about_ebiz
ebiz_consulting_expertise