Должен ли я использовать Core Data или SQLite для представления структуры графа со взвешенными ребрами? - PullRequest
2 голосов
/ 28 августа 2010

Я создаю приложение для iPhone, которое будет использовать взвешенный график (вероятно, около 1000 узлов и 500-700 взаимосвязей, оценка парка шаров может быть совершенно неверной).

Основные данные были бы замечательными, так как с ними легко работать и они оптимизированы для iPhone. В то же время узлы графа должны быть взвешены. Я мог бы добавить уровень косвенности ( редактирование / уточнение: Я бы представлял взвешенные ребра как отношения.) В базовых данных, но чувствую, что это может победить точку увеличения производительности.

SQLite позволил бы мне сделать это без какого-либо дополнительного косвенного влияния, проблема становится производительностью.

Другое соображение заключается в том, что я использую данные ядра для хранения материала, а затем сохраняю только веса в sqlite в таблицах и создаю пользовательские объекты основных данных, которые при получении или создании создают необходимые ссылки в sqlite, а затем просто используют sqlite для вычисление (так как вычисление будет проходить и смотреть только на веса, поэтому мне ничего не нужно, кроме конечного результата / идентификатора объекта). Затем я бы посмотрел фактический объект в основных данных.

Кроме того, будет сервер, который принимает все графы пользователей в гораздо больший граф. Так что было бы проще использовать sqlite прямо, так как репликация информации на чудовищном сервере была бы проще: -)

Спасибо за помощь.

1 Ответ

1 голос
/ 28 августа 2010

На первый взгляд, Core Data отлично подходит для вашего случая использования, потому что это инфраструктура управления графами объектов (с постоянством).Эти ленивые функции загрузки и кэширования позволяют вам загружать частичный граф в память, что обычно желательно, если у вас большой граф.

Базовые данные не поддерживают взвешенные отношения "из коробки" (яне эксперт по основным данным вообще).Если «уровень косвенности» означает объекты Core Data, представляющие отношения, я согласен с тем, что это приведет к снижению производительности.

Из соображений производительности и переносимости прямой SQLite может быть лучшим выбором, поскольку у вас есть полный контроль над схемами.и индексы.

Я голосую за вашу идею "хранить только веса в sqlite".Насколько я понимаю, это позволяет вам использовать преимущества основных данных, в то же время сохраняя эффективность важных задач.

Автор NetNewsWire написал статью в блоге, объясняющую, почему он отказался от базовых данных (в основном из-засоображения гибкости), которые могут быть полезны для вас.http://inessential.com/2010/02/26/on_switching_away_from_core_data

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...