Короче говоря: я работаю над реорганизацией старого проекта 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, но для этого потребовалось бы много переоснащения, вероятно, гораздо больше, чем то, что мне нужно было бы сделать для других вариантов.
Вы изучили Active Android? http://www.activeandroid.com/ –
Вы также можете рассмотреть [CouchBaseLite-Android] (https://github.com/couchbase/couchbase-lite-android), что дает вам большую гибкость в содержании, но не позволяет запрос так же легко, как SQLite. Существует также возможность использования каталогов индексной структуры файлов XML/JSON (в отличие от одного массивного файла), например, git делает большой эффект. – Barend
Одним из вариантов является использование нашей виртуальной файловой системы SolFS (https://www.eldos.com/solfs/).Он предлагает гибкое хранилище, теги для файлов и поиск в формате sql-файла. –