Hier geben wir Einblicke in das Unternehmen, Gedanken, How-Tos, Wissenswertes und News, die sich aus der Programmierung und Projekten ergeben. Auch unsere Open Source Aktivitäten begleiten wir hier.

Corporate Blog der prooph software GmbH

ArangoDB PHP Extension Hackday zum Jahresabschluss

ArangoDB PHP Extension

Eine Multi-model NoSql Datenbank, die in einem Multi Master Cluster betrieben werden kann, klingt nach einer guten Basis für einen Event Store — dachte sich unser Docker und PHP Experte Sandro Keil und begann kurzerhand mit der Entwicklung eines ArangoDB Event Store für die prooph components. ArangoDB lässt sich über eine REST API ansteuern, allerdings war Sandro mit der Performance nicht zufrieden. Eine PHP Extension, über die sich der native C++ ArangoDB Driver verwenden lässt, verspricht deutlich bessere Schreib- und Lesegeschwindigkeit. Challenge accepted!

Multi-model Datenbank ArangoDB

ArangoDB Features

ArangoDB ist Document-, Key/Value- und Graph-Datenbank in einem Produkt. Der Vorteil dieser Kombination ist, dass verschiedene Bereiche einer Anwendung dieselbe Datenbank unterschiedlich nutzen können, optmiert für den jeweiligen Anwendungsfall. Für Softwareentwickler bietet ArangoDB viel Flexibilität, kombiniert mit leichter Handhabung. Eine einheitliche SQL-ähnliche Abfragesprache wird sowohl für den Zugriff auf Graph-Daten wie auch auf Dokumente und Key/Value-Paare angeboten. Ein in die Datenbank integriertes JavaScript Microservices Framework namens Foxx bietet zudem die Möglichkeit REST APIs oder einen GraphQL Server direkt mit ArangoDB zu betreiben.

Für den Einsatz als Event Store bietet ArangoDB ebenfalls die nötige Funktionalität. Ein Event Store muss in der Lage sein mehrere Messages (Events) in einer Transaktion zu speichern. Die Events werden chronologisch abgelegt und der Lesezugriff muss eine schnelle Filterung und einen zeitlich geordneten Abruf der Events ermöglichen.

ArangoDB PHP Extension

Die erste Version des prooph ArangoDB Event Store nutzt die ArangoDB REST API zum Schreiben und Lesen von Events. Damit können alle nötigen Funktionen eines prooph Event Store abgedeckt werden, allerdings haben Performance-Tests gezeigt, dass die Kommunikation zwischen PHP und ArangoDB langsamer ist als zwischen PHP und der relationalen Datenbank PostgreSQL. PHP und PostgreSQL kommunizieren im Normalfall über die PHP Standard-Datenbank-Schnitstelle PDO miteinander, die als PHP Extension eingebunden wird.

Sandro war mit dem Performance-Unterschied nicht zufrieden. Direkte Datenbank-Benchmarks zwischen ArangoDB und PostgreSQL zeigen eine im Vergleich deutlich besserere ArangoDB Performance. Sandros Vermutung war, dass das TCP Protokoll, welches für die Kommunikation via REST API verwendet wird, den Flaschenhals darstellt. Mithilfe einer ArangoDB PHP Extension soll direkt der ArangoDB C++ Driver fuerte und darüber das kompakte Kommunikationsprotokoll velocystream verwendet werden. Da eine PHP Extension in C oder C++ geschrieben wird, bieten sich weitere Optionen zur Optimierung an, um an die Performance von PostgreSQL heranzukommen oder diese sogar zu übertreffen. Unterstützung bekommt Sandro bei seinem Projekt von Martin Schilling, einem talentierten PHP und C++ Softwareentwickler unseres Partners Insecia.

Ein Open Source Hackday zum Jahresabschluss

Das Open Source Projekt von Sandro und Martin bot eine sehr schöne Vorlage, um gemeinsam mit der Insecia GmbH das Jahr ausklingen zu lassen. Am 20.12.2017 trafen wir uns zum Hackday, bei dem die ArangoDB PHP Extension im Vordergrund stand. Wie es sich für einen Hackday gehört gab es Freigetränke und Pizza und vor allem viel Zeit zum Austausch von Ideen.

PHP-CPP, Zephir oder Zend Engine

