Приложение для моего iPhone использует базу данных SQLite со следующей схемой:
- элементов (id, name, ...) -> эта таблица содержит 50 записей
- тегов (id, name) -> эта таблица содержит 50 записей
- item_tags (id, item_id, tag_id, user_id)
- сходства (id, item1_id, item2_id, Score)
Таблицы элементов, тегов, item_tags и сходств заполняются предварительно определенными записями, поэтому также сходства между различными элементами уже были вычислены в автономном режиме (с использованием алгоритма косинусного сходства на основе тегов элементов).
Пользователи могут добавлять дополнительные теги к элементам и впоследствии удалять свои пользовательские теги. Всякий раз, когда это происходит, показатели сходства между элементами должны обновляться локально, т.е. без обращения к приложению сервера.
Мой вопрос сейчас следующий:
Какой самый эффективный способ сделать это? До сих пор при запуске приложения iPhone я вычислял матрицу терм-документа для всех элементов и тегов (которая отражает частоты тегов для каждого элемента) и сохранял эту матрицу в памяти до тех пор, пока приложение работает. Всякий раз, когда тег добавляется или удаляется, я использую эту матрицу для обновления сходства в базе данных. Однако это довольно неэффективно. У вас есть предложения?
Спасибо!