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.
|
||||
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
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
\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