Java POJO 类 且无 sql 数据存储

Java POJO classes and No sql Datastores

抱歉,如果这个问题非常基础,但我开始发现 android 应用程序没有 sql 存储空间,而且据我所知,我发现 App 引擎端点和 servlet 公开了 api 进行CRUD操作。

我比较难掌握的是对象存储的格式和效率。我读到,通过使用像 objectify/gson 这样的库,对象存储在 json 中。

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

另一种方法是在服务器端创建 'query',return 被请求的人的好友对象,并将它们放入哈希映射中以备将来使用 'queries'其他人。这样我每次传输的数据会更少,但我会消耗更多次 web 服务,这可能会导致用尽每日请求限制配额。

再次抱歉初学者的问题。我将不胜感激解决此问题的任何方向和模式,简而言之,如何有效地 - 在 space 的意义上 - 存储对象并有效地检索它们 - 在查询量和来自网络的数据传输的意义上服务- 在一个没有sql 的数据库中。

的确 Google Cloud Endpoints 将允许您通过一个或多个 API(s) 进行 CRUD 操作。但是,正如文档 (https://cloud.google.com/appengine/docs/java/endpoints/) 中所详述的那样,它允许您做的远不止这些,例如"all of the services and features available in App Engine, such as Google Cloud Storage, Mail, Task Queues"等

当端点的后端是 Datastore 时,您可以使用 Objectify。 Objectify 是 Google 推荐的 Java 的开源 API。但是,请注意,数据不是存储为 json,而是存储为称为 "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) or even better follow the Udacity MOOC which will help you understanding the entire stack 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 的教程(我推荐使用第二个)。