Le prestazioni del salvataggio di un ManagedObjectContext dipendono dal numero di oggetti contenuti (non modificati)?

StackOverflow https://stackoverflow.com/questions/2229690

Domanda

Una domanda generale su CoreData/SQLite

Esiste una differenza significativa tra questi due scenari durante il salvataggio di un file NSManagedObjectContext utilizzando un negozio SQLite:

  • Dopo aver aggiunto/modificato/eliminato uno oggetto in a NSManagedObjectContext contenente 10 per il resto invariato NSManagedObjects
  • Dopo aver aggiunto/modificato/eliminato uno oggetto in a NSManagedObjectContext contenente 10'000 per il resto invariato NSManagedObjects
È stato utile?

Soluzione

Generalizzando dalla mia esperienza con Enterprise Objects (da cui Core Data si è evoluto) direi che entrambi i tuoi scenari sarebbero ugualmente veloci senza indicizzazione e il secondo leggermente più lento con l'indicizzazione.

Utilizzando un archivio SQL, il costo di aggiunta di un oggetto è in gran parte fisso indipendentemente dal numero di altri oggetti presenti nel grafico.L'indicizzazione provoca un effetto di ridimensionamento perché l'indice dipende da altri oggetti esistenti.Tuttavia, nella stragrande maggioranza dei casi, questo non è significativo.

Quanto più complesse sono le relazioni all'interno del grafico, tanto più i salvataggi sono influenzati dalla dimensione totale del grafico.Ovviamente, se hai un grafico con solo dieci oggetti, nessuna relazione può contenere più di dieci oggetti.Se ne hai uno con 10.000, le relazioni sono potenzialmente molto più grandi e richiedono più tempo per essere elaborate.

In sintesi, Core Data con un archivio SQL sembra essere in gran parte inalterato solo dalla dimensione del grafico.

Altri suggerimenti

La profilazione ti dirà se c'è una differenza significativa.Tuttavia, sospetto che il tipo di coordinatore del negozio influenzerà le prestazioni.L'aggiornamento di un oggetto in un database SQLite è probabilmente più veloce e più scalabile rispetto a farlo in un albero XML.

Nella mia esperienza precedente non c'è una differenza significativa.Se l'oggetto da aggiungere/modificare/eliminare contiene molti attributi indicizzati, ci vorrà solo leggermente di più rispetto al caso di un oggetto senza attributi indicizzati, ma questo è previsto poiché verranno modificati anche gli indici.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top