Será que o desempenho da economia de um ManagedObjectContext depender do número de objetos contidos (inalterado)?
-
19-09-2019 - |
Pergunta
Um general CoreData / pergunta SQLite
Existe uma diferença significativa entre esses dois cenários ao salvar um NSManagedObjectContext
usando uma loja SQLite:
- Depois de adicionar / alterar / exclusão
um objecto numaNSManagedObjectContext
contendo10 NSManagedObjects
de outra forma inalterada - Depois de adicionar / alterar / exclusão
um objecto numaNSManagedObjectContext
contendo10'000 NSManagedObjects
de outra forma inalterada
Solução
generalizar a partir de minha experiência com o Enterprise Objects (que Core Data evoluíram a partir de) eu diria que ambos os cenários seria igualmente rápido sem a indexação eo segundo um pouco mais lento com a indexação.
Usando e armazenar SQL, o custo da adição de um objeto é, em grande parte fixa, independentemente de como muitos outros objetos estão no gráfico. Indexação causar um efeito de escala porque o índice é dependente de outros objetos existentes. No entanto, na grande maioria dos casos, isso não é significativo.
As mais complexas as relações dentro do gráfico mais salva são impactados pelo tamanho total do gráfico. Obviamente, se você tiver gráfico com apenas dez objetos, então nenhum relacionamento pode ter mais de dez objetos nele. Se você tiver um com 10.000, as relações são potencialmente muito maiores e levam mais tempo para processo.
Em suma, Core Data com uma loja SQL parece ser em grande parte afetada por apenas o tamanho do gráfico.
Outras dicas
Profiling vai dizer se há uma diferença significativa. No entanto, eu suspeito que o tipo do coordenador loja vai afetar as performances. Atualizando um objeto em um banco de dados SQLite é provavelmente mais rápido e mais escalável do que fazê-lo em uma árvore XML.
Na minha experiência anterior não é uma diferença significativa. Se o objeto a ser adicionado / alterado / excluída contém uma série de atributos indexados, então vai demorar apenas um pouco mais quando comparado com o caso de um objeto sem atributos indexados, mas isso é esperado uma vez que os índices também será modificado também.