2015-03-08 4 views
1

Я создал простое приложение, которое каждые несколько секунд считывает данные о местоположении (широта, долгота, скорость, высота), используя GooglApiClient. Я хотел бы записать данные, чтобы я мог рассчитать и показать: расстояние, среднюю скорость, минимальную и максимальную высоту, трассировку на карте и т. Д. В режиме реального времени для пользователя. Какой метод хранения данных будет наилучшим для этой цели? Я не хочу видеть реализацию этого метода от вас, просто хочу знать, какой метод будет лучшим. Я думал о базе данных sqLite, но не слишком медленный и энергопотребляющий для непрерывных операций чтения-записи.Как хранить данные для данных о постоянном местоположении

+0

, где вы достигли этого? был бы признателен, если бы вы ответили :) –

ответ

1

Чтобы ответить на ваш вопрос, я думаю, вам нужно знать больше о том, сколько данных вы собираетесь записывать (как долго вы отслеживаете), что вам нужно делать с данными (все удаленные или отправленные на серверы и т. Д.).) и какие устройства вы нацеливаете. Я думаю, что ваши два варианта: Sqlite или сохранение в виде файла. Обе эти опции должны быть точными с точки зрения мощности и скорости, основной проблемой будет доступ к датчику GPS, а не запись в db или файл.

Если вы решили записать файл, есть не менее 3 (и есть еще много) полезных форматов, которые вы можете передать в файл, о котором вы должны знать. К ним относятся:

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

Geography Markup Language, который является открытым стандартом XML для выражения географических особенностей которой понимается почти все приложения ГИС

GeoJSON, который является стандартом для описания географических объектов в json, который легко визуализировать в веб-браузере.

Если вам нужно, вы можете легко сериализовать из набора данных Sqlite для этих файлов fomats для обмена данными. Одна вещь о потоковой передаче файлов на устройствах Android. Однако вы пишете файл-автору, он может быть произвольно уничтожен ОС из-за условий памяти или приоритетов пользователя. Это может означать, что вы закончите с неверными файлами с потоками, которые не закрыты. Это гораздо менее вероятно, если вы пишете таблицы данных.

1

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

2

Есть четыре способа хранения данных в Android, которые я знаю:

  • таблиц SQLite.
  • Общие предпочтения (по сути, пары ключ-значение).
  • Создание File в зоне хранения.
  • Сериализация объекта на String и сохранение его как пары ключ-значение.

Для вашей цели я бы сказал, что лучший способ - создать таблицы SQLite. Скажем, что ваш собственный объект Location держит latitude и longitude, между прочим. Поэтому, если эти объекты Location преобразуются в строки в таблице, тогда можно легко получить все столбцы этих двух типов данных, то есть все данные позиции для каждого из сохраненных объектов Location.

1

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

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

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

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

Подробнее на:

1

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

Я бы порекомендовал посмотреть библиотеку SnappyDb, которая представляет собой базу данных с ключом.

Либо вы можете иметь дело с каждым из ваших примитивных значений отдельно или обернуть их в POJO, SnappyDB может обрабатывать оба случая. Если вы выбираете первый способ, есть удобные методы для запроса нескольких ключей: keys search.

Кроме того, SnappyDB намного быстрее, чем SQLite (см. Тесты на своей странице). И легко настроить, просто пару строк кода.

Надеюсь, это поможет.

Смежные вопросы