Import von großen Datenmengen in Core Data über UIManagedDocument, JSON, KeyedArchiver

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Import von großen Datenmengen in Core Data über UIManagedDocument, JSON, KeyedArchiver

    LIebe Entwickler,

    ich nutze UIManagedDocument als Core-Data Basis unter iOS und würde gerne einen Teil dieser Datenbank am Anfang mit Masterdaten "seeden" und regelmäßig mit neuen Daten aktualisieren.

    Hierzu speichere ich unter Mac OS die Seeding bzw Update-Daten in Core-Data. Die Daten haben einen Umfang von ca 10 MB, wenn sie als JSON ohne Leerzeichen gespeichert werden. Das sind ca 15.000 Datensätze mit jeweils ca 50 Attributen.

    Am einfachsten wäre natürlich die Serialisierung und Deserialisierung mit der seit iOS 5 verfügbaren NSJSONSerialization Klasse.

    Allerdings sehe ich hier auf dem Gerät das Problem, dass der gesamte Datenbestand im Speicher gehalten wird, nur um ihn dann in Core Data zu speichern. Deswegen wäre mir eine Alternative lieber, die stream-orientiert vorgeht und nur geringe Datenmengen in den Speicher holt um diese dann in Core Data zu speichern (analog wie NSXMLParser).

    Übrigens müssen die Daten nicht in einem offenen Datenformat wie JSON oder XML ausgetauscht werden, es geht nur um Speicherbedarf und Geschwindigkeit. Die Übertragung der Datei erfolgt als gezippte Datei über Parse.com.

    Meine Ideen wären:
    1. Speichern mit NSJSONSerialization und Deserialisieren mit einem JSON-Stream Parser, der als InputStream eine lokale Datei einliest. Welchen Parser, der noch in der Community weitergepflegt wird, würdet Ihr in diesem Fall empfehlen?
    2. NSKeyedArchiver: Allerdings hier scheinbar wieder das Problem, dass kein Stream-Prozessing möglich ist und das gesamte Objekt vollständig im Speicher gehalten wird.
    3. Binary Plist: Hier gibt es glaube ich keinen Stream-Parser oder habe ich was übersehen?
    4. Update-Datenpaket direkt als UIManagedDocument austauschen wäre wohl eleganteste Möglichkeit. In diesem Fall müsste ich die Daten statt unter Mac OS X im iOS Simulator in ein UIManagedDocument speichern, da unter Mac OS X die UIManagedDocument-Klasse noch nicht zur Verfügung steht. Allerdings meine Frage: Wie kann ich mehrere UIManagedDocument unter iOS öffnen, aus einem lesen und in das andere schreiben? Wie funktioniert das im Core Data Modeller mit den Configurations? Ich habe schon viel gesucht und probiert, aber noch keine Lösung gefunden.

    Wie seht Ihr grundsätzlich die Speicherproblematik in meinem Fall, welche Vorgehensweise würdet Ihr wählen und was haltet Ihr von meiner Idee, die Daten mit UIManagedDocuments auszutauschen?

    Für Tipps wie ich das implementieren könnte, wäre ich Euch sehr dankbar!