MB: Indices vs. Strings in JSONs bezogen auf die System Performance

moin,

wenn man simplen Informationsaustausch von Applikationen mittels JSON betreibt (z.B. Direktiven aus IoT), dann wäre es denke ich system performanter, wenn man Indices als Keys verwendet oder noch besser Enumerationen oder nicht???

  • String Key: {"foo" : "bar"}
  • Index Key: {1 : "bar"}
  • Enumeration Key: {ENUM.FOO : "bar"}

lgmb

--
Sprachstörung

akzeptierte Antworten

  1. Hallo MB,

    grundsätzlich dürfte der Einfluss auf die Performance vernachlässigbar sein.

    Aber von welcher Programmierumgebung redest Du? Genauer: von welchem JSON Deserializer?

    Der in PHP eingebaute Deserializer würde meines Wissens einen "Index Key" überhaupt nicht akzeptieren. Einen Enum-Key auch nicht. Die Namen von Objekteigenschaften werden in JSON in doppelte Anführungszeichen gesetzt. Eine Eigenschaft namens "1" ist zwar zulässig, ist aber einfach nur ein Name. Kein Arrayindex. Arrays in JSON sehen anders aus.

    Rolf

    --
    sumpsi - posui - obstruxi
    1. moin,

      Arrays in JSON sehen anders aus.

      Danke! Ich erinnere mich.

      lgmb

      --
      Sprachstörung
  2. Für das JSON en/decodieren spielt es keine Rolle. Allerdings kann es das für die Anwendung die die Daten später benutzt von sehr großer Bedeutung sein. Angenommen du hast 100.000 Datensätze mit MD5 Hashes und musst alle durchgehen um nach einem bestimmten Hash für eine Datei zu suchen, das kann eine Weile dauern. Hast du hingegen den Hash als Key, kannst du direkt auf den Datensatz den du suchst zugreifen, oder merkst sofort dass er nicht enthalten ist.

    Hier sieht man ganz gut den Performance unterschied ob man in PHP ein komplettes Array durchlaufen muss oder einfach mit "isset" auf Existenz prüft. https://www.wmtips.com/php/fastest-function-check-if-value-exists-in-array/

    --
    Sei nicht faul, benutze https://google.de
    1. Tach!

      Angenommen du hast 100.000 Datensätze mit MD5 Hashes und musst alle durchgehen um nach einem bestimmten Hash für eine Datei zu suchen, das kann eine Weile dauern. Hast du hingegen den Hash als Key, kannst du direkt auf den Datensatz den du suchst zugreifen, oder merkst sofort dass er nicht enthalten ist.

      Das dauert auch bei Keys. Keys müssen ebenfalls in einer Liste organisiert sein. Es kommt nun drauf an, ob diese Liste sortiert werden kann, oder ob die Reihenfolge der Keys beibehalten werden muss. Bei sortierten Keys gibt es optimierte Verfahren, wie man relativ schnell den gewünschten findet, bei unsortierten geht es nur genauso schnell wie bei unsortierten Values (wenn man das System suchen lassen kann und keine eigene Suchroutine baut/braucht). Darüber hinaus gibt es noch Sonderformen, wie Trees, bei denen die Verbindungen zwischen den Einträgen auf spezielle Weise erfolgen. Auch hier kann man recht schnell den gesuchten Key finden. Aber insgesamt gibt es kein "sofort", auch wenn es sich aus einer Hochsprache so anfühlt, weil man da einen direkten Key-Zugriff notiert und keine Schleife.

      dedlfix.

      1. Moin!

        Aber insgesamt gibt es kein "sofort", auch wenn es sich aus einer Hochsprache so anfühlt, weil man da einen direkten Key-Zugriff notiert und keine Schleife.

        genau, ein "sofort" gibt es nur bei echten Arrays, wo aus einem numerischen Index die Adresse (der Offset) des Objekts im Arbeitsspeicher berechnet werden kann.

        Live long and pros healthy,
         Martin

        --
        Klein φ macht auch Mist.
  3. wenn man simplen Informationsaustausch von Applikationen mittels JSON betreibt (z.B. Direktiven aus IoT), dann wäre es denke ich system performanter, wenn man Indices als Keys verwendet oder noch besser Enumerationen oder nicht???

    Kann den Anderen nur beipflichten: irrelevant. JSON Encode/Decode ist auf allen relevanten Plattformen hoch optimiert. Solange man da nicht irgendwas völlig abstruses anstellt, sollte man einfach nur inhaltlich sinnvolle Datenstrukturen wählen.