2017-05-07 3 views
0

Ich experimentierte mit hierarchischen Datensätzen in Realm-Swift, speziell unendlich verschachtelten Knoten (Bäumen). Um ehrlich zu sein, bin ich nicht sicher, wie man die Leistung, Effizienz oder die Auswirkung eines Datensatzes beim Laden eines Knotens misst.Effizienz beim Laden verschachtelter Daten

eine Datenstruktur wie folgt vor:

Item (Root): 
    - Children[]: 
     + Item 
     - Item 
      - Children[]: 
       + Item 
       + Item 
      - CreatedOn 
     + Item 
     + Item 
     + Item 
     - Item 
      - Children[]: 
       + Item 
       + Item 
       + Item 
       + Item 
      - CreatedOn 
     + Item 
     + Item 
     + Item 
    - CreatedOn 

Angenommen, es sind etwa 1 Million Knoten, das sind einige Fragen, die ich habe:

  1. Ich verstehe, dass Reich verzögertes Laden von Eigenschaften unterstützt. Wenn ich also nur den Wurzelknoten abfragen würde, werden alle 1 Millionen Einträge nicht richtig geladen?
  2. Angenommen, der Root-Knoten selbst hat 100k Kinder, wenn ich auf die Kinder des Root-Knotens mit item.Children würde Realm laden alle Knoten in der Kinderliste? Oder ist es möglich, durch sie zu blättern?
  3. Natürlich wollen wir nicht alle 1 Million Einträge im Speicher gibt es keine Unterstützung für schwache Referenzen? Wie schafft man ein solches Szenario?

Schätzen Sie jede Hilfe!

Antwort

1
  1. Sie haben Recht, die Einträge würden nicht alle geladen werden. Beziehungen zwischen Realm-Objekten werden als Zeiger innerhalb der zugrunde liegenden Datenstruktur dargestellt, was bedeutet, dass Sie in der Lage sein sollten, beliebig komplexe Objektbäume zu erstellen, ohne auf irgendein Problem zu stoßen, bei dem ein einzelnes Objekt geladen wird.

  2. Die Realm-Sammlungsarten laden die Objekte, die sie repräsentieren, nicht in den Speicher. Objekte selbst sind leichte Wrapper um Accessoren direkt in die zugrunde liegende Datenstruktur, die selbst ein Teil der On-Disk- (oder In-Memory-) Datei mmap in den Adressraum des Prozesses ist. Beachten Sie, dass die Speicherverwaltung einige Feinheiten aufweist: Da es sich bei Realm um eine MVCC-Datenbank handelt und die Lebensdauer eines bestimmten Snapshots der Datenbank mit den Lebensdauern der Objekte verknüpft ist, die diesen Snapshot referenzieren, kann unvorsichtig geschriebener Code unnötigerweise mehrere Snapshots speichern der Datenbank im Speicher gleichzeitig, wodurch Speicherbelegung und Dateigrößen wachsen.

  3. Realm Swift hat keine Ahnung von schwachen Referenzen, aber wegen der zwei obigen Punkte sollte es sie nicht brauchen.

Unser Artikel, Realm Threading Deep Dive, bietet einen Überblick über die Realm arbeitet (sehen Sie sich die Untermauerung Realm Abschnitt) und könnte auch für Sie von Interesse sein.

Verwandte Themen