2013-06-30 2 views
3

Короче говоря: я работаю над реорганизацией старого проекта Android. Раньше она использовала сериализацию, которая была мучительно медленной и, как я читаю, довольно дурной идеей в целом для приложений для Android. Я ищу еще один способ сохранить как пользовательские данные, так и данные только для чтения для приложения.Android - Хранение достоверных объемов данных локально, xml/json или SQLite?

С обеих сторон будет много данных, и я не уверен, есть ли «хороший» способ его сохранить. В основном, приложение представляет собой небольшую RPG. Существует ряд «карт», которые представлены как 2D-массивы Плиток. Каждая Плитка будет иметь ряд атрибутов, некоторые простые примитивы или перечисления, другие дополнительные объекты, такие как События, которые также потенциально могут содержать различные объекты и т. Д. С 400 плитами на карте 20x20 в одиночку есть много данных для хранения. В дополнение к хранению этих данных ему необходимо будет хранить множество пользовательских данных, например, какие Плитки были посещены, какие события были успешно запущены и т. Д.

Я изучал способы сохранения этого данные, и я просто не могу что-то решить. Я думаю, это сводится к XML или JSON против SQLite. XML или JSON были бы более гибкими с точки зрения будущих изменений, что хорошо, так как я хочу гибкости в данных, т. Е. Добавления новых атрибутов к существующим объектам, добавления новых объектов по мере необходимости и т. Д. SQLite не так легко податливы так как вам нужно изменить схему, возможно, настроить запросы и индексы и т. д., но я раньше не использовал SQLite, поэтому, возможно, есть некоторые функции, которые помогают упростить этот процесс. Тем не менее, мне также хотелось бы получить быстрый случайный доступ к данным, чтобы не загружать все в память сразу, если это может помочь. Например, при переходе с одной карты на другую, я бы скорее загрузил следующую карту только тогда, когда это было необходимо, а не все, что хранилось в памяти, где будет сидеть SQLite, поскольку я мог бы напрямую запрашивать данные, а не перемещая файл JSON/XML, чтобы найти потенциально разбросанные данные, т. е. загружать карту, но события и объекты, содержащиеся в событиях, могут быть не уникальными для этой карты и могут легко находиться где-либо еще в файле или в другом файле целиком. Однако нормализация данных в SQLite будет означать много таблиц и довольно немного деконструировать/реконструировать объекты.

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

У меня иногда есть склонность к чрезмерному анализу и зависанию на таких вещах. Возможно, ни один случай не обязательно «неправильный», и я беспокоюсь о вещах, которые являются бесконечно малыми. Возможно, есть другие случаи, которые я не рассматривал. Я использовал Hibernate и рассмотрел что-то вроде ORMLite, чтобы обрабатывать большую часть базы данных nitty-gritty, но для этого потребовалось бы много переоснащения, вероятно, гораздо больше, чем то, что мне нужно было бы сделать для других вариантов.

+0

Вы изучили Active Android? http://www.activeandroid.com/ –

+0

Вы также можете рассмотреть [CouchBaseLite-Android] (https://github.com/couchbase/couchbase-lite-android), что дает вам большую гибкость в содержании, но не позволяет запрос так же легко, как SQLite. Существует также возможность использования каталогов индексной структуры файлов XML/JSON (в отличие от одного массивного файла), например, git делает большой эффект. – Barend

+0

Одним из вариантов является использование нашей виртуальной файловой системы SolFS (https://www.eldos.com/solfs/).Он предлагает гибкое хранилище, теги для файлов и поиск в формате sql-файла. –

ответ

0

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

Насколько вы относитесь к этому не так гибко, я бы сказал, что точка. Просто используйте ContentProvider. ContentProviders упрощают обновление схемы и запросов db, не затрагивая ваши существующие функции. Если вы используете ContentProvider, в будущем вы можете даже перенести постоянные стратегии данных, а также использовать разные одновременно.

http://developer.android.com/guide/topics/providers/content-providers.html

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