Подтвердить что ты не робот

Лучший вариант дизайна базы данных для Android-приложения с огромными данными

Я новичок в разработке приложений для Android и новом члене в stackoverflow. В настоящее время я пытаюсь создать рецепт приложения. Я определил особенности приложения и объем, который он охватит. Сфера охвата очень обширна для меня с точки зрения охвата всех рецептов со всего мира. Я должен иметь дело с большим количеством данных в этом процессе.

В настоящее время я пытаюсь понять хороший и эффективный способ обработки данных в моем приложении. До сих пор, согласно тому, что я читал на разных форумах, я считаю, что у меня есть два варианта с точки зрения выбора базы данных: 1) SQLite 2) База данных на удаленном сервере (MySql/Postgre)

Ниже приводятся некоторые мысли, которые были у меня в голове, когда дело доходит до принятия решения между ними:

1) SQLite: Это может быть хорошим вариантом, но будет медленным, так как ему потребуется доступ к файловой системе. Я мог бы устранить медлительность, выполнив задачи выборки данных DB в AsyncTask. Но тогда может быть ограничение хранения на разных телефонах. Также я считаю, что использование SQLite было бы проще по сравнению с использованием удаленного БД.

2) Удаленная база данных. Проблема, которую я вижу здесь, - это медленность с несколькими запросами БД, поступающими одновременно. Могу ли я каким-то образом использовать потоки для очереди на несколько запросов и обрабатывать их один за другим? Есть ли эффективный способ сделать это.

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

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

Спасибо, что прочитали этот длинный пост.

4b9b3361

Ответ 1

Как объединить оба подхода?

  • Локальная база данных SQLite, которая имеет наименее недавно используемые получатели, поэтому вам не нужна сеть все время. Сеть работает медленнее, чем доступ к файловой системе.

  • Некоторая удаленная база данных, доступная через некоторый интерфейс HTTP, где вы можете читать/записывать всю базу данных. И если вы хотите, чтобы пользователи могли добавлять получатели для других пользователей, чтобы увидеть, что вам понадобится внешняя база данных.

SQLite: Это может быть хорошим вариантом, но будет медленным, так как ему потребуется доступ к файловой системе.

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

Но тогда может быть ограничение хранения на разных телефонах

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

Также я считаю, что использование SQLite было бы проще по сравнению с использованием удаленного БД.

Да, у Android есть хороший встроенный SQLite API, но нет удаленного API баз данных. И вам не нужно настраивать сервер базы данных и интерфейс.

Проблема, которую я вижу здесь, - это медленность с несколькими запросами БД, поступающими одновременно.

Достойный сервер базы данных может обрабатывать тысячи запросов. Зависит от вашего аппаратного и программного обеспечения сервера. https://dba.stackexchange.com/ должен иметь больше информации об этом. Требуемая производительность зависит от того, сколько пользователей вы ожидаете.

Я бы предложил простой интерфейс REST для вашей базы данных, поскольку он довольно легкий, но не предоставляет вашу базу данных непосредственно в Интернете. Есть тонны учебных пособий и книги о создании таких интерфейсов для баз данных. Существуют даже сервисы базы данных, такие как nextDb, которые выполняют большую часть работы для вас.

Можно ли сохранить форматирование моих данных?

Вы можете хранить данные в формате HTML в своей базе данных и отображать их в WebView или TextView (через Html#fromHtml()) - оба могут отображать форматированный текст.

Базы данных не заботятся о том, какой тип текста вы храните, для передачи по интернетам вам может понадобиться кодировать текст, чтобы он не мешал форматированию транспорта (XML, JSON,...).

Ответ 2

Простым способом является интеграция Parse в ваше приложение. У них хорошая структура, которая легко интегрируется в iOS и Android. Их план - freemium, поэтому вы сможете использовать до 1 миллиона запросов API бесплатно, а затем его 7 центов за каждый запрос после этого.

У вас будет 1gb для хранения всех ваших наборов данных/изображений и т.д.

Я не использую синтаксический анализ для всего, но я ВЫСОКО рекомендую его для больших схем данных, потому что они делают все масштабирование для вас. Проверьте API, я думаю, что это будет стоить вашего времени.

Я только начал работать над несколькими моими собственными проектами, и я снова использую Parse. Должен сказать, что за последние 6-8 месяцев он значительно улучшился. Особенно с интеграцией Twitter и Facebook.

Ответ 3

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

В отличие от попыток доступа к удаленной базе данных из Android, я предлагаю вам использовать переход между веб-приложением, которое будет обрабатывать запросы из приложения и возвращать объекты JSON, которые вам нужны.

Ответ 4

Это полностью зависит от ваших требований к программному обеспечению. Если вам нужно иметь дело с небольшим количеством данных, тогда вы можете выбрать SQLite, но для огромного объема данных лучше использовать удаленный БД.

SQLite: Он отлично работает с небольшим количеством данных, и я испытал, что время отклика хорошее.

Удаленная БД: Я думаю, что вы можете использовать небольшое серверное приложение для отправки данных в клиентское приложение. Он будет решать/уменьшать связанные с потоком проблемы/сложности.