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