Предотвращение дублирования при импорте RSS-канала в базовые данные - PullRequest
3 голосов
/ 06 июля 2010

Попытка импортировать RSS-канал в Core Data. Как только они будут импортированы, при попытке обновить канал снова, как я могу наиболее эффективно предотвратить дублирование. Прямо сейчас он проверяет каждый элемент на предмет хранилища данных во время синтаксического анализа, что не очень эффективно.

Я посмотрел образец Top Songs от Apple. Он использует наименее недавно использованный кеш для категорий. Но когда каждый элемент отличается, кеш совсем не помогает.

EDIT: Чтобы уточнить, я уже могу идентифицировать каждый элемент в ленте с помощью guid. Проблема заключается в производительности сравнения сотен элементов с базой данных каждый раз, когда большинство из них являются дубликатами.

Ответы [ 2 ]

12 голосов
/ 06 июля 2010

Когда вы импортируете новую строку, вы можете выполнить запрос к существующим строкам, чтобы выяснить, существует ли она уже на месте.Для этого вы создаете NSFetchRequest для вашей сущности, устанавливаете предикат для поиска свойства guid и устанавливаете максимальное количество возвращаемых строк равным 1.

Я бы порекомендовал сохранить этот NSFetchRequest во время импорта, такчто вы можете использовать его во время импорта.Если NSFetchRequest возвращает строку, вы можете обновить эту строку.Если он не возвращает строку, вы можете вставить новую строку.

Если все сделано правильно, вы найдете производительность более приемлемой.

1 голос
/ 06 июля 2010

Можете ли вы изменить свою базовую модель данных?

Если бы вы могли, я бы добавил свойство "Хеш" к каждой записи фида, чтобы однозначно идентифицировать его. Тогда вы сможете эффективно определить, находится ли конкретная запись в вашей базе данных или нет.

...