2016-07-27 1 views
0

Désolé si cette question est très basique mais j'ai commencé à ne pas voir de stockage SQL pour une application android et j'ai trouvé des terminaux et servlets du moteur App qui, selon moi, exposent une API pour faire des opérations CRUD .Java POJO classes et No SQL Datastores

La chose qu'il est difficile de saisir pour moi est le format des objets stockés et son efficacité. J'ai lu qu'en utilisant des bibliothèques comme objecte/gson les objets sont stockés dans json. Maintenant, supposons que j'ai une classe Class qui a un attribut Friends qui est une liste de Person. Si deux personnes différentes partagent le même ami, elles seront stockées dans deux objets JSON différents, dupliquant l'information. Dois-je faire une classe différente pour le stockage qui conserve l'identifiant des amis et puis lors du chargement d'une personne trouve ses amis à partir d'une carte de hachage de la personne? Mais cela impliquerait de demander à tous les services Web de construire cette carte, même si je veux seulement trouver une personne sans amis. Une autre solution consisterait à créer une 'requête' côté serveur, à renvoyer les objets amis de la personne demandée et à les placer dans une table de hachage pour les futures 'requêtes' d'autres personnes. De cette façon, je transfèrerais moins de données à chaque fois, mais je consommerais plus de fois le service web, ce qui pourrait conduire à épuiser le quota quotidien de limite de demande.

Encore une fois désolé pour la question débutant. J'apprécierais toutes les directions, les schémas pour résoudre ce problème, en un mot comment efficacement - dans le sens des objets de magasin d'espace et les récupérer efficacement - dans le sens de la quantité de requêtes et de transfert de données du service Web dans un base de données nosql.

Répondre

1

En effet, Google Cloud Endpoints vous permettra d'effectuer des opérations CRUD via une ou plusieurs API (s). Mais, comme détaillé dans la documentation (https://cloud.google.com/appengine/docs/java/endpoints/), il vous permet de faire beaucoup plus que cela, par ex. «Tous les services et fonctionnalités disponibles dans App Engine, tels que Google Cloud Storage, Mail, Task Queues» etc.

Vous pouvez utiliser Objectify lorsque l'extrémité arrière de vos terminaux est Datastore. Objectify est l'API open-source pour Java recommandée par Google. Cependant, notez que les données ne sont pas stockées en tant que json mais en tant qu'objets de données appelés «entités» pouvant avoir des propriétés de différents types de données. Voir https://cloud.google.com/appengine/docs/java/datastore/entities pour plus d'informations.

L'approche de la base de données NoSQL est très différente de la base de données relationnelle en ce qui concerne la modélisation de données. Vous ne devriez pas vous soucier de la normalisation de vos données et de stocker les mêmes données plusieurs fois est une approche assez courante.

Dans votre cas, si deux personnes partagent le même ami, vous enregistrez les informations d'ami deux fois, dans chaque entité personne. De cette façon, lorsque vous interrogerez la liste d'amis pour une personne, vous devrez simplement obtenir l'entité personne via Objective sur votre terminal: elle inclura la liste des amis et elle sera automatiquement transformée en JSON lorsqu'elle sera envoyée au premier plan. -fin.

Je vous suggère d'essayer les exemples de Google (https://cloud.google.com/appengine/docs/java/endpoints/helloworld-java-maven) ou encore mieux suivre le Udacity MOOC qui vous aidera à comprendre l'ensemble de la pile https://www.udacity.com/course/developing-scalable-apps-in-java--ud859

Les tutoriels de Romin Irani sont également un excellent point d'entrée à cette technologie https://rominirani.com/google-cloud-endpoints-tutorial-part-1-b571ad6c7cd2#.p4h8rmkt3 Il existe des tutoriels pour Eclipse ainsi que Android Studio (je recommande d'utiliser le second).

+0

Un grand merci pour votre contribution, mais si dans aucun Sql vous pouvez stocker des informations en double, comment puis-je faire face à des incohérences après les mises à jour? Dire que je mets à jour la personne B, je devrais mettre à jour chaque personne qui a B comme ami?Ce n'est pas très efficace – MithPaul

+0

Je pense que vous avez identifié une complexité classique de la modélisation de données NoSQL. Vous pouvez imiter le concept de base de données relationnelle des clés étrangères en stockant les Réf s des amis de la personne dans l'entité personne, voir la documentation Objective sur Entités. Mais dans ce cas, vous devrez aller chercher tous les amis d'une personne quand vous voulez que la personne soit avec tous les amis et cela pourrait avoir un impact important sur la performance. Tout dépend de vos besoins exacts et vous devrez peut-être faire des choix. Il y a une littérature importante sur la philosophie NoSQL sur le web, en particulier sur les compromis comme celui-ci. –

+0

Notez que vous pouvez également utiliser Cloud Endpoints avec Cloud SQL, le «service de base de données MySQL entièrement géré» proposé par GCP. –