Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Основные данные с хранением в памяти

Автор вопроса: diederikhОтветов: 1

Я хочу использовать Core Data в качестве кеша для большего набора данных на сервере базы данных. Не все данные будут в памяти.

Подумав об этом, на ум пришли еще два вопроса:

  1. Можно ли использовать сбой (например, для отношений 1-n) с постоянным хранилищем в памяти, и если да, то как выявлять срабатывание сбоя?

  2. Контекст управляемого объекта основных данных имеет интервал устаревания. Применимо ли это также к хранилищу в памяти?

Или мне следует использовать для этой цели NSAtomicStore?

  • Похоже, что вы действительно хотите реализовать свой собственный уровень хранения: управляемые объекты, которые возвращаются к постоянному хранилищу, которое является вашим сервером базы данных. Sixten Otto 07.11.2009
  • Да, но единственный способ сделать это - NSAtomicStore (в Mac OS X 10.5+), а затем вам нужно загрузить все сразу, AFAIK. diederikh 07.11.2009

objective-ccocoacore-data

Ответы

Ответ 1 · рейтинг 13 · Barry Wark

Ваш первый вопрос предполагает, что вы неверно истолковали намерение постоянных хранилищ типа NSInMemoryStore. Они являются частью постоянного хранилища стека Core Data. Ошибка - это то, что происходит, когда вы переносите экземпляры в контекст управляемого объекта; создается ошибка, которая срабатывает и заполняет себя из кеша NSPersistentStoreCoordinator или основного постоянного хранилища при срабатывании. Хранение в памяти не меняет отношения сбоя. Очевидно, что это не поможет решить вашу проблему, поскольку вам придется сохранить все данные в памяти. Хранилища в памяти действительно подходят для (1) тестирования (они бывают быстрыми) и (2) для чистых стека основных данных, в которых вы хотите использовать управление графом объектов Core Data без необходимости сохранять что-либо на диске.

Отвечая на ваш второй вопрос, ответ - ДА. Интервал устаревания применяется к контексту, а не к постоянному хранилищу.

Итак, подходят ли Core Data для кэширования данных с удаленного сервера базы данных? Не совсем. Хотя Билл Бумгарнер (инженер Apple) намекнул, что это возможно, я обнаружил, что в моем собственном коде намного проще отделить кеширование от управления графом объектов Core Data. По-прежнему очень приятно использовать Core Data для управления графом объектов и для упрощения привязки к слою (-ам) контроллера / пользовательского интерфейса. Итак, моя стратегия - получить данные с сервера базы данных и кэшировать их в моей собственной структуре данных (libcache и NSCache в OS X 10.6 могут стать очень хорошей отправной точкой). Затем решите, что вы хотите от графа объектов, и перенесите это в стек Core Data (поддерживаемый постоянным хранилищем в памяти). Вам придется самостоятельно обрабатывать уведомление об изменении или опрос с сервера базы данных. Когда данные из базы данных изменяются (или изменяется запрос пользователя и т. Д.), Я просто приказываю всем редакторам завершить редактирование, затем стираю контекст и перестраиваю его из (возможно) обновленного кеша.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы