Отправка 1,2 миллиона записей с помощью приложения для iPhone - PullRequest
4 голосов
/ 04 декабря 2011

У меня есть набор данных из 1,2 миллиона пар ключ-значение.Ключи представляют собой строку (последовательность чисел длиной до 22 символов), а значения представляют собой строки.

Какой лучший способ передать это значение, чтобы можно было быстро найти и получить значение?

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

У меня есть набор данных, сохраненный двумя способами - CSV и таблица базы данных mySQL с 2 столбцами.Я пойду дальше, используя любой метод, который лучше всего подает данные в приложение.

Ответы [ 4 ]

3 голосов
/ 04 декабря 2011

Core Data и SQLite - это два хороших варианта для работы с очень большими наборами данных в iOS.Нетрудно создать модель базовых данных для того типа данных, о котором вы говорите.Затем вы можете скопировать эту модель в небольшую программу командной строки, которую вы напишите, чтобы переместить данные в хранилище Core Data.Затем вы можете переместить полученный файл данных в ресурсы вашего приложения iOS.

Третий вариант, особенно полезный, если данные могут часто меняться, - это создание веб-службы для предоставления данных из службы.Я не думаю, что это то, о чем вы спрашиваете, но стоит подумать, если набор данных очень большой и / или подвержен частым изменениям.

2 голосов
/ 04 декабря 2011

коллекция текстовых файлов может работать хорошо. Вы можете:

  • разделите их на несколько файлов (например, по диапазону начальных символов).
  • упорядочить пары соответственно (например, по номеру символа)
  • и быстро / легко считывать пошагово / порциями в зависимости от ситуации.
  • хорошо балансирует ресурсы между чтением файлов и использованием памяти.
  • Выбор правильной кодировки для строк также может помочь (я бы начал с utf8, если он в основном в ascii).

если вам важен размер дистрибутива, вы можете сжать / распаковать эти файлы.

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

если вы используете типы objc для хранения и / или анализа, то было бы хорошо, чтобы эти файлы были небольшими. если вы используете c или c ++, то это поможет профилировать приложение.

вашему набору данных потребуется до 30 МБ с использованием однобайтовой кодировки 8 бит на символ. один большой файл (опять же, упорядоченный), который вы mmap также заслуживаете рассмотрения. см [NSData initWithContentsOfMappedFile:path];.

0 голосов
/ 04 декабря 2011

Файл sqlite, вероятно, является лучшим выбором. Вы можете создать его на рабочем столе, используя командную строку sqlite3 или любой графический интерфейс sqlite. Убедитесь, что вы проиндексировали ключевой столбец.

Импорт файла CSV, как описано здесь: Импорт файлов CSV в sqlite

Затем просто добавьте базу данных в ваш проект / цель. Однако если вы хотите изменить базу данных во время выполнения, вам придется скопировать ее в ваши документы или каталоги кэша.

Мне нравится fmdb

.
0 голосов
/ 04 декабря 2011

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

  • База данных.
  • Или, если у вас есть критерии сортировки для этих ключей и вы предпочитаете, чтобы файлы plist разбили их на несколько файлов исохранить справочный словарь с ключом начала каждого файла.Напримервсе ключи, начинающиеся с 'abc', входят в a.plist и т. д.

(я не знаю, так ли это с вашим приложением, но вы можете рассмотреть вопрос о переносе данных на сервер и поиске черезвеб-сервис, особенно если ваши данные будут расти.)

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