2016-07-27 7 views
0

Извините, если этот вопрос очень простой, но я начал видеть отсутствие хранилищ sql для приложения Android, и я нашел конечные точки и сервлеты для приложений приложений, которые, насколько я понял, выставляют api для выполнения операций CRUD ,Java POJO классы и нет sql Datastores

То, что трудно понять для меня, это формат сохраненных объектов и его эффективность. Я читал, что, используя библиотеки, такие как objectify/gson, объекты хранятся в json.

Теперь предположим, что у меня есть класс Person, у которого есть атрибут Friends, который является списком Person. Если у двух разных людей есть один и тот же друг, он будет храниться в двух разных объектах json, дублируя информацию. Должен ли я создать другой класс для хранилища, который хранит идентификатор друзей, а затем при загрузке человека найдет своих друзей с хэш-карты Person? Но это означало бы обращение к Людям с просьбой создать эту карту, даже если я хочу найти Человека без друзей.

Другим способом было бы сделать запрос на стороне сервера, вернуть объекты друзей запрашиваемого лица и поместить их в хэш-карту для будущих «запросов» других лиц. Таким образом, я буду передавать меньше данных каждый раз, но я буду потреблять больше времени в веб-сервисе, который может привести к исчерпанию квоты ограничения ежедневных запросов.

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

ответ

1

Действительно, облачные конечные точки Google позволят вам выполнять операции CRUD через один или несколько API (ов). Но, как подробно описано в документации (https://cloud.google.com/appengine/docs/java/endpoints/), это позволяет делать гораздо больше, чем это, например. «все сервисы и функции, доступные в App Engine, такие как Google Cloud Storage, Mail, Task Queues» и т. д.

Вы можете использовать Objectify, если задним концом ваших конечных точек является хранилище данных. Objectify - это API с открытым исходным кодом для Java, который рекомендуется Google. Однако обратите внимание, что данные не хранятся как json, а как объекты Data, которые называются «Entities», которые могут иметь свойства разных типов данных. См. https://cloud.google.com/appengine/docs/java/datastore/entities для получения дополнительной информации.

Подход к базе данных NoSQL сильно отличается от реляционной базы данных, когда дело доходит до моделирования данных. Вы не должны заботиться о нормализации ваших данных и хранить одни и те же данные несколько раз - довольно общий подход.

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

Я хотел бы предложить вам попробовать примеры Google (https://cloud.google.com/appengine/docs/java/endpoints/helloworld-java-maven) или даже лучше следовать Udacity Mooc, который поможет вам понять весь стек https://www.udacity.com/course/developing-scalable-apps-in-java--ud859

обучающих программ Ромина Ирани также отличная точка входа этой технологии https://rominirani.com/google-cloud-endpoints-tutorial-part-1-b571ad6c7cd2#.p4h8rmkt3 Есть учебники для Eclipse, а также Android Studio (я рекомендую использовать второй).

+0

Большое спасибо за ваш ввод, но если вы не можете хранить дублируемую информацию, как я должен иметь дело с несоответствиями после обновлений? Скажем, я обновляю Person B, я должен обновить каждого человека, у которого есть B как друг?Это не очень эффективно – MithPaul

+0

Я думаю, что вы определили классическую сложность моделирования данных NoSQL. Вы могли бы имитировать концепцию внешних реляционных баз данных, сохраняя ссылку друзей 0 s друзей человека в лицевом объекте, см. «Описать документацию по объектам». Но в этом случае вам нужно будет принести всех друзей человека, когда вы захотите получить человека со всеми друзьями, и это может иметь важное влияние на производительность. Все зависит от ваших конкретных потребностей, и вам, возможно, придется сделать некоторые выборы. В Интернете есть важная литература о философии NoSQL, в частности о компромиссах, подобных этой. –

+0

Обратите внимание, что вы также можете использовать Cloud Endpoints с облачным SQL, «полностью управляемой службой базы данных MySQL», предлагаемой GCP. –