Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Java POJO类,无sql数据存储_Android_Json_Database_Google Cloud Endpoints_Pojo - Fatal编程技术网

Android Java POJO类,无sql数据存储

Android Java POJO类,无sql数据存储,android,json,database,google-cloud-endpoints,pojo,Android,Json,Database,Google Cloud Endpoints,Pojo,很抱歉,如果这个问题非常基本,但我开始看到android应用程序没有sql存储,我发现应用程序引擎端点和servlet,据我所知,它们公开了一个api来执行CRUD操作 我很难掌握的是存储对象的格式和效率。我了解到,通过使用objectify/gson等库,对象存储在json中 现在,假设我有一个类Person,它的属性Friends是Person的列表。如果两个不同的人共享同一个朋友,它将存储在两个不同的json对象中,复制信息。我是否应该为保存朋友id的存储创建一个不同的类,然后在加载个人时

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

我很难掌握的是存储对象的格式和效率。我了解到,通过使用objectify/gson等库,对象存储在json中

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

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


再次为初学者的问题感到抱歉。如果有任何解决这个问题的方向和模式,简而言之,如何在nosql数据库中高效地(从空间的角度)存储对象并高效地检索对象(从web服务的查询量和数据传输量的角度)。

事实上,谷歌云端点将允许您通过一个或多个API执行CRUD操作。但是,正如文档()中详细介绍的,它允许您做更多的事情,例如“应用程序引擎中提供的所有服务和功能,如谷歌云存储、邮件、任务队列”等

当端点的后端是数据存储时,可以使用Objectify。Objectify是Google推荐的Java开源API。但是,请注意,数据不是存储为json,而是存储为称为“实体”的数据对象,这些实体可以具有不同数据类型的属性。有关更多信息,请参阅

在数据建模方面,NoSQL数据库的方法与关系数据库非常不同。您不应该关心数据的规范化,将相同的数据多次存储是一种非常常见的方法

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

我建议您尝试一下googleexamples(),或者更好地遵循udacitymooc,这将帮助您理解整个堆栈


Romin Irani的教程也是这项技术的一个很好的切入点。Eclipse和Android Studio都有教程(我建议使用第二个)。

非常感谢您的输入,但是如果没有Sql您可以存储重复信息,我应该如何处理更新后的不一致?假设我更新了B个人,我应该更新每个有B作为朋友的人吗?这不是很有效,我想你已经指出了NoSQL数据建模的典型复杂性。您可以通过在person实体中存储person朋友的引用来模拟关系数据库外键的概念,请参见实体上的Objectify文档。但是在这种情况下,当你想让一个人拥有所有的朋友时,你必须让他拥有所有的朋友,这可能会对你的表现产生重要影响。这完全取决于你的具体需求,你可能不得不做出一些选择。网络上有一篇关于NoSQL理念的重要文献,特别是关于这样的权衡。请注意,您也可以将云端点与云SQL结合使用,云SQL是GCP提供的“完全管理的MySQL数据库服务”。非常感谢您的输入!我会在谷歌上搜索nosql的概念,如果你有推荐的参考资料,我将不胜感激!我发现了一篇启发性的文章: