Datenbank mitgeben

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

  • Datenbank mitgeben

    Hi,
    ich müsste meinem Programm eine Recht große Datenbank mitgeben.
    Im Moment habe ich die Daten in dem Format vorliegen:
    Wert1:Wert2:Wert3:Wert4

    Mein Plan wäre es nun, die Datenbank in mein .app Paket reinzulegen und diese beim Programmstart auszulesen und irgendwie in ein Array reinzupacken. (Wie genau ich das mache, ist mir auch noch nicht klar - ein array mit dictionaries wäre ja nur sinvoll, wenn ich nur 2 Werte hätte...)

    Da ich noch nicht weiß, wie groß die Datenbank kurzfristig werden könnte (es waren schon >50MB im Gespräch) habe ich jetzt Bedenken wegen der Performance. Das dauert sicher beim Start etwas, mehr als 10 MB in den Speicher zu laden...

    Meint ihr, man kann das auch über CoreData irgendwie lösen? Also die Daten in einem Art Parser mit CoreData aufsammeln und dann einfach die Daten aus ~/Library/Application Support in das .app Paket kopieren und beim Start darauf achten, dass die Daten dann jeweils in die ~/Library/Application Support vom ausführenden User zu kopieren...
    Wenn die Daten dann da liegen, müsste ich recht performant daraufzugreifen können...

    Oder denk ich jetzt in ganz falsche Richtungen... Irgendwie verwirrt mich der Kram grad...

    Danke schonmal und viele Grüße
  • RE: Datenbank mitgeben

    Hallo!

    Natürlich kannst Du CoreData für diese Aufgabe nutzen. Wenn sich diese Daten nie ändern, dann kannst du die DB auch statisch einmal erzeugen und diese dann immer nutzen.

    Die eigentliche Datenbank muss auch nicht unter ~/Library/Application Support/xyz liegen. In der Klasse XYZ_AppDelegate, die Dir Xcode bereit stellt, gibt es eine Methode:

    Quellcode

    1. - (NSPersistentStoreCoordinator *) persistentStoreCoordinator


    In dieser wird die DB geöffnet. Und anstatt den "applicationSupportFolder" zu nutzen, kannst Du natürlich auch jeden anderen Pfad (z.B. einen Pfad in dein Application Bundle/Resources Ordner) nutzen.

    Viele Grüsse,
    Christian
  • Original von FFM_Heini
    Das ist jetzt die Frage - die Daten sollen nach dem Start eigentlich für eine Live-Suche zur Verfügung stehen. Wenn ich das nu mit SQL-mache, dauern die Abfragen für eine Live-Abfrage nicht zu lange als wenn die Daten direkt im Speicher kleben?
    Das hängt davon ab was Du für einen Index hast. Wenn Du alles in den Speicher lädst, dann realisierst Du wahrscheinlich eine lineare Suche durch den Speicher. Das *kann* langsamer sein als ein Zugriff über SQL mit Index.

    M.E. ist eine SQL-Lösung meist viel flexibler. Du kannst Die Datenbank nämlich auch z.B. aus Shell-Scripts schreiben und lesen. Oder es gibt Tools wo man sich eine DB einfach so angucken kann. Oder importieren.

    -- hns
  • Das musst du ausprobieren. Ich würde an Deiner Stelle einfach mal anfangen. Implementier eine Lösung die Dir gefällt und wo Du weißt, dass du schnell ein Ergebnis bekommst. Danach kann man sich immer noch hinsetzen und versuchen, die Anwendung zu optimieren.

    Der Ansatz mit Core Data und einer SQL Datenbank wäre ein Weg. Du kannst später immer noch die Datenbank gegen "in-memory" Daten tauschen, indem Du im Quellcode den PersistentStore von SQLite auf Binary oder XML setzt. Oder Du fängst mit Binary an und wechselst später auf eine DB. Mit CoreData sollte das kein Problem sein (siehe Link in meinem vorherigen Beitrag).

    Viele Grüsse,
    Christian