wording
This commit is contained in:
parent
fc5911df8c
commit
16b10d9f87
@ -128,7 +128,7 @@ abgefragt werden. Hier ist ein CLI-API-Aufruf pro Eintrag erforderlich. Sind ein
|
|||||||
mit einer bestimmten originalen ID im Durchschnitt $n=30; \frac{n}{2} = 15$ Sekunden. Im langsamsten Fall wären es $n=30$ Sekunden.
|
mit einer bestimmten originalen ID im Durchschnitt $n=30; \frac{n}{2} = 15$ Sekunden. Im langsamsten Fall wären es $n=30$ Sekunden.
|
||||||
Ein Kopierforgang stellt zwei Aufrufe dar (=\textit{lesen,erstellen}), also dauert das Kopieren von 30 Einträgen $n=30; 2n = 60$ Sekunden.
|
Ein Kopierforgang stellt zwei Aufrufe dar (=\textit{lesen,erstellen}), also dauert das Kopieren von 30 Einträgen $n=30; 2n = 60$ Sekunden.
|
||||||
Das \ac{1P}-CLI kann zwar für Detail-Aufrufe mehrere Eintrags-IDs auf Standard-Input annehmen und bearbeiten, jedoch zeigen Versuche des Autors dies zu implementieren, dass das nicht die
|
Das \ac{1P}-CLI kann zwar für Detail-Aufrufe mehrere Eintrags-IDs auf Standard-Input annehmen und bearbeiten, jedoch zeigen Versuche des Autors dies zu implementieren, dass das nicht die
|
||||||
Zeitkomplexität von $O(n)$ verändert. Das heisst, eine Anfrage für 10 Einträge zu stellen, dauert in etwa zehn mal so lange,
|
Zeitkomplexität von $O(n)$ verändert. Das heißt, eine Anfrage für 10 Einträge zu stellen, dauert in etwa zehn mal so lange,
|
||||||
wie zehn Anfragen für jeweils einen Eintrag zu stellen.
|
wie zehn Anfragen für jeweils einen Eintrag zu stellen.
|
||||||
|
|
||||||
Eine spätere Ergänzung, um die programmatische Auslesung der Einträge in $O(n)$ anstatt $O(n^2)$ zu gewährleisten, ist die Unterhaltung von Mapping-Objekten in Entwickler*innen-Vaults.
|
Eine spätere Ergänzung, um die programmatische Auslesung der Einträge in $O(n)$ anstatt $O(n^2)$ zu gewährleisten, ist die Unterhaltung von Mapping-Objekten in Entwickler*innen-Vaults.
|
||||||
@ -255,4 +255,53 @@ Um diese Konfiguration zu testen, werden in einem Testszenario fünf Werte aus \
|
|||||||
Diese Einträge abzufragen dauert durch das imperformante \ac{1P}-CLI rund 17 Sekunden.
|
Diese Einträge abzufragen dauert durch das imperformante \ac{1P}-CLI rund 17 Sekunden.
|
||||||
|
|
||||||
\subsection{Optimierung}
|
\subsection{Optimierung}
|
||||||
Es bieten sich einige Möglichkeiten an den in \fullref{fig:flowchart-resolve-1p-secret} zu beschleunigen.
|
Es bieten sich zwei Möglichkeiten an, den in \fullref{fig:flowchart-filtermodule-resolve-1p-secret} abgebildeten Prozess zu beschleunigen.
|
||||||
|
Diese beschäftigen sich damit, zu limitieren, wie oft das \ac{1P}-CLI angefragt wird:
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item [Das Mapping-Objekt zwischenspeichern] \hfill \\
|
||||||
|
Anstatt das Mapping-Objekt für jedes angefragte Secret erneut abzufragen, könnte es zwischengespeichert werden.
|
||||||
|
\item [Ganze Einträge zwischenspeichern] \hfill \\
|
||||||
|
Für den Fall, dass ein Eintrag mehrach angefragt wird, könnte ein einmal angefragter Eintrag zwischengespeichert werden.
|
||||||
|
Würden mehrere Felder eines Eintrages angefragt werden (z.B. \textit{=Host, Port, Benutzername, Passwort, Name}), so müsse der gesamte Eintrag nur ein mal angefragt werden.
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
All diese Ansätze erfordern es Daten zwischenzuspeichern. Filtermodule haben allerdings keinen persistenten Arbeitsspeicher über verschiedene Aufrufe hinaus.
|
||||||
|
E.g. nach jedem angefragten Secret, verliert er seinen internen Zustand.
|
||||||
|
Daher muss dieses zwischengespeichert in einer Datei stattfinden. Hierfür wird eine Tempdatei über Pythons \textit{tempfile.gettempdir()}-Funktion ermittelt.
|
||||||
|
Diese Zwischenspeicher beinhalten die vom \ac{1P}-CLI zurückgegebenen Informationen.
|
||||||
|
|
||||||
|
\begin{nicepic}
|
||||||
|
\includegraphics[width=1\textwidth]{images/flowchart-resolve-1p-secret-with-caching.png}
|
||||||
|
\captionof{figure}{Flussdiagramm: Businesslogik des 1P-Resolver-Filtermoduls, mit Zwischenspeicher}
|
||||||
|
\caption*{Quelle: Eigene Darstellung}
|
||||||
|
\label{fig:flowchart-filtermodule-resolve-1p-secret-with-caching}
|
||||||
|
\end{nicepic}
|
||||||
|
|
||||||
|
\subsubsection{Mapping-Zwischenspeicher}
|
||||||
|
Wenn das Mapping-Objekt angefragt wird, so wird zunächst geprüft, ob es eine lokal zwischengespeicherte Version gibt.
|
||||||
|
Falls ja, wird diese geladen und verwendet.
|
||||||
|
Falls nein, wird es via dem \ac{1P}-CLI angefragt und lokal gespeichert.
|
||||||
|
Sollte der Mapping-Zwischenspeicher verwendet werden und das gesuchte Objekt nicht darin gefunden werden, so wird dieser Zwischenspeicher gelöscht und das Mapping-Objekt erneut angefragt.
|
||||||
|
Das deckt folgenden Problemfall ab:
|
||||||
|
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Zwischenspeicher wird erstellt
|
||||||
|
\item Entwickler*in erhält mehr Berechtigungen
|
||||||
|
\item Entwickler*in will diese Berechtungen nutzen
|
||||||
|
\item Der Zwischenspeicher wird verwendet, spiegelt diese neuen Berechtigungen aber nicht wider
|
||||||
|
\item Der Prozess schlägt zu Unrecht fehl
|
||||||
|
\end{enumerate}
|
||||||
|
|
||||||
|
Dieser Prozess würde durch diese Vorkehrung so aussehen:
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Zwischenspeicher wird erstellt
|
||||||
|
\item Entwickler*in erhält mehr Berechtigungen
|
||||||
|
\item Entwickler*in will diese Berechtungen nutzen
|
||||||
|
\item Der Zwischenspeicher wird verwendet, spiegelt diese neuen Berechtigungen aber nicht wider
|
||||||
|
\item Das System erneuert den Zwischenspeicher
|
||||||
|
\item Der Zwischenspeicher spiegelt nun die neuen Berechtiungen wider
|
||||||
|
\item Der Prozess ist erfolgreich
|
||||||
|
\end{enumerate}
|
||||||
|
|
||||||
|
Durch die Implementation des Mapping-Zwischenspeichers wird die Ausführzeit von 17 Sekunden auf 8 Sekunden reduziert.
|
||||||
|
BIN
images/flowchart-resolve-1p-secret-with-caching.png
Normal file
BIN
images/flowchart-resolve-1p-secret-with-caching.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 136 KiB |
Loading…
x
Reference in New Issue
Block a user