Хороший способ хранить / читать большое количество строк? - PullRequest
2 голосов
/ 01 января 2012

Я разрабатываю приложение "смешные цитаты" для Android. У меня есть более 1000 цитат, которые я хочу использовать в своем приложении, но я не знаю, следует ли мне использовать базу данных или текстовый файл. Обратите внимание, что приложение не должно читать одно и то же предложение дважды. и у него есть предыдущая / следующая кнопка, поэтому мне нужно отслеживать предыдущие цитаты. пожалуйста, скажите мне, какой из них лучше и оптимизирован. Кроме того, если вы можете связать меня с хорошим руководством по хранению / чтению данных.

спасибо

Ответы [ 4 ]

6 голосов
/ 01 января 2012

Использовать базу данных. Это быстрее и гибче, чем текстовый файл. Однажды вы расширите приложение, и тогда вы будете рады, что использовали базу данных. Я рекомендую при загрузке приложения просто выбирать все строки, используя встроенные случайные функции вашей базы данных. 1000 строк не должны занимать слишком много времени. Затем просто выполните итерацию по полученному ArrayList (или как вы захотите использовать) строк, которые у вас получатся - первая показанная вами кавычка будет элементом 0 из этого списка, вторым элементом 1 из этого списка и так далее. Если вы используете этот подход, вам не понадобится какая-либо другая структура для отслеживания используемых кавычек - просто используйте переменную итератора, которую вы используете для индексации массива кавычек.

fetchAllRows на эта страница , кажется, то, что вы хотите для получения данных.

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

3 голосов
/ 01 января 2012

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

Использование БД усложнит ситуацию.

Я предлагаю вам прочитать плоский файл в байтах, а затем перевести их в объекты StringBuider, что делает его достаточно простымно все еще мешает интенсивному GC ().

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

1 голос
/ 01 января 2012

Рассматривали ли вы CsvJdbc ? У вас есть преимущество простых CSV-файлов с простым путем обновления до реальной базы данных позже, когда у вас есть значительное количество записей.

1k записей довольно мало и, на мой взгляд, недостаточно для того, чтобы заслужить базу данных.

1 голос
/ 01 января 2012

Использование БД должно быть в порядке, так как я думаю, что вы не хотите, чтобы все данные в памяти.Вы можете хранить все кавычки в БД и сохранять флаг, чтобы отслеживать, была ли прочитана кавычка или нет (просто обновите ее до true после прочтения.)

Таким образом, вы можете выбрать любую из кавычек, которые имеютфлаг как ложный.

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