Dados Principais vs SQLite 3 [fechado]

314

Eu já estou bastante familiarizado com bancos de dados relacionais e já usei SQLite (e outros bancos de dados) no passado. No entanto, o Core Data tem um certo fascínio, por isso estou pensando em gastar algum tempo para aprendê-lo para uso no meu próximo aplicativo.

Há muitos benefícios em usar o Core Data sobre SQLite ou vice-versa? Quais são os prós / contras de cada um?

Acho difícil justificar o custo de aprender os Dados Principais quando a Apple não os usa para muitos de seus principais aplicativos, como Mail.app ou iPhoto.app - optando por bancos de dados SQLite. O SQLite também é usado extensivamente no iPhone.

As pessoas familiarizadas com o uso de ambos comentam sua experiência? Talvez, como na maioria das coisas, a questão seja mais profunda do que apenas usar uma sobre a outra?

Jason Medeiros
fonte
1
Você poderia adicionar um link para en.wikipedia.org/wiki/Core_Data para todos que não sabem o que é isso.
7289 RSabet
7
Observe que o Core Data não é e não deve ser usado como banco de dados!

Respostas:

281

Embora o Core Data descenda do Enterprise Object Framework da Apple , um mapeador objeto-relacional (ORM) que foi / está fortemente vinculado a um back-end relacional, o Core Data não é um ORM. Na verdade, é uma estrutura de gerenciamento de gráfico de objetos. Ele gerencia um gráfico potencialmente muito grande de instâncias de objetos, permitindo que um aplicativo trabalhe com um gráfico que não caberia inteiramente na memória, colocando objetos dentro e fora da memória conforme necessário. O Core Data também gerencia restrições de propriedades e relacionamentos e mantém a integridade da referência (por exemplo, mantendo os links avançados e reversos consistentes quando objetos são adicionados / removidos para / de um relacionamento). Portanto, o Core Data é uma estrutura ideal para a construção do componente "modelo" de uma arquitetura MVC.

Para implementar a sua gestão gráfico, Core Data acontece de usar SQLite como uma loja de disco. Ele poderia ter sido implementado usando um banco de dados relacional diferente ou até mesmo um banco de dados não-relacional como o CouchDB . Como outros já apontaram, o Core Data também pode usar XML ou um formato binário ou um formato atômico escrito pelo usuário como back-end (embora essas opções exijam que todo o gráfico do objeto caiba na memória). Se você estiver interessado em como o Core Data é implementado em um back-end do SQLite, consulte a estrutura OmniDataObjects do OmniGroup , uma implementação de código aberto de um subconjunto da API de dados do Core. A estrutura BaseTen também é uma implementação da API de dados principais usando o PostgreSQL como back-end.

Como o Core Data não se destina a ser um ORM para SQLite, ele não pode ler o esquema SQLite arbitrário. Por outro lado, você não deve poder ler os armazenamentos de dados SQLite do Core Data com outras ferramentas SQLite; o esquema é um detalhe de implementação que pode mudar.

Portanto, não há realmente nenhum conflito entre usar o Core Data ou o SQLite diretamente. Se você deseja um banco de dados relacional, use SQLite (diretamente ou por meio de um dos wrappers Objective-C, como FMDB ), ou um servidor de banco de dados relacional. No entanto, você ainda pode querer aprender os Dados Principais para uso como uma estrutura de gerenciamento de gráficos de objetos. Em combinação com as classes de controlador da Apple e os widgets de exibição compatíveis com vinculação de valor-chave, você pode implementar uma arquitetura MVC completa com muito pouco código.

Barry Wark
fonte
11
Nota FMDB não é um ORM, apenas um invólucro objc torno sqlite3 C api
robottobor
Obrigado pela captura; Vou atualizar a postagem.
Barry Wark
3
Excelente resposta. FMDB mudou-se para github - github.com/ccgus/fmdb - e é recomendado por um desenvolvedor NetNewsWire: inessential.com/2010/02/26/on_switching_away_from_core_data
Chris Dolan
50
Com o iOS 5.0, você obtém o benefício adicional de poder usar a sincronização de arquivos do iCloud gratuitamente se estiver usando o Core Data. Se você estiver usando o SQLite diretamente, será necessário fazer muitos ajustes e implementações manuais para sincronizar o iCloud.
estranho
1
Experimente www.github.com/pmurphyjam/DBExample É um projeto do Xcode que usa SQLite.
Pat
46

E com o iOS 5.0, você obtém o benefício adicional de poder usar a sincronização de arquivos do iCloud gratuitamente se estiver usando o Core Data. Se você estiver usando o SQLite diretamente, será necessário fazer muitos ajustes e implementações manuais para sincronizar o iCloud.

estranho
fonte
7
Nota: o iCloud é péssimo com dados principais
toasted_flakes 30/03
3
Claro que sim, mas dado o orgulho e a alegria da Apple, espero que eles melhorem as coisas nas próximas versões do iOS.
estranha
4
Atualização (após a WWDC 2016) - As capacidades do iCloud da Core Data estão sendo obsoletas e provavelmente serão aposentadas no futuro. Mais: mjtsai.com/blog/2016/06/17/the-deprecation-of-icloud-core-data #
Nikolay Suvandzhiev 5/17
35

O Core Data não é tanto um mecanismo de banco de dados, mas uma API que abstrai o armazenamento de dados real. Você pode pedir ao Core Data para salvar como um banco de dados sqlite, um plist, um arquivo binário ou mesmo um tipo de armazenamento de dados personalizado.

Eu recomendaria aprender o Core Data, pois é um excelente recurso que acelera bastante muitas partes do desenvolvimento de aplicativos de cacau.

Joel Levin
fonte
13

SQLite é um dos formatos de banco de dados do Core Data. Usando o Core Data, você obtém uma melhor integração com o restante da API do cacau.

cefstat
fonte