Я использую Core Data для хранения большого количества (1000) элементов. Пара свойств каждого элемента используется для определения уникальности, поэтому, когда появляется новый элемент, я сравниваю его с существующими элементами перед вставкой. Поскольку входящие данные представлены в виде RSS-канала, дубликатов часто много, а стоимость этапа уникальности составляет O(N^2), что стало значительным.
Прямо сейчас я создаю набор существующих элементов, прежде чем перебирать список (возможных) новых элементов. Моя теория состоит в том, что на первой итерации все элементы будут ошибочными, и если предположить, что мы не нуждаемся в памяти, большинство этих элементов останутся резидентными в течение итерации.
Я вижу свои варианты таким образом:
- Используйте сравнение строк для уникальности, повторения всех «новых» элементов и сравнения со всеми существующими элементами (текущий подход).
- Используйте предикат для фильтрации набора существующих элементов по свойствам «новых» элементов.
- Используйте предикат с базовыми данными, чтобы определить уникальность каждого «нового» элемента (без извлечения набора существующих элементов).
Будет ли вариант 3 быстрее, чем мой текущий подход? Вы знаете лучший способ?