Begonnen haben wir den PHP Extension Hackday mit einer Bestandsaufnahme. Sandro und Martin haben in den letzten Wochen eine erste Version der ArangoDB PHP Extension entwickelt. Eine große Hilfe dabei war die C++ Library PHP-CPP, mit der sich PHP Extensions in C++ entwickeln lassen. PHP-CPP bietet zwei Vorteile gegenüber der Entwicklung einer Extension direkt in C (die Programmiersprache in der PHP selbst geschrieben ist). Erstens stellt PHP-CPP eine Abstraktionsschicht bereit, die den Einstieg in die PHP Extension Entwicklung deutlich erleichtert und zweitens können weitere C++ Libraries über PHP-CPP eingebunden werden. Damit bieten sich praktisch unbegrenzte Möglichkeiten, denn C++ ist eine der vielfältigsten und schnellsten Programmiersprachen überhaupt. PHP ist im Gegensatz dazu bewusst einfach gehalten. Vielfalt und Performance haben ihren Preis und der ist Komplexität. Eine C++ PHP Extension verbindet das Beste aus beiden Welten. Die Anwendungsentwicklung erfolgt in PHP und wird ein spezieller Driver oder mehr Performance benötigt, kommt eine PHP Extension und damit eine C oder C++ Implementierung zum Einsatz.

prooph event store benchmark

Das erklärte Ziel für die ArangoDB PHP Extension ist eine bessere Performance. Mit der PHP-CPP Variante sind Sandro und Martin diesem Ziel schon deutlich näher gekommen. Für die Poleposition im prooph Event Store Benchmark reicht es allerdings noch nicht. Martin sieht als Grund dafür die Abstraktionsschicht von PHP-CPP, die zwar den Einstieg und die Entwicklung einer PHP Extension erleichtert, aber eben auch ein zusätzlicher Layer ist, durch den die Daten bei der Übertragung zwischen PHP und ArangoDB durch müssen.

Durch ein gemeinsames Brainstorming haben wir den weiteren Kurs für die Entwicklung der ArangoDB PHP Extension bestimmt. Im Visier standen dabei Alternativen zu PHP-CPP von denen wir zwei Kandidaten genauer betrachtet haben. Zephir ist eine kompilierte Programmiersprache, mit der PHP Extensions entwickelt werden können. Für PHP Programmierer ist Zephir gut geeignet, weil die Syntax an PHP angelehnt ist. Der Nachteil von Zephir gegenüber PHP-CPP ist die eingeschränkte Nutzung von Libraries. Eine C++ Library wie der ArangoDB Driver fuerte kann mit Zephir nicht so ohne weiteres genutzt werden, da Zephir eine eigene Programmiersprache mit eigenem Compiler ist und nicht auf C++ aufbaut. Für unsere Extension überwog dieser Nachteil also betrachteten wir auch die Option, die PHP Extension direkt mit der Zend Engine zu entwickeln.

Die Zend Engine ist eine virtuelle Maschine, die den PHP Sourcecode (bzw. die Bytecode Representation) ausführt und seit PHP 4 das Herzstück fast jeder PHP Installation ist. Das macht die Zend Engine in puncto Performance zum Topkandidaten für die ArangoDB PHP Extension. Größtes Manko ist allerdings der erhöhte Schwierigkeitsgrad. Gegenüber PHP-CPP und Zephir ist die Einarbeitungszeit deutlich länger und die Entwicklung aufwendiger. Als Dokumentation dient das PHP Internals Book, dessen Beispiele teilweise veraltet und mit dem aktuellen PHP 7 nicht mehr kompatibel sind. Trotz dieser Widrigkeiten waren wir uns einig. Die nächste Version der ArangoDB PHP Extension muss direkt mit der Zend Engine umgesetzt werden. Nur so können wir maximale Performance sicherstellen. Ein weiterer Vorteil ist die Unabhängigkeit gegenüber third-party Libraries. PHP-CPP ist zum Beispiel aktuell nur kompatibel mit PHP 7.1, nicht aber mit der neuesten Version PHP 7.2. Setzen wir direkt auf die Zend Engine, sind wir nicht durch externe Abhängigkeiten blockiert.

#XMASMEETUP mit Lightning Talks und Glühwein

Der perfekte Abschluss für unseren Hackday bot sich beim Besuch des #XMASMEETUP in Berlin, ein gemeinsames Event der PHP und Symfony User Group Berlin sowie CODING BERLIN und Mayflower Meetup. Die Location stellte Turbine Kreuzberg und auf dem Programm standen Lightning Talks, Socializing und Glühwein. Kurzerhand entschlossen sich Sandro und Martin einen eigenen Lightning Talk über die ArangoDB PHP Extension zu halten. In einem 15 Minuten Slot stellten sie ihr Projekt dem interessierten Publikum vor, wodurch sich zwischen und nach den Talks tolle Gespräche ergaben. Genau die richtige Mischung für einen entspannten Abend, bevor alle in die Weihnachtsfeiertage und den verdienten Urlaub zum Jahreswechsel starten.

ArangoDB bietet mit Document-, Key/Value- und Graph-Datenbank in einem Produkt für jeden Datenzugriff die passende Abfragemöglichkeit. Die prooph software Gmbh steht beratend zur Seite und unterstützt Sie bei der Einrichtung und dem Betrieb von ArangoDB als Event Store und Multi-model Datenbank.

Sie suchen einen NoSQL Spezialisten für Ihr Projekt: Anfrage stellen

Blog Artikel mit ähnlichen Themen