NSArray и SQLite для сложных запросов на iPhone - PullRequest
1 голос
/ 02 мая 2010

Разрабатывая для iPhone, у меня есть набор пунктов, по которым мне нужно делать сложные запросы. Например: «Сколько точек имеют y-координату 10» и «Вернуть все точки с X-координатой от 3 до 5 и y-координатой 7».

В настоящее время я просто перебираю каждый элемент NSArray и проверяю, соответствует ли каждый элемент моему запросу. Хотя писать запросы сложно. SQLite будет намного приятнее. Я не уверен, что будет более эффективным, хотя, поскольку база данных SQLite находится на диске, а не в памяти (насколько я понимаю). Будет ли SQLite таким же эффективным или более эффективным? Или есть лучший способ сделать это, кроме тех методов, о которых я не думал? Мне нужно выполнить несколько запросов с несколькими наборами точек тысячи раз, поэтому важна лучшая производительность.

Ответы [ 3 ]

4 голосов
/ 02 мая 2010

Вы можете использовать SQLite в качестве базы данных в памяти. Просто инициализируйте его именем файла ":memory:". SQLite никогда не будет работать так же хорошо, как тщательно созданные вручную структуры данных, из-за накладных расходов механизма SQL и системы динамических типов. Но он все равно может дать очень хорошие результаты с удобством и полной общностью ad hoc SQL. Вы даже можете добавить индексы в базы данных в памяти, чтобы повысить производительность запросов.

0 голосов
/ 02 мая 2010

Я думаю, что в Core Data и SQLite реализовано кэширование, поэтому вы получаете простоту запросов и мощь реляционной базы данных. Должно быть стоит расследовать.

0 голосов
/ 02 мая 2010

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

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

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