Tuesday, 28 November 2017

Core Data Sqlite Vs Binary Optionen


Wenn die Blob-Dateien eines sqlite serialisiert werden, könnte das bedeuten, dass die Serialisierung das Beste ist, um die kleinsten Stücke von binären Daten zu erhalten. Ebenso können Sie NSCoding für conditionalObjectEncodings verwenden, die die Duplizierung von In-Memory-Alive-Objekt-Instanzen entfernt. Der Grund, warum ich diese Frage stelle, ist, weil jeder redet und schlägt Coredata-SQLite vor, aber ich sehe keinen Vorteil, wenn du nicht gegen eine riesige Datenquelle baue, und du kannst alles in Erinnerung bringen. Bin ich richtig ndash LolaRun Mar 5 12 um 18:12 Es gibt immer ein Gleichgewicht zwischen Speicher und Performance-Optimierung. Mit NSCoding oder deiner benutzerdefinierten Binärdarstellung hast du viel mehr Kontrolle über die Bits, die in den Speicher geschrieben oder gespeichert werden, aber dafür musst du den Preis der Codierung mehr bezahlen, so dass die Effizienz des Codes von deinem abhängt Fähigkeiten. Mit CoreDataSQLite werden viele nützliche Dinge für Sie effizient implementiert (Suchen, Abfragen, Indizieren, Joins, etc.). Hinweis: CoreData-Objekte werden nur bei Bedarf in den Speicher geladen, sonst bleiben sie im db. Ndash MrTJ Mar 6 12 um 8:26 Ausgezeichnet. Also, wenn ich mit der Anwendung vonApplicationDocumentquot-Vorlage von Anwendungen und wenn ich Dokumente speichern und öffnen muss, brauche ich wirklich die Vorteile von CoreData, da ich alles in Erinnerung laden muss und es nicht nötig ist, abzufragen und zu löschen. Datenbankfunktionalitäten. Der wesentliche Unterschied sind die Entwicklungskosten. Was in meinem Fall ist kein Rückschlag. Danke vielmals. Ich warte ein bisschen, um mehr Antworten und mehr Diskussionen zu gewinnen, bevor ich eine Antwort annehme. LolaRun Mar 6 12 um 13:41 Theres immer eine Impedanz zwischen Objekten und relationalen Strukturen. Ich bevorzuge immer Objekte, da der Datenzugriff in der Regel ein Bruchteil der Funktionalität in Ihrer App ist. Mit NSCoding, erhalten Sie Einfachheit, Leichtigkeit des Debuggens und Kontrolle mit sehr wenig Code zu schreiben sowieso. Sie haben auch die Flexibilität, NSCoding in Ihre Datenbankstrukturen zu integrieren. NSCoding ist ein Persistenzmechanismus zum Speichern von Objekten. Wenn Sie Indizes zu Ihren relationalen Strukturen für Suchoptimierung hinzufügen und Objektstrukturen pflegen, dann denke ich, dass Sie das Beste aus allen Welten zu einem sehr niedrigen Preis und Wartungsfreundlichkeit erhalten. Antwortete am 14. August 2012 um 20: 19Core Data Image Caching Veröffentlicht am 16. März 2012 von Hawk iMedia Es ist ein gemeinsames Muster für eine App, um etwas mit Daten zu tun, die nicht lokal ist. Die Aufrechterhaltung einer anständigen App-Performance beim Abrufen der Daten ist eine Herausforderung (und nicht der Fokus dieses Artikels). Halten Sie die Daten, und genug davon, für spätere Verwendung und zu verhindern, dass es wieder zu bekommen, ist eine weitere Herausforderung. Es gibt offensichtliche Lösungen, einige einfache und einige nicht, und alle mit ihren eigenen Vor-und Nachteile. Was ist Caching Caching ist ganz einfach, etwas für die spätere Verwendung zu halten, das war 8220hard8221, um an erster Stelle zu kommen. Dies könnte externe Daten, ein berechneter Wert oder irgendetwas sein, das du nicht mehr als einmal erwerben musst, wenn du es vermeiden kannst. Caching sollte jedoch nicht als grenzenloser Prozess betrachtet werden. Damit verstehe ich, dass du alles für immer einfach zwischenspeichern kannst. Du musst einen Weg haben, den Cache regelmäßig zu löschen, basierend auf einem Algorithmus, der für deine Anwendung Sinn macht. Ein allgemeiner (und einfacher) Algorithmus ist am wenigsten kürzlich verwendet, oder LRU. Mit diesem Algorithmus ist die Theorie, dass die Items in deinem Cache, die am wenigsten verwendet wurden, Kandidaten sind, die aus dem Cache gelöscht werden sollen, basierend auf einer Schwelle von Nichtgebrauch. Sie können sich vorstellen, dass auf einem mobilen Gerät die Pause des Cache ist aufgrund der inhärenten Raumbeschränkungen wichtig. Sie können auch wählen, um eine begrenzte Menge an Daten zu cache (aber you8217d muss noch wissen, was zu fallen, wenn der Cache zu groß wurde.) Ziele des Cachings Die Gründe für den Cache sind ziemlich einfach: Aber wie ist das erreicht Es hängt teilweise davon ab, was Eine vernünftige Definition von 8220performance8221 ist für Ihre App. Leistung, wie es sich auf den Cache bezieht, wird an verschiedenen Orten offensichtlich sein: Initiale Cache-Load Cache-Zugriff Cache-Spülung Cache-Speicherung So deutlich wie I8217ve diese Liste gemacht hat, stellt sich heraus, dass jedes dieser Dinge in ein gewissem Maße miteinander verwandt ist. Zum Beispiel ist Cache-Purging etwas, das Sie während der Cache-Last ausführen können. Die Häufigkeit des Cache-Speichers sollte mit etwas verknüpft sein, wie 8220dirty8221 der Cache ist (wie viele Dinge haben sich seit dem letzten Speichern geändert) oder wie viel Zeit seit dem letzten Speichern verstrichen ist. Implementierungsoptionen Es gibt mehrere Möglichkeiten, einen Cache zu implementieren. Ihre Wahl hängt viel von der Art von Daten, die Sie zwischenspeichern, wie viel Daten Sie benötigen, um Cache, wie Sie Ihren Cache verwalten (i. e. Purging), und wahrscheinlich eine Menge anderer Dinge spezifisch für Ihre App. Die offensichtlichen Entscheidungen sind: Wörterbuch-Dateien Datenbank oder eine Kombination dieser Let8217s Blick auf jeden einzelnen. Wörterbuch mit einem Wörterbuch scheint wie eine offensichtliche Wahl. Sie sind einfach zu bedienen und leicht zu verstehen. Für sehr kleine Datensätze kann das eine gute Wahl sein. Aber sobald Ihr Datensatz bekommt 8220large8221, werden Sie beginnen, Performance-Probleme vor allem, wenn Sie es laden müssen, zu löschen, oder speichern Sie es. Mit einem Wörterbuch ist sicherlich einfach und schnell. Also auch das Lesen und Schreiben eines Wörterbuchs ist einfach, aber wenn dein Datensatz wächst, werden diese Aktionen langsam, weil du das ganze Wörterbuch lesen und schreiben kannst. Pros: Schnell und einfach, vor allem für kleine Datensätze Cons: Nicht skalierbar, d. h. Leistung verlangsamt sich, wenn der Datensatz wächst. Einzelne Dateien könnten eine Verbesserung sein. Wenn you8217re Caching sagen, thumbnail Bilder, könnten Sie ein Schema für das Schreiben jeder Datei auf das Dateisystem in einer Weise, die später ermöglicht es Ihnen, es wieder zu finden. Dies hat den Vorteil, dass you8217re nur lesen und schreiben eine einzelne Datei auf einmal. Es hat die Nachteile, dass man eine schwere Belastung auf das Dateisystem setzen könnte und es ist hart, ohne zusätzliche Meta-Daten anderweitig gespeichert, um den Cache in Bezug auf das Spülen alter Daten oder die Begrenzung it8217s Größe zu verwalten. Dieser Ansatz ist ein wenig komplizierter als mit einem Wörterbuch, aber immer noch einfach genug zu verstehen und zu behandeln. Pros: Noch einfach, und sollte relativ schnell zu speichern und abzurufen Daten außer in seltenen Fällen Cons: schwer zu verwalten Cache-Purging Sie wahrscheinlich gefragt, wann I8217d zu CoreData Eine Datenbank bietet eine schöne Abstraktion zu Ihren Daten, nicht zu erwähnen, wahlfreien Zugang zu Die Daten und die Delegation bestimmter 8220hard8221 Aufgaben an die zugrunde liegende Datenbank. CoreData ist wirklich nützlich für das Caching, habe ich gelernt, wegen der Vorteile von Datenbank-ähnliche Operationen. (Lest ich daran erinnern in den Kommentaren: CoreData ist keine Datenbank.) Bei mehr als einer Gelegenheit habe ich nun einen CoreData-basierten Cache zum Speichern von Bilddaten lokal verwendet. Die Leistungsvorteile allein waren es wert. Aber ich habe nicht mit CoreData angefangen. Ich habe eigentlich mit einem Wörterbuch begonnen. In einer App speichern wir ca. 3MB oder mehr Bilddaten, mit einem 30-tägigen Verfall auf einzelne Einträge. Es stellte sich heraus, dass der Versuch, zu lesen oder zu schreiben, dass viel Daten als Wörterbuch war langsam Und schlimmer, das ganze Wörterbuch musste durchlaufen werden, um Einträge zu finden, die ablaufen ließ, was die Dinge schlimmer machte. Ein Beispiel Beispielsweise wollte ich nur ein paar Sachen über meinen CoreData-Image-Cache zeigen, der jetzt in ein paar Apps benutzt wird. Das Modell begann ganz einfach: Ich war ein CoreData noobie, als ich das zuerst entwickelte, also habe ich das Bilddatenattribut als Binärdaten definiert. Das hat gearbeitet, aber ich verlange, dass ich die Arbeit in meinem Code mache, um die Daten in ein UIImage zu verwandeln. Es stellt sich heraus, dass CoreData diese Art von Transformation für Sie mit dem Attributtyp Transformable durchführen kann. Mehr dazu später. Das imageUrl-Attribut ist eigentlich der Schlüssel für jeden Datensatz. Und der lastUsedTimestamp ist der Schlüssel (sozusagen) zur Verwaltung des Cache-Spülens. Wenn meine App startet und das Modell und die zugehörigen Komponenten initialisiert werden, ist das erste, was getan wird, den Cache von allem, was abgelaufen ist, zu löschen. Dies geschieht mit einer vordefinierten Abfrage Anfrage: Und der folgende Code: Es gibt viele Dinge zu diesem Code (ich denke). Zum einen ist es kompakt. Es besteht keine Notwendigkeit, über den gesamten Cache zu iterieren, um die Einträge zu finden, in denen wir interessiert sind. In der Tat, wir lassen einfach CoreData damit umgehen. Und wir müssen eigentlich eine sehr kleine Anzahl von Objekten (falls vorhanden) berühren, um sie zu löschen. Am Ende verwaltet CoreData, welche Objekte verschmutzt oder gelöscht sind und das Richtige macht. Für was it8217s wert ist, ist der Code, um Einträge auf der Grundlage ihrer URL zu holen, ähnlich kompakt. Wir verwenden dafür eine andere vordefinierte Abrufanforderung. Als Optimierung wollte ich die Aufbewahrung von Binärdaten (und Umwandlung in meinen Code in UIImage) beenden und stattdessen eine Transformable verwenden. Es schien gerade genug zu sein: Erstellen Sie eine neue Version des Modells, ändern Sie den Datentyp Binärdaten in Transformable und lassen Sie leichte Migration auf den Rest aufpassen. Leider hat das nicht funktioniert. Hier ist das Modell, das ich letztlich mitgebracht habe: sowie das Mapping-Modell für die Migration: Das erlaubte eine leichte Migration, um zu arbeiten, aber ich musste in meinem Code ein wenig mehr Arbeit leisten, um die Daten von Daten in das neue Attributbild zu verschieben Type Transformable: Der Variableneintrag ist ein verwaltetes Objekt, das aus CoreData neu abgerufen wurde. Für den Fall, wo alte Daten hängen, müssen wir das Bildattribut auf ein UIImage setzen, das mit diesen Daten erstellt wurde. CoreData kümmert sich darum, wieder in Binärdaten umzuwandeln und so zu speichern. Und in der Zukunft wird das Bildattribut nur ein Bild sein, das wir manipulieren können. Das ist vielleicht nicht der effizienteste Weg, dies zu tun, aber es schien zu arbeiten und ich konnte keine andere Lösung finden. Wir setzen auch entry. data auf nil, so dass wir donc217t haben zwei Kopien der Binärdaten in CoreData und so wir don8217t tun dies 8220upgrade8221 jedes Mal für jedes Bild. It8217s wert nichts, zumindest, dass diese kleine Datenmigration nur getan wird, wie Bilder von der Benutzeroberfläche gefordert werden. Also der Schmerz von diesem ist verbreitet, wie die App verwendet wird. Und es gibt immer eine Chance, dass Cache-Einträge ausgeschaltet werden, bevor sie jemals mit diesem Code umgewandelt werden. Ich nehme Trost dazu. Schlussfolgerungen CoreData-Felsen Sobald du an dem Standard vorbei den notwendigen Boilerplate-Code bekommst, musst du schreiben, um CoreData in deiner App zu benutzen, es ist ganz nett zu bedienen und befreit dich wirklich von Sorgen zu viel darüber, wie man die Daten verwaltet und kannst du auf dich konzentrieren Müssen die Daten in deiner App verwenden. Für Caching-Zwecke, ich denke, es ist eine wirklich schöne Alternative und es scheint gut für mich so gut zu arbeiten. Was sind deine Gedanken zum Caching mit CoreData Lass es mich in den Kommentaren wissen. Teilen Sie diese: Tom Wilson sagt: Wäre es nicht besser, die Bilddaten auf der Festplatte zu speichern und nur die Kerndatenobjekte zu verwenden, um die Metadaten zu verfolgen (URL, zuletzt genutzter Zeitstempel) und dann die Methode prepareForDeletion überschreiben Reinigen Sie die Dateien Speichern Sie die Dateien, so dass Sie sie leicht finden können und haben sie einzigartig ist einfach 8211 nur einen Hash aus entweder die URL oder die Core-Daten-ID (stellen Sie sicher, dass es eine dauerhafte und nicht die temporäre ein: P) Das So können Sie abholen und durchschleifen und was auch immer mit den Cache-Aufzeichnungen machen, ohne dass die Kerndaten die Bilddaten ständig in den RAM abrufen. Sollte eine vernünftige Leistung steigern, ohne viel Aufwand8230 Hallo Tom - Vielen Dank für diesen Vorschlag it8217s eine schöne Optimierung. Ein Detail, das ich aus meinem Artikel herausgelassen habe, ist, dass ich einmal ein verwaltetes Objekt von CoreData abholen kann, ich halte es in einem In-Memory-Wörterbuch. Sobald also die Bilddaten (als Teil des verwalteten Objekts) eingelesen werden, ist es im Speicher. Also das nächste mal it8217s benötigt, dass IO nicht erforderlich ist. Das heißt, Ihr Vorschlag ist immer noch gültig und bewegt sich in Richtung der Kombination von verfügbaren Caching-Techniken in interessante Hybrid-Lösungen. Danke Karl Puder sagt: Hast du das Feld 8220data8221 beibehalten, weil es schon existiert hat, für die Kompatibilität mit früheren Versionen oder aus irgendeinem anderen Grund denke ich, dass ich den Inhalt für eine URL holen möchte und es sofort zu einem Bild mache Anforderung ist vermutlich passiert, weil wir dieses Ding auf dem Bildschirm jetzt zeigen müssen. Es war ein Umzug der Verzweiflung. Meine Hoffnung war, dass die leichte Migration das Originalmodell (URL, Daten, Zeitstempel) automatisch auf das neue Modell (URL, Bild, Zeitstempel) mithilfe eines Mapping-Modells migriert, das das Datenbild abgebildet hat. Aber das hat nicht geklappt Also habe ich das neue Modell alle alten model8217s Attribute plus ein neues Attribut, Bild. Das Mapping-Modell ordnet die alten Attribute direkt in ihre Gegenstücke im neuen Modell und setzt das neue Bildattribut auf 0 (oder null, effektiv). Dann im Code, überprüfe ich auf einen Nullbildwert im verwalteten Objekt und ich verwandle den Code aus dem Datenattribut in das Bildattribut und setze das Datenattribut auf nil. Das ist vielleicht nicht der Weg, dies zu tun, aber es hat geklappt. Dies ist einfacher, wenn Sie Beziehungen für große Datenobjekte (BLOBs) verwenden. Wie bei allen Leistungsproblemen würde ich mit der einfachsten Methode bis zu einem Leistungsproblem beraten. I8217ve war viel glücklicher, wenn ich es zuerst zur Arbeit mache und dann profilgesteuerte Optimierungen verwende. Darüber hinaus, nach 20 Jahren der Programmierung, seine auch erstaunlich, wie schnell Optimierungen mit Bibliotheken oder OS8217s verdoppeln Anwendungsebene Optimierungen. Hallo Todd - Vielen Dank für Ihren Kommentar. Wie für die Verwendung der einfachsten Methoden zuerst, bin ich einverstanden. Doch in diesem speziellen Fall, wo ich angefangen habe, ein NSDictionary zu benutzen, fand ich, dass das Lesen und Schreiben es zu einem echten Engpass wurde, weshalb ich anfing, CoreData zu betrachten. Dylan Neild sagt: Ich denke, die eine Sache im Auge zu behalten ist hier iCloud Backup, speziell, wenn Sie Core Data auf iOS verwenden. Im Einzelnen, wenn Sie Ihre Core Data sqlite-Datei im Dokumentverzeichnis speichern, wird iCloud automatisch sie sichern, wenn der Benutzer ihr Telefon mit Strom versorgt (wenn sie so konfiguriert sind). Das Problem mit der Speicherung von Blob-Daten in dieser sqlite-Datei ist, dass diese einzelne Datei jetzt in der Größe wächst mit jedem Blob hinzugefügt und I8217d denke, iCloud würde dann re-backup die gesamte Datei im Gegenzug, nein Dies kann prohibitiv langsam Daten intensiv beim Hinzufügen eines 5KB-Bild zu einer 500MB-Datenbank bedeutet eine neue 500MB5K-Sicherung. Es sei denn, Apple hat irgendeine Art von 8220row-level8221 Backup-Strategie beim Umgang mit Core Data sqlite Dateien Sie tun Regisseur-Synchronisation für iCloud Sync so it8217s möglich 8211 aber ich kann keine Verweis auf diese überall finden. Dylan - Sie sind absolut richtig. In den Implementierungen dieses CoreData-Caching-Schemas habe ich ausdrücklich die Cache-Datei nicht in das Documents-Verzeichnis gesetzt, genau die Gründe, die Sie hervorheben. Es ist doch ein Cache. Also der richtige Platz, um die Datei zu setzen, ist in LibraryCaches, also kann iOS diesen Platz zurückfordern, wenn er muss. Es gibt eine Funktion, die in iOS 5.0.1 hinzugefügt wird, die eine App ein 8220no backup8221 Bit auf irgendeine Datei einstellt. Das ist ein anderer Weg, um dem System zu sagen, dass er nicht etwas sichern soll. Grundsätzlich ist die Faustregel, dass, wenn der Benutzer die Daten erstellt hat, sollte es in Dokumente gehen. Wenn sie didn8217t und es kann leicht neu erstellt oder zurückgeholt werden, sollte es iniOS Datenbanken gehen: SQLLite vs Core Data vs Realm Wenn Sie eine tolle App, die schnell läuft und nur funktioniert (keine Bugs erlaubt) youll haben, um darüber nachzudenken Alle Entwicklungsaspekte Ihrer App sorgfältig. Einer der Aspekte, die Sie herausfinden müssen, ist, wie zu speichern und nach großen Mengen von Daten zu suchen, so youll wahrscheinlich eine Datenbank verwenden. Die häufigsten Optionen für iOS-Datenbanken sind SQLite und Core Data und ein relativ neuerer Spieler namens Realm. Dieser Artikel behandelt die Vor-und Nachteile jeder Option und diskutiert den Prozess der Umstellung auf Realm, wenn Sie bereits mit SQLite oder Core Data. SQLite ist die meist genutzte Datenbank-Engine in der Welt und ihre Open-Source auch. Es implementiert eine transaktionale SQL-Datenbank-Engine ohne Konfiguration und kein Server erforderlich. SQLite ist auf Mac OS-X, iOS, Android, Linux und Windows erreichbar. Es liefert eine einfache und benutzerfreundliche Programmierschnittstelle, wie sie in ANSI-C geschrieben ist. SQLite ist auch sehr klein und leicht und die komplette Datenbank kann in einer plattformübergreifenden Datenträgerdatei gespeichert werden. Die Gründe für die große Popularität von SQLite sind: Unabhängigkeit von einem Server Zero-Konfiguration Sicherer Zugriff von mehreren Prozessen und Threads Speichert Daten in Tabellen mit einer oder mehreren Spalten, die einen bestimmten Datentyp enthalten. Core Data ist die zweite iOS-Speichertechnologie, die den App-Entwicklern zur Verfügung steht. Abhängig von der Art der Daten und der Menge der Daten, die Sie verwalten und speichern müssen, haben sowohl SQLite und Core Data ihre Vor-und Nachteile. Core Data konzentriert sich mehr auf Objekte als die traditionellen Tabellen-Datenbank-Methoden. Mit Core Data speichern Sie tatsächlich Inhalte eines Objekts, das durch eine Klasse in Objective-C dargestellt wird. Obwohl sie grundsätzlich unterschiedlich sind, Core-Daten: Verwendet mehr Speicher als SQLite Verwendet mehr Speicherplatz als SQLite Schneller beim Abrufen von Datensätzen als SQLite. Theres ein neuer (ish) Spieler in der Stadt genannt Realm. Realm wurde entwickelt, um schneller und effizienter zu sein als die bisherigen Datenbanklösungen. Diese neue Lösung ist eine plattformübergreifende mobile Datenbank namens Realm. Es ist in Objective-C und Swift verfügbar und ist für iOS und Android konzipiert. Die großen Upside of Realm sind: Sein absolut kostenlos, schnell und einfach zu bedienen. Unbegrenzte Nutzung. Arbeit an seinem eigenen Persistenzmotor für Geschwindigkeit und Leistung. Was ist wirklich toll, ist, dass man die ganze Arbeit mit ein paar Zeilen Code behandeln kann. Realm ist sehr einfach zu installieren und schneller zu arbeiten im Vergleich zu SQLite und Core Data. Auch die Datenbankdateien sind unter iOS und Android zugänglich. Wenn Sie eine App mit vielen Aufzeichnungen und für eine große Anzahl von Benutzern entwerfen, müssen Sie von Anfang an besondere Aufmerksamkeit auf Skalierbarkeit legen. Realm ist großartig an diesem und es erlaubt Ihnen, eine Menge Daten schnell zu behandeln. Um mit Realm zu beginnen, brauchen Sie nur iOS 8 oder OS X 10.9. Ältere Versionen unterstützen diese neue, einfache Lösung für die Verwaltung lokaler Speicher - und Datenbanken nicht. Umschalten auf Realm Wenn Sie mit Core Data gearbeitet haben und Sie nach Realm weiterfahren möchten, ist der Prozess einfach. Viele Entwickler haben die Reise in ein paar Stunden gemacht. Beachten Sie, dass sowohl Core Data als auch Realm Daten als Objekte behandeln, was Sie tun müssen, um den Core Data Code umzubauen, um Realm zu verwenden. Entfernen Sie das Core Data Framework. Suchen Sie den Teil Ihres Codes, der Core Data Code enthält und refactor sie. Sie skizzieren einen schönen Trick, um einen Compiler-Fehler für jede Codezeile mit Core Data zu entfernen. Entfernen Sie den Core Data Setup Code. Es wird ein Teil des Core Data Setup-Code irgendwo in deiner App sein und du musst alles loswerden. Realm wird automatisch so konfiguriert, wie Sie zum ersten Mal auf ein Realm-Objekt zugreifen. Sie können wählen, wo Sie die Realm-Datendatei speichern möchten, und es wird immer noch zur Laufzeit optional sein. Migrieren Sie Ihre Modelldateien. Sie können einfach verwaltete Objektunterklassen in Realm umwandeln. Realm verwaltet Eigenschaftsschlüsselwörter intern (man muss sie nicht angeben), was die Klassenüberschrift minimaler macht. Außerdem kannst du alle NSNumber cruft sicher entfernen, weil Realm einfache numerische Daten unterstützt (NSInteger und CGFloat). Es gibt auch Einschränkungen für Realm. Im Gegensatz zu Core-Daten, deren Objekte NSManagedObjectID haben, um Objekte eindeutig zu identifizieren, verlässt Realm Sie als Entwickler. Zweitens kann die aktuelle Version von Realm nicht mit Objekt-Eigenschaften mit einem Nullwert umgehen. Das ist eine kleine Unannehmlichkeit, aber die Entwickler versprechen, dass die nächste Version von Realm dieses Problem nicht haben wird. Migrieren Sie Ihre Schreiboperationen. Realm8217s speichern Operationen sind ein wenig anders als in Core Data und Sie müssen sich mit diesem vertraut machen. Sobald die Realm-Objekte einem Realm-Objekt hinzugefügt werden, können sie nicht geändert werden. Dies gewährleistet die Konsistenz von Daten in verschiedenen Threads. Um die Eigenschaften ändern zu können, muss das Objekt, in dem diese gespeichert wurden, in einer Schreibtransaktion sein. Migrieren Sie Ihre Abfragen, um Ihre Daten nach Bedarf abrufen zu können. Um eine Datei abzurufen, benötigen Sie in Core Data ca. 10 Zeilen Code. In Realm kannst du dasselbe mit nur einer Zeile machen. Migrieren Sie Ihre Benutzer Produktionsdaten für aktive Apps, die in Core Data erstellt wurden, können Sie das Core Data Framework wieder in die App verknüpfen, Benutzerdaten abrufen und an Realm weiterleiten. Eine einfachere Lösung für austauschbare Benutzerdaten ist, alle Core Data Save Dateien zu entfernen und über das nächste Mal zu starten, wenn die App geöffnet ist. Der Schlüssel ist, um Ihren Design-Prozess so einfach mit den besten Techniken und Tools zu halten. Sobald Sie Zeit investiert haben, um Ihren bewährten Prozess einzurichten, lassen Sie sich nicht die Anziehungskraft auf neu abnehmen. Möge die neue Arbeit ein Teil deines Prozesses und der Zeit sein, ist der Detektor davon nicht wert. Post navigationiOS Datenbank Vergleich: SQLLite vs. Core Data vs. Realm Wenn Sie eine tolle App machen wollen, die schnell läuft und nur funktioniert (keine Bugs erlaubt), müssen Sie alle Entwicklungsaspekte Ihrer App sorgfältig überlegen. Einer der Aspekte, die Sie herausfinden müssen, ist, wie zu speichern und nach großen Mengen von Daten zu suchen, so youll wahrscheinlich eine Datenbank verwenden. Die gängigsten Optionen für iOS-Datenbanken sind SQLite und Core Data sowie ein relativ neuerer Spieler namens Realm. Dieser Artikel behandelt die Vor-und Nachteile jeder Option und diskutiert den Prozess der Umstellung auf Realm, wenn Sie bereits mit SQLite oder Core Data. SQLite ist die meist genutzte Datenbank-Engine in der Welt und ihre Open-Source auch. Es implementiert eine transaktionale SQL-Datenbank-Engine ohne Konfiguration und kein Server erforderlich. SQLite ist auf Mac OS-X, iOS, Android, Linux und Windows zugänglich. Es liefert eine einfache und benutzerfreundliche Programmierschnittstelle, wie sie in ANSI-C geschrieben ist. SQLite ist auch sehr klein und leicht und die komplette Datenbank kann in einer plattformübergreifenden Datenträgerdatei gespeichert werden. Die Gründe für die große Beliebtheit von SQLite sind: Unabhängigkeit von einem Server Zero-Konfiguration Sicherer Zugriff von mehreren Prozessen und Threads Speichert Daten in Tabellen mit einer oder mehreren Spalten, die einen bestimmten Datentyp enthalten Core Data ist die zweite iOS-Speichertechnologie Für app-Entwickler verfügbar. Abhängig von der Art der Daten und der Menge der Daten, die Sie verwalten und speichern müssen, haben sowohl SQLite und Core Data ihre Vor-und Nachteile. Core Data konzentriert sich mehr auf Objekte als die traditionellen Tabellen-Datenbank-Methoden. Mit Core Data speichern Sie tatsächlich Inhalte eines Objekts, das durch eine Klasse in Objective-C dargestellt wird. Obwohl sie grundsätzlich unterschiedlich sind, verwendet Core-Daten: mehr Speicher als SQLite Verwendet mehr Speicherplatz als SQLite Schneller beim Abrufen von Datensätzen als SQLite Theres ein neuer (ish) Spieler in der Stadt namens Realm. Realm wurde entwickelt, um schneller und effizienter zu sein als die bisherigen Datenbanklösungen. Diese neue Lösung ist eine plattformübergreifende mobile Datenbank namens Realm. Es ist in Objective-C und Swift verfügbar und ist für iOS und Android konzipiert. Die großen Upside of Realm sind: Seine absolut kostenlos Schnell und einfach zu bedienen Unbegrenzte Nutzung Arbeiten auf seine eigene Persistenz-Engine für Geschwindigkeit und Leistung Was ist wirklich toll, dass Sie alle Arbeit mit ein paar Zeilen Code behandeln können . Realm ist sehr einfach zu installieren und schneller zu arbeiten im Vergleich zu SQLite und Core Data. Auch die Datenbankdateien sind unter iOS und Android zugänglich. Wenn Sie eine App mit vielen Aufzeichnungen und für eine große Anzahl von Benutzern entwerfen, müssen Sie von Anfang an besondere Aufmerksamkeit auf Skalierbarkeit legen. Realm ist großartig an diesem und es erlaubt Ihnen, eine Menge Daten schnell zu behandeln. Um mit Realm zu beginnen, brauchen Sie nur iOS 8 oder OS X 10.9. Ältere Versionen unterstützen diese neue, einfache Lösung für die Verwaltung lokaler Speicher - und Datenbanken nicht. Umschalten auf Realm Wenn Sie mit Core Data gearbeitet haben und Sie nach Realm weiterfahren möchten, ist der Prozess einfach. Viele Entwickler haben die Reise in ein paar Stunden gemacht. Beachten Sie, dass sowohl Core Data als auch Realm Daten als Objekte behandeln, was Sie tun müssen, um den Core Data Code umzubauen, um Realm zu verwenden. Entfernen Sie das Core Data Framework. Suchen Sie die Teile Ihres Codes, die Core Data Code enthalten und refactor sie. Sie skizzieren einen schönen Trick, um einen Compiler-Fehler für jede Codezeile mit Core Data zu entfernen. Entfernen Sie den Core Data Setup Code. Es wird ein Teil des Core Data Setup-Code irgendwo in deiner App sein und du musst alles loswerden. Realm wird automatisch so konfiguriert, wie Sie zum ersten Mal auf ein Realm-Objekt zugreifen. Sie können wählen, wo Sie die Realm-Datendatei speichern möchten, und es wird immer noch zur Laufzeit optional sein. Migrieren Sie Ihre Modelldateien. Sie können einfach verwaltete Objektunterklassen in Realm umwandeln. Realm verwaltet Eigenschaftsschlüsselwörter intern (man muss sie nicht angeben), was die Klassenüberschrift minimaler macht. Außerdem kannst du alle NSNumber cruft sicher entfernen, weil Realm einfache numerische Daten unterstützt (NSInteger und CGFloat). Es gibt auch Einschränkungen für Realm. Im Gegensatz zu Core-Daten, deren Objekte NSManagedObjectID haben, um Objekte eindeutig zu identifizieren, verlässt Realm Sie als Entwickler. Zweitens kann die aktuelle Version von Realm nicht mit Objekt-Eigenschaften mit einem Nullwert umgehen. Das ist eine kleine Unannehmlichkeit, aber die Entwickler versprechen, dass die nächste Version von Realm dieses Problem nicht haben wird. Migrieren Sie Ihre Schreiboperationen. Realms speichern Operationen sind ein wenig anders als in Core Data und Sie müssen sich mit diesem vertraut machen. Sobald die Realm-Objekte einem Realm-Objekt hinzugefügt werden, können sie nicht geändert werden. Dies gewährleistet die Konsistenz von Daten in verschiedenen Threads. Um die Eigenschaften ändern zu können, muss das Objekt, in dem diese gespeichert wurden, in einer Schreibtransaktion sein. Migrieren Sie Ihre Abfragen, um Ihre Daten nach Bedarf abrufen zu können. Um eine Datei abzurufen, benötigen Sie in Core Data ca. 10 Zeilen Code. In Realm kannst du dasselbe mit nur einer Zeile machen. Migrieren Sie Ihre Benutzer Produktionsdaten für aktive Apps, die in Core Data erstellt wurden, können Sie das Core Data Framework wieder in die App verknüpfen, Benutzerdaten abrufen und an Realm weiterleiten. Eine einfachere Lösung für austauschbare Benutzerdaten ist, alle Core Data Save Dateien zu entfernen und über das nächste Mal zu starten, wenn die App geöffnet ist. Der Schlüssel ist, um Ihren Design-Prozess einfach mit den besten Techniken und Tools zu halten. Sobald Sie Zeit investiert haben, um Ihren bewährten Prozess einzurichten, lassen Sie sich nicht die Anziehungskraft auf neue nehmen Sie weg natürlich. Möge die neue Arbeit ein Teil deines Prozesses sein und die Zeit entscheiden, was nicht würdig ist. Sind Sie ein Entwickler Verpassen Sie nicht den monatlichen Couchbase Developer Community Newsletter, der die neuesten Schlagzeilen auf NoSQL und vieles mehr abdeckt. Geholt Ihnen in Partnerschaft mit Couchbase. Wie dieser Artikel Lesen Sie mehr Von DZone

No comments:

Post a Comment