SQLite против памяти - PullRequest
       2

SQLite против памяти

0 голосов
/ 24 мая 2011

У меня ситуация с моим приложением.

Предположим, у меня есть 6 пользователей, у каждого пользователя может быть до 9 баллов (т.е. набрать 1000 баллов в 20:00 с набранным золотом 3, серебро 4 и т. Д.), Скажем, балл за этап и 9 этапов.

Все эти оценки берутся из вызова API, поэтому он может обновляться с интервалом 3 + минуты.

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

Все эти 6 пользователей и их записи о результатах уже находятся в базе данных, которые обновляются в случае необходимости после вызова API.

Теперь мои вопросы:

Является ли это лучшим способом для такого рода данных (здесь приведены данные о баллах), чтобы хранить все данные для всех 6 пользователей в памяти в NSArray или NSDictionary и находить минимальные и максимальные значения в этом массиве с помощью алгоритма min-max .

OR

Это должно быть взято из базы данных с помощью запроса типа «WHERE счет <= 200» И «WHERE счет> = 200», короче, 2 запроса к базе данных, которые возвращают ближайшие минимальную и максимальную записи каждый, и не сохраняя все данные в памяти.

На что мы обращаем внимание - это скорость и использование памяти. Дело в том, будет ли вызов БД быстрым и эффективным, чтобы найти min и max ИЛИ поиск min, max в массиве всех записей из DB. Все записи могут быть 6 пользователей * 9 баллов для каждого = 54. Время обновления записей может составлять 3+ минуты. Частота нахождения min max для определенных значений высока.

Пожалуйста, спросите, требуются ли какие-либо дополнительные сведения. Заранее спасибо.

1 Ответ

1 голос
/ 24 мая 2011

Вы работаете с таким небольшим количеством данных, что я не думаю, что о нем стоит беспокоиться.Делайте то, что делает ваш процесс разработки максимально простым!

Редактировать:

Если бы у меня было много данных (сотни конкурентов), я бы использовал SQLite.Вы можете выполнять запросы, подобные следующим:

SELECT MIN(`score`) FROM `T_SCORE` WHERE `stage` = '4';

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

Мой SQL-fu не самый крутой, но я думаю, что вы также можете сделать это:

SELECT `stage`, MIN(`score`) AS min, MAX(`score`) AS max FROM `T_SCORE` GROUP BY `stage`

Это будет делать все вычисления в одном запросе.

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