Java POJO类和无sql数据存储



如果这个问题很基本,我很抱歉,但我开始没有看到android应用程序的sql存储,我发现了应用程序引擎端点和servlet,据我所知,它们公开了一个执行CRUD操作的api。

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

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

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

再次对初学者的问题表示抱歉。我希望有任何方向和模式来解决这个问题,简而言之,就是如何在nosql数据库中高效地(从空间的意义上)存储对象并高效地检索它们,从web服务的查询量和数据传输量的意义上来说。

事实上,Google Cloud端点将允许您通过一个或多个API执行CRUD操作。但是,如文件中所述(https://cloud.google.com/appengine/docs/java/endpoints/)它允许你做更多的事情,例如"应用程序引擎中可用的所有服务和功能,如谷歌云存储、邮件、任务队列"等。

当端点的后端是数据存储时,可以使用Objectify。Objectify是Java的开源API,由Google推荐。但是,请注意,数据不是以json的形式存储的,而是以称为"实体"的data对象存储的,这些对象可以具有不同数据类型的属性。看见https://cloud.google.com/appengine/docs/java/datastore/entities了解更多信息。

当涉及到数据建模时,NoSQL数据库的方法与关系数据库非常不同。您不应该关心对数据进行规范化,并且多次存储相同的数据是一种非常常见的方法。

在您的情况下,如果两个人共享同一个朋友,您将在每个人实体中保存两次朋友信息。这样,当你查询一个人的朋友列表时,你只需要通过端点中的Objectify获取个人实体:它将包括朋友列表,发送到前端时会自动转换为JSON。

我建议你试试谷歌的例子(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和AndroidStudio的教程(我建议使用第二个教程)。

最新更新