-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path4.8.3.tex
20 lines (19 loc) · 2.93 KB
/
4.8.3.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
\subsection{Umsetzung in FOXX}
\lstsetjavascript
\subsubsection{Datenbankzugriff}
FOXX ist ein Framework, welches von ArangoDB angebot wird. Es dient dazu Microservices direkt in der Datenbank zu implementieren. Daher sind die Datenzugriffe sehr Nahe an der Datenbank und besonders performant. Um Beispielsweise auf die Auto-Datenbankcollection zuzugreifen, schreibt man bei FOXX folgenden Code:
\lstinputlisting[linerange={5-5}, caption=Datenbankzugriff - FOXX, label=Datenbankzugriff - FOXX]{./src/index.js}
Diese Collection wird in den folgenden Szenarien gebraucht, um Abfragen zu tätigen.
\subsubsection{Schnittstelle nach Außen}
Als Microservice bietet FOXX eine HTTP-Schnittstelle, um den Zugriff von anderen Systemen zu ermöglichen. Diese Schnittstelle wurde von dem ArangoDB-Team bereitgestellt und wird in JavaScript implementiert. Es können zwar NodeJS Pakete benutzt werden, aber es werden nicht alle unterstützt, da zum Beispiel der Zugriff aufs Dateisystem verweigert wird.
\subsubsection{Anwendungsszenario 1}
Für Szenario 1 wird im FOXX-Framework ein Request angeboten. Um aus dem URI-Parameter \texttt{:color} ein Array von Autos zu bekommen, bietet FOXX die Möglichkeit einen Templatestring \texttt{query``} zu bauen. In diesem String wird die \ac{AQL} platziert. Das Ergebnis des String muss am Ende durch \texttt{.toArray()} formatiert werden. Bei jedem Szenario wird die Zeit gemessen, wie lange die Datenabfrage an der Datenbank gebraucht hat. Abschließend wird ein Response an den Anfragenden mit \texttt{res.json()} als \ac{JSON} zurückgegeben.
\lstinputlisting[linerange={15-30}, numbers=left, caption=Szenario 1 - FOXX, label=Szenario 1 - FOXX]{./src/index.js}
\subsubsection{Anwendungsszenario 2}
Um den Key-Value-Store von ArangoDB zu testen, wurde in FOXX zwei verschiedene Abfragemethoden von einzelnen Autos getestet. Im ersten Teil (Zeile 5-11) wird eine Abfrage auf das Dokumentenmodell mit \ac{AQL}gemacht. Im zweiten Teil (Zeile 13-15) wird die Key-Value-Funktionalität von ArangoDB benutzt.
Mit \texttt{carsCollection.document(id)} wird ein einzelnes Dokument direkt abgefragt. Die Zeitmessungen haben ergeben, dass Variante zwei doppelt so schnell ist wie Variante eins.
\lstinputlisting[linerange={32-60}, numbers=left, caption=Szenario 2 - FOXX, label=Szenario 2 - FOXX]{./src/index.js}
\subsubsection{Anwendungsszenario 3}
Im dritten Szenario wird benutzt FOXX wieder den \texttt{query} Templatestring um eine komplexere Abfrage auszuführen. Hierbei werden zunächst alle IDs der Autos mit einem gewissen Modell herausgesucht (Zeile 7-11). Diese IDs werden anschließend genutzt, um in den Events nach den "getroffenen" Autos zu suchen. Abschließend werden die gefundenen Autos nach ihrem Modell gruppiert und gezählt (Zeile 16). Alles wird als \ac{JSON} mit der Zeitmessung an den Anfragenden zurückgegeben.
\lstsetjavascript
\lstinputlisting[linerange={62-87}, numbers=left, caption=Szenario 3 - FOXX, label=Szenario 3 - FOXX]{./src/index.js}