Java POJO类和无sql数据存储区

时间:2016-07-27 23:34:42

标签: android json database google-cloud-endpoints pojo

很抱歉,如果这个问题非常基本,但我开始看不到Android应用程序的sql存储,我发现App引擎端点和servlet,据我所知,暴露api进行CRUD操作。

对我来说很难掌握的是存储对象的格式及其效率。我通过使用像objectify / gson这样的库来读取对象存储在json中。

现在,假设我有一个具有属性Friends的Person,它是Person的列表。如果两个不同的人共享同一个朋友,它将被存储在两个不同的json对象中,复制信息。我应该为保存朋友ID的存储创建一个不同的类,然后在加载一个人时从Person的哈希映射中找到他/她的朋友吗?但这意味着要求所有人员使用Web服务构建该地图,即使我只想找到一个没有朋友的人。

另一种方法是进行查询'在服务器端,返回所请求的人的朋友对象,并将他们放在哈希映射中,以便将来查询'其他人通过这种方式,我每次都会传输更少的数据,但是我会消耗更多的web服务,这会导致每日请求限制配额耗尽。

再次抱歉初学者问题。我会很感激任何方向,模式来解决这个问题,简而言之,如何有效地 - 在空间存储对象的意义上并有效地检索它们 - 从Web服务的查询和数据传输量的意义上 - nosql数据库。

1 个答案:

答案 0 :(得分:1)

Google Cloud Endpoints确实允许您通过一个或多个API执行CRUD操作。但是,正如文档(https://cloud.google.com/appengine/docs/java/endpoints/)中所详述的那样,它允许您做更多的事情,例如: " App Engine中提供的所有服务和功能,例如Google云端存储,邮件,任务队列和#34;等

当端点的后端是数据存储区时,您可以使用Objectify。 Objectify是Google推荐的Java开源API。但是,请注意,数据不是作为json存储,而是作为被称为"实体"的数据对象存储。它可以具有不同数据类型的属性。有关详细信息,请参阅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

Romin Irani的教程也是这项技术的绝佳切入点https://rominirani.com/google-cloud-endpoints-tutorial-part-1-b571ad6c7cd2#.p4h8rmkt3有Eclipse和Android Studio的教程(我推荐使用第二篇)。