Wednesday 25 September 2019

Core data sqlite vs binary options


Se os arquivos blob de um sqlite são serializados, isso poderia significar que a serialização é a melhor para obter os menores pedaços de dados binários. Além disso, você pode usar NSCoding para conditionalObjectEncodings, que remove a duplicação de instâncias de objetos vivos na memória. A razão pela qual esta pergunta é porque todo mundo fala e sugere Coredata-SQLite, mas não vê essa vantagem. A menos que construa contra uma fonte de dados enorme, e você não pode colocar tudo isso na memória. Eu estou certo ndash LolaRun Mar 5 12 at 18:12 Há sempre um equilíbrio entre memória e otimização de desempenho. Com NSCoding ou sua representação binária personalizada você tem muito mais controle sobre os bits sendo gravados no armazenamento ou sendo armazenado na memória, mas para isso você tem que pagar o preço da codificação mais assim a eficiência do código dependerá do seu habilidades. Com CoreDataSQLite um monte de coisas úteis são implementadas para você de forma eficiente (pesquisa, consulta, indexação, associações, etc). Nota: Os objetos CoreData são carregados na memória somente quando necessário, caso contrário permanecerão no db. Ndash MrTJ Mar 6 12 at 8:26 Excelente. Então, se i39m usando quotApplicationDocumentquot modelo de aplicativos, e se eu precisar salvar e abrir documentos, i wouldn39t realmente precisa dos benefícios do CoreData, uma vez que eu preciso carregar tudo na memória, e don39t necessidade de consulta e. Funcionalidades do banco de dados. A principal diferença é o custo de desenvolvimento. Que no meu caso não é um revés. Muito obrigado. I39ll esperar um pouco, para atrair mais respostas e mais discussões, antes de aceitar uma resposta ndash LolaRun Mar 6 12 at 13:41 Theres sempre uma impedância entre objetos e estruturas relacionais. Eu prefiro sempre objetos desde que o acesso dos dados é tipicamente uma fração da funcionalidade em seu app. Com NSCoding, você obtém simplicidade, facilidade de depuração e controle com muito pouco código para escrever de qualquer maneira. Você também tem a flexibilidade de incorporar NSCoding em suas estruturas de banco de dados. NSCoding é um mecanismo de persistência para salvar objetos. Se você adicionar índices a suas estruturas relacionais para otimização de pesquisa e manter estruturas de objetos, então eu acho que você obter o melhor de todos os mundos a um custo muito baixo e facilidade de manutenção. Resposta Cache de imagem de dados Publicado em 16 de março de 2017 por Hawk iMedia É um padrão comum para um aplicativo para fazer algo com dados que não é local. Manter o desempenho decente do aplicativo ao buscar os dados é um desafio (e não o foco deste artigo). Manter os dados, e bastante dele, para uso posterior e para evitar ter que obtê-lo novamente, é outro desafio. Existem soluções óbvias, algumas fáceis e outras não, e todas com suas próprias vantagens e desvantagens. O que é Caching Caching é, muito simplesmente, manter algo em volta para uso posterior que foi 8220hard8221 para chegar em primeiro lugar. Isso pode ser dados externos, um valor calculado ou qualquer coisa que você não precise adquirir mais de uma vez se puder evitá-lo. Caching não deve ser considerado um processo ilimitado, no entanto. Por isso quero dizer que você pode simplesmente armazenar em cache tudo para sempre Você tem que ter uma maneira de limpar o cache periodicamente com base em algum algoritmo que faz sentido para o seu aplicativo. Um algoritmo comum (e simples) é menos usado recentemente, ou LRU. Com este algoritmo, a teoria é que os itens em seu cache que foram usados ​​pelo menos são candidatos a serem purgados forma o cache com base em algum limiar de não-uso. Você pode imaginar que em um dispositivo móvel purgar o cache é importante devido às limitações de espaço inerentes. Você também pode optar por armazenar em cache uma quantidade limitada de dados (mas you8217d ainda precisa saber o que descartar se o cache ficou muito grande.) Objetivos do cache As razões para o cache são bastante simples: Mas como isso é conseguido Depende parcialmente do que Uma definição razoável de 8220performance8221 é para o seu aplicativo. Desempenho como ele se relaciona com o cache será evidente em vários lugares diferentes: Inicial cache de carga Cache de acesso Cache purge Cache salvar Tão distintamente como I8217ve fez esta lista, verifica-se que cada uma dessas coisas estão relacionados uns aos outros em algum grau. Por exemplo, a purga do cache é algo que você pode executar durante a carga do cache. A freqüência de cache salvar deve ser relacionado a algo como como 8220dirty8221 o cache é (quantas coisas mudaram desde o último salvar) ou quanto tempo decorrido desde o último salvar. Opções de Implementação Existem várias opções para implementar um cache. Sua escolha depende muito do tipo de dados que você está armazenando em cache, da quantidade de dados que você precisa armazenar em cache, de como você gerenciará seu cache (purgação) e, provavelmente, muitas outras coisas específicas para seu aplicativo. As escolhas óbvias incluem: banco de dados de arquivos de dicionário ou alguma combinação destes Let8217s olhar para cada um. Dicionário Usando um dicionário parece ser uma escolha óbvia. Eles são fáceis de usar e fáceis de entender. Para conjuntos de dados muito pequenos, esta pode ser uma boa escolha. Mas uma vez que seu conjunto de dados obtém 8220large8221, você começará a notar problemas de desempenho especialmente quando você precisar carregá-lo, limpá-lo ou salvá-lo. Usando um dicionário é certamente fácil e rápido. Assim também, ler e escrever um dicionário é fácil, mas à medida que seu conjunto de dados cresce, essas ações se tornarão lentas porque você está lendo e escrevendo todo o dicionário. Prós: Rápido e fácil, especialmente para pequenos conjuntos de dados Contras: Não escalável, ou seja, o desempenho diminui à medida que o conjunto de dados cresce. Arquivos individuais podem ser uma melhoria. Se você estiver caching dizer, imagens em miniatura, você poderia criar um esquema para escrever cada arquivo para o sistema de arquivos de uma maneira que mais tarde lhe permite encontrá-lo novamente. Isto tem a vantagem de que você só está lendo e escrevendo um único arquivo de cada vez. Ele tem as desvantagens que você poderia estar colocando uma carga pesada sobre o sistema de arquivos e é difícil, sem metadados adicionais armazenados em outro lugar, para gerenciar o cache em termos de purgar dados antigos ou limitar o tamanho de it8217s. Esta abordagem é um pouco mais complicada do que usar um dicionário, mas ainda é simples o suficiente para entender e lidar com ele. Pros: Ainda é simples, e deve ser relativamente rápido para armazenar e recuperar dados, exceto em casos raros Contras: difícil de gerenciar cache purga Você provavelmente se perguntou quando I8217d chegar ao CoreData Um banco de dados oferece uma boa abstração para seus dados, para não mencionar acesso aleatório para Os dados ea delegação de certas tarefas 8220hard8221 para a base de dados subjacente. CoreData realmente é útil para cache, eu aprendi, por causa dos benefícios de banco de dados-como operações. (A menos que eu seja lembrado dele nos comentários: CoreData não é um banco de dados.) Em mais de uma ocasião agora eu usei um cache baseado em CoreData para armazenar dados de imagem localmente. Os benefícios de desempenho só valeram a pena. Mas eu não comecei com o CoreData. Eu realmente comecei com um dicionário. Em um aplicativo, armazenamos cerca de 3MB ou mais de dados de imagem, com um vencimento de 30 dias em entradas individuais. Descobriu-se que tentar ler ou escrever tanto dados como um dicionário era lento E pior, o dicionário inteiro tinha de ser atravessado para encontrar entradas para expirar, o que piorou as coisas. Um exemplo A título de exemplo, gostaria de salientar apenas algumas coisas sobre o meu cache de imagens CoreData, agora em uso em alguns aplicativos. O modelo começou de forma bastante simples: eu era um noobie CoreData quando eu primeiro desenvolveu isso, então eu defini o atributo de dados de imagem como dados binários. Isso funcionou, mas exigiu que eu fizesse o trabalho em meu código para transformar os dados em uma UIImage. Acontece que o CoreData pode fazer esse tipo de transformação para você usando o tipo de atributo Transformable. Mais sobre isso mais tarde. O atributo imageUrl é na verdade a chave para cada registro. E o lastUsedTimestamp é a chave (por assim dizer) para o gerenciamento de purga de cache. Quando meu aplicativo é iniciado e o modelo e os componentes associados são inicializados, a primeira coisa que é feita é limpar o cache de qualquer coisa que tenha expirado. Isso é feito usando uma solicitação de busca predefinida: E o código a seguir: Há muitas coisas para gostar sobre esse código (eu acho). Por um lado, é compacto. Não há necessidade de iterar em todo o cache para encontrar as entradas nas quais o we8217re interessado. Na verdade, deixamos o CoreData lidar com isso. E, na verdade, temos de tocar em um número muito pequeno de objetos (se houver) para excluí-los. No final, o CoreData gerencia quais objetos estão sujos, ou excluídos, e faz a coisa certa. Para o que vale a pena, o código para buscar entradas com base em seu URL é similarmente compacto. Usamos uma solicitação de busca predefinida diferente para isso. Como uma otimização, eu queria parar de armazenar dados binários (e convertê-lo em meu código para UIImage) e usar um Transformable. Parecia bastante direto o suficiente: Crie uma nova versão do modelo, mude o tipo de dados Dados binários para Transformable e deixe a Lightweight Migration cuidar do resto. Infelizmente, isso não funcionou. Aqui está o modelo que eu acabei inventando: assim como o modelo de mapeamento para a migração: Isso permitiu que a migração leve funcionasse, mas eu tinha que fazer um pouco de trabalho extra no meu código para mover os dados de dados para a nova imagem de atributo de Type Transformable: A entrada de variável é um objeto gerenciado recém-obtido do CoreData. Para o caso em que há dados velhos pendurados ao redor, precisamos definir o atributo image para um UIImage criado usando esses dados. CoreData vai cuidar de converter de volta para dados binários, e armazená-lo dessa forma. E no futuro, o atributo imagem será apenas uma imagem que podemos manipular. Esta talvez não seja a maneira mais eficiente de fazer isso, mas pareceu funcionar e eu não consegui encontrar outra solução. Também definimos entry. data como nil para que tenhamos duas cópias dos dados binários no CoreData e por isso não fazemos 8220upgrade8221 sempre para cada imagem. It8217s vale nada, pelo menos, que esta migração de dados pouco é feito apenas como imagens são chamados pela UI. Portanto, a dor disto é espalhar-se como o aplicativo é usado. E há sempre uma chance de que as entradas de cache serão envelhecidas antes de serem convertidas com esse código. Eu tomo consolo nisso. Conclusões Rochas do CoreData Depois de ultrapassar o código padrão, mas necessário, você deve escrever para usar o CoreData em seu aplicativo, é muito bom de usar e realmente o libera de se preocupar demais com como gerenciar os dados e permite que você se concentre em como você Precisa usar os dados em seu aplicativo. Para fins de cache, eu acho que é uma alternativa muito legal e parece estar funcionando bem para mim até agora. Quais são seus pensamentos sobre o cache com o CoreData? Deixe-me saber nos comentários. Compartilhe isso: Tom Wilson diz: Não seria melhor armazenar os dados de imagem no disco e apenas usar os objetos de dados principais para acompanhar os meta-dados (url, último carimbo de hora usado) e, em seguida, substituir o método prepareForDeletion para Limpar os arquivos Armazenar os arquivos para que você possa encontrá-los facilmente e tê-los únicos é fácil fazer apenas um hash fora do url ou o ID de dados do núcleo (certifique-se de seu permanente e não o temporário: P) Que Maneira que você pode buscar e loop e fazer o que quer que com os registros de cache, sem fazer core dados buscar os dados de imagem em ram constantemente. Deve ser um impulso de desempenho razoável, sem muito esforço8230 Olá Tom - Obrigado por essa sugestão it8217s uma ótima otimização. Um detalhe que deixei fora do meu artigo é que uma vez que eu buscar um objeto gerenciado do CoreData, eu mantê-lo em um dicionário na memória. Assim, uma vez que os dados da imagem (como parte do objeto gerenciado) são lidos, ele está na memória. Portanto, na próxima vez que for necessário, o IO não é necessário. Dito isto, sua sugestão ainda é válida e se move no sentido de combinar técnicas de cache disponíveis em soluções híbridas interessantes. Obrigado Karl Puder diz: Você manteve o campo 8220data8221 porque já existia, para compatibilidade com versões anteriores, ou por algum outro motivo, eu acho que eu gostaria de buscar o conteúdo de um URL e torná-lo em uma imagem de imediato, uma vez que o Presumivelmente está acontecendo porque precisamos mostrar aquela coisa na tela agora. Foi um movimento de desespero. Minha esperança era que a migração leve migraria automagicamente o modelo original (url, data, timestamp) para o novo modelo (url, imagem, timestamp) usando um modelo de mapeamento que mapeasse dados - imagem. Mas isso não funcionou. Então eu fiz o novo modelo incluem todos os atributos old modelo8217s mais um novo atributo, imagem. O modelo de mapeamento mapeia os atributos antigos diretamente para seus equivalentes no novo modelo e define o novo atributo de imagem como 0 (ou nil, efetivamente). Em seguida, no código, verifico para um valor de imagem nulo no objeto gerenciado e eu transformar em código do atributo de dados para o atributo de imagem, e definir o atributo de dados para nil. Esta talvez não seja a maneira de ter feito isso, mas funcionou. Isso é mais fácil se você usar relacionamentos para grandes objetos de dados (BLOBs). Como com todos os problemas de desempenho eu aconselho usando o método mais simples até que seu problema de desempenho. Fiquei muito mais feliz quando eu comecei a trabalhar primeiro e, em seguida, usar otimização de perfil orientado. Além disso, após 20 anos de programação, também é surpreendente como otimizações rápidas com bibliotecas ou OS8217s obsoletas otimização de nível de aplicativo. Oi Todd - Obrigado pelo seu comentário. Quanto à utilização dos métodos mais simples primeiro, concordo. No entanto, neste caso particular, onde eu comecei a usar um NSDictionary, descobri que leitura e escrita tornou-se um verdadeiro gargalo, razão pela qual eu comecei a olhar para o CoreData. Dylan Neild diz: Eu acho que a única coisa a ter em mente aqui é o iCloud Backup, especificamente se você estiver usando o Core Data no iOS. Especificamente, se você estiver armazenando o arquivo sqlite do Core Data no diretório Documents, o iCloud irá automaticamente fazer o backup quando o usuário conectar o telefone ao poder (se eles tiverem configurado). O problema com o armazenamento de dados blob nesse arquivo sqlite é que esse único arquivo está crescendo em tamanho com cada blob adicionado e I8217d acho que iCloud, em seguida, re-backup do arquivo inteiro, por sua vez, não Isso pode obter dados proibitivamente lentos ao adicionar um 5KB para um banco de dados de 500MB significa um novo backup de 500MB5K. A menos que a Apple tenha algum tipo de 8220row-level8221 backups estratégia ao lidar com arquivos Core sqlite de dados Eles fazem sincronização de nível de linha para sincronização iCloud para 8282 possível 8211 mas eu can8217t encontrar qualquer referência a este em qualquer lugar. Dylan - Você está absolutamente correto. Nas implementações deste esquema de cache do CoreData eu explicitamente não colocar o arquivo de cache no diretório de documentos para exatamente as razões que você destacar. Afinal, é um cache. Portanto, o lugar certo para colocar o arquivo está em LibraryCaches, para que o iOS possa recuperar esse espaço se for necessário. Há um recurso adicionado no iOS 5.0.1 que permite que um aplicativo defina um bit 8220no backup8221 em qualquer arquivo. Essa é outra maneira de dizer ao sistema para não fazer backup de algo. Basicamente, a regra de ouro é que, se o usuário criou os dados, ele deve ir em documentos. Se eles didn8217t e pode ser facilmente recriado ou refetched, ele deve ir iniOS Bancos de dados: SQLLite vs Core dados vs. Reino Se você quiser fazer um grande aplicativo que funciona rápido e apenas funciona (sem bugs permitidos) você terá que pensar Todos os aspectos de desenvolvimento do seu aplicativo com cuidado. Um dos aspectos que você deve descobrir é como armazenar e procurar grandes quantidades de dados, então você provavelmente usará um banco de dados. As opções mais comuns para bancos de dados iOS são SQLite e Core Data e um jogador relativamente mais novo chamado Realm. Este artigo aborda os prós e contras de cada opção e discute o processo de alternar para o Realm se você já estiver usando o SQLite ou Core Data. SQLite é o motor de banco de dados mais usado no mundo e sua fonte aberta também. Ele implementa um mecanismo de banco de dados SQL transacional sem configuração e nenhum servidor necessário. O SQLite está acessível no Mac OS-X, iOS, Android, Linux e Windows. Ele oferece uma interface de programação simples e amigável, como está escrito em ANSI-C. SQLite também é muito pequeno e leve eo banco de dados completo pode ser armazenado em um arquivo de disco de multi-plataforma. As razões para a grande popularidade do SQLite são: Independência de um servidor Configuração zero Acesso seguro a partir de múltiplos processos e threads Armazena dados em tabelas com uma ou mais colunas que contêm um tipo específico de dados. Core Data é a segunda tecnologia de armazenamento principal do iOS disponível para desenvolvedores de aplicativos. Dependendo do tipo de dados e da quantidade de dados que você precisa para gerenciar e armazenar, SQLite e Core Data têm seus prós e contras. Core Data concentra-se mais em objetos do que os métodos tradicionais de banco de dados de tabela. Com Core Data, você está realmente armazenando conteúdo de um objeto que é representado por uma classe em Objective-C. Embora sejam fundamentalmente diferentes, Core dados: Usa mais memória do que SQLite Usa mais espaço de armazenamento do que SQLite Mais rápido em buscar registros do que SQLite. Theres um novo (ish) jogador na cidade chamado Realm. O Realm foi projetado para ser mais rápido e eficiente do que as soluções de banco de dados anteriores. Esta nova solução é uma base de dados móvel multiplataforma chamada Realm. Ele está disponível em Objective-C e Swift, e é projetado para iOS e Android. Os grandes upsides de Realm são: Seu absolutamente livre de carga, rápido e fácil de usar. Uso ilimitado. Trabalhar em seu próprio motor de persistência para velocidade e desempenho. O que é realmente grande sobre isso é que você pode lidar com todo o trabalho com um par de linhas de código. Realm é muito fácil de instalar e mais rápido para trabalhar em comparação com SQLite e Core Data. Além disso, os arquivos de banco de dados são compartilháveis ​​entre iOS e Android. Se você está projetando um aplicativo com um monte de registros e para um grande número de usuários, você precisa prestar especial atenção à escalabilidade desde o início. O reino é grande neste e permite que você controle muito dados rapidamente. Para começar com o Realm, tudo que você precisa é pelo menos iOS 8 ou OS X 10.9. Versões anteriores não suportam esta nova solução simples para gerenciar armazenamento local e bancos de dados. Mudando para o Realm Se você estiver trabalhando com o Core Data e quiser passar para o Realm, o processo é direto. Muitos desenvolvedores fizeram a viagem em algumas horas. Observe que tanto o Core Data como o Realm tratam os dados como objetos, de modo que o que você precisa fazer é refatorar o código de Dados do Core para usar o Realm. Remova o Core Data Framework. Localize a parte do seu código que inclua código de dados de núcleo e refatorá-los. Elas descrevem um bom truque para lançar um erro de compilador para cada linha de código usando o Core Data Remove o Core Data Setup Code. Theres vai ser uma porção do código de configuração de dados do núcleo em algum lugar em seu aplicativo e você precisa se livrar de tudo. Realm é automaticamente configurado assim que você acessa um objeto Realm pela primeira vez. Você pode escolher onde deseja armazenar o arquivo de dados do Realm, e ele ainda será opcional no tempo de execução. Migrar seus arquivos de modelo. Você pode facilmente converter subclasses de objetos gerenciados para Realm. Realm gerencia internamente as palavras-chave de propriedade (você não precisa especificá-las), o que torna o cabeçalho de classe mais minimalista. Além disso, você pode remover com segurança todos os NSNumber cruft porque Realm suporta dados numéricos simples (NSInteger e CGFloat). Há também limitações para o Reino. Ao contrário de Core Data cujos objetos possuem NSManagedObjectID para identificar objetos de forma exclusiva, o Realm deixa isso como desenvolvedor. Em segundo lugar, a versão atual do domínio não pode lidar com propriedades de objeto com um valor nulo. Este é um inconveniente menor, mas os desenvolvedores estão prometendo que a próxima versão do Realm não terá esse problema. Migrando suas operações de gravação. Realm8217s salvar operações são um pouco diferente do que em Core Data e você precisa se familiarizar com isso. Uma vez que os objetos Realm são adicionados a um objeto Realm, eles não podem ser modificados. Isso garante a consistência dos dados em diferentes threads. Para poder modificar as propriedades, o objeto onde elas foram salvas precisa estar em uma transação de gravação. Migre suas consultas para poder recuperar seus dados conforme necessário. Para obter um arquivo, em Core Data você precisa de aproximadamente 10 linhas de código. Em Realm, você pode fazer a mesma coisa com apenas uma linha. Migre os Dados de Produção de Usuários para aplicativos ativos criados em Dados do núcleo, você pode voltar a vincular a estrutura de Dados do núcleo ao aplicativo, buscar dados de usuários e transmiti-los ao Reino. Uma solução mais fácil para os dados dos usuários substituíveis é remover todos os arquivos de dados do Core Data e iniciar a próxima vez que o aplicativo estiver aberto. A chave é manter o seu processo de design tão simples com as melhores técnicas e ferramentas. Depois de ter investido tempo para configurar o seu processo experimentado e verdadeiro não deixe a atração para o novo levá-lo fora do curso. Que o novo trabalho para ser uma parte de seu processo e tempo é o detector de que não é digno. Post navigationiOS Comparação de banco de dados: SQLLite vs Core Data vs Realm Se você quiser fazer um ótimo aplicativo que é executado rápido e funciona (sem bugs permitidos) você terá que pensar sobre todos os aspectos de desenvolvimento do seu aplicativo com cuidado. Um dos aspectos que você deve descobrir é como armazenar e procurar grandes quantidades de dados, então você provavelmente usará um banco de dados. As opções mais comuns para bancos de dados iOS são SQLite e Core Data, além de um jogador relativamente mais novo chamado Realm. Este artigo aborda os prós e contras de cada opção e discute o processo de alternar para o Realm se você já estiver usando SQLite ou Core Data. SQLite é o motor de banco de dados mais utilizado no mundo e sua fonte aberta também. Ele implementa um mecanismo de banco de dados SQL transacional sem configuração e nenhum servidor necessário. O SQLite está acessível no Mac OS-X, iOS, Android, Linux e Windows. Ele oferece uma interface de programação simples e amigável, como está escrito em ANSI-C. SQLite também é muito pequeno e leve eo banco de dados completo pode ser armazenado em um arquivo de disco de multi-plataforma. As razões para a grande popularidade do SQLite são: Independência de um servidor Configuração zero Acesso seguro a partir de múltiplos processos e threads Armazena dados em tabelas com uma ou mais colunas que contêm um tipo específico de dados Core Data é a segunda tecnologia de armazenamento principal do iOS Disponíveis para desenvolvedores de aplicativos. Dependendo do tipo de dados e da quantidade de dados que você precisa para gerenciar e armazenar, SQLite e Core Data têm seus prós e contras. Core Data concentra-se mais em objetos do que os métodos tradicionais de banco de dados de tabela. Com Core Data, você está realmente armazenando conteúdo de um objeto que é representado por uma classe em Objective-C. Embora sejam fundamentalmente diferentes, Core dados: Usa mais memória do que SQLite Usa mais espaço de armazenamento do que SQLite Mais rápido em buscar registros do que SQLite Há um novo (ish) player na cidade chamado Realm. O Realm foi projetado para ser mais rápido e eficiente do que as soluções de banco de dados anteriores. Esta nova solução é uma base de dados móvel multiplataforma chamada Realm. Ele está disponível em Objective-C e Swift, e é projetado para iOS e Android. O principal upsides do Realm são: Seu absolutamente livre de carga Rápido e fácil de usar Uso ilimitado Funciona em seu próprio motor de persistência para velocidade e desempenho O que é realmente grande sobre isso é que você pode lidar com todo o trabalho com um par de linhas de código . Realm é muito fácil de instalar e mais rápido para trabalhar em comparação com SQLite e Core Data. Além disso, os arquivos de banco de dados são compartilháveis ​​entre iOS e Android. Se você está projetando um aplicativo com um monte de registros e para um grande número de usuários, você precisa prestar especial atenção à escalabilidade desde o início. O reino é grande neste e permite que você controle muito dados rapidamente. Para começar com o Realm, tudo que você precisa é pelo menos iOS 8 ou OS X 10.9. Versões anteriores não suportam esta nova solução simples para gerenciar armazenamento local e bancos de dados. Mudando para o Realm Se você estiver trabalhando com o Core Data e quiser passar para o Realm, o processo é direto. Muitos desenvolvedores fizeram a viagem em algumas horas. Observe que tanto o Core Data como o Realm tratam os dados como objetos, de modo que o que você precisa fazer é refatorar o código de Dados do Core para usar o Realm. Remova o Core Data Framework. Localize as partes de seu código que incluem código de dados de núcleo e refatorá-los. Elas descrevem um bom truque para lançar um erro de compilador para cada linha de código usando o Core Data Remove o Core Data Setup Code. Theres vai ser uma porção do código de configuração de dados do núcleo em algum lugar em seu aplicativo e você precisa se livrar de tudo. Realm é automaticamente configurado assim que você acessa um objeto Realm pela primeira vez. Você pode escolher onde deseja armazenar o arquivo de dados do Realm, e ele ainda será opcional no tempo de execução. Migrar seus arquivos de modelo. Você pode facilmente converter subclasses de objetos gerenciados para Realm. Realm gerencia internamente as palavras-chave de propriedade (você não precisa especificá-las), o que torna o cabeçalho de classe mais minimalista. Além disso, você pode remover com segurança todos os NSNumber cruft porque Realm suporta dados numéricos simples (NSInteger e CGFloat). Há também limitações para o Reino. Ao contrário dos Core Data cujos objetos possuem NSManagedObjectID para identificar objetos de forma exclusiva, o Realm deixa isso como desenvolvedor. Em segundo lugar, a versão atual do domínio não pode lidar com propriedades de objeto com um valor nulo. Este é um inconveniente menor, mas os desenvolvedores estão prometendo que a próxima versão do Realm não terá esse problema. Migrando suas operações de gravação. Realms salvar operações são um pouco diferentes do que em Core Data e você precisa se familiarizar com isso. Uma vez que os objetos Realm são adicionados a um objeto Realm, eles não podem ser modificados. Isso garante a consistência dos dados em diferentes threads. Para poder modificar as propriedades, o objeto onde elas foram salvas precisa estar em uma transação de gravação. Migre suas consultas para poder recuperar seus dados conforme necessário. Para obter um arquivo, em Core Data você precisa de aproximadamente 10 linhas de código. Em Realm, você pode fazer a mesma coisa com apenas uma linha. Migre os Dados de Produção de Usuários para aplicativos ativos criados em Dados do núcleo, você pode voltar a vincular a estrutura de Dados do núcleo ao aplicativo, buscar dados de usuários e transmiti-los ao Reino. Uma solução mais fácil para os dados dos usuários substituíveis é remover todos os arquivos de dados do Core Data e iniciar a próxima vez que o aplicativo estiver aberto. A chave é manter o seu processo de design simples com as melhores técnicas e ferramentas. Depois de ter investido tempo para configurar o seu processo experimentado e verdadeiro, não deixe a atração para o novo levá-lo fora do curso. Que o novo trabalho seja parte de seu processo e deixe o tempo decidir o que não é digno. Você é um desenvolvedor? Não perca o Boletim Mensal da Comunidade de Desenvolvedores Couchbase, cobrindo as últimas notícias sobre NoSQL e muito mais. Trazido a você em parceria com Couchbase. Como este artigo Leia mais de DZone

No comments:

Post a Comment