Tag: 离线优先

位置跟踪器pt。 1:Swift中的离线优先设计

Location Tracker应用程序的目标是向Swift开发人员展示使用Cloudant跟踪,存储和查询位置有多么简单,同时启用脱机优先设计并提供架构指导以扩展解决方案以支持数百万用户。 在本教程中,我们将向您展示如何构建应用程序以及为实现目标所采用的策略。 我们将向您展示如何将Cloudant Sync用于离线支持和数据同步。 我们将向您展示如何使用Cloudant Geo来执行和可视化地理空间查询。 最后,我们将介绍在以后的教程中将使用的替代体系结构和方法,以向您展示如何扩展应用程序以支持数百万用户。 总览 Location Tracker应用程序是在Swift中开发的iOS应用程序,可跟踪用户位置并将这些位置存储在Cloudant中。 当用户移动并记录新位置时,该应用会查询服务器以获取用户位置附近的兴趣点。 以下是“位置跟踪器”应用的屏幕截图。 蓝色图钉标记应用程序记录的每个位置。 在用户行进的路径上绘制了一条蓝线。 每当Location Tracker应用程序记录新位置时,都会在Cloudant中执行基于半径的地理查询,以查找附近的兴趣点(在应用程序中称为“地点”)。 半径由绿色圆圈表示。 位置显示为绿色图钉: 要求 为了帮助实现我们的目标,我们创建了5个关键要求: 跟踪前台和后台的位置:当应用程序在前台或后台运行时,该应用程序应该能够跟踪用户的位置。 使用地理空间查询来查找指定半径内的兴趣点:该应用程序应向用户展示如何使用Cloudant Geo执行地理空间查询。 脱机运行:该应用程序应能够在脱机时跟踪用户位置,并在网络连接可用时将这些位置同步到Cloudant。 将用户位置信息保密:用户不应有权访问其他用户的位置信息。 提供整合和分析所有位置的能力:后端工程师或数据科学家在不影响第4条要求的情况下,在所有位置执行分析应该很简单。 建筑 为了满足要求4(用户隐私),使用每个用户的数据库设计模式实现了位置跟踪器。 为只有该用户有权访问的每个用户创建一个专用数据库。 运作方式如下: 当用户注册时,Location Tracker应用程序会将用户信息发布到我们的Node.js服务器。 Node.js服务器在“用户”数据库中创建一个新用户。 Node.js服务器创建一个特定于用户的数据库来跟踪用户的位置。 Node.js服务器将数据库名称和身份验证信息返回到应用程序。 该应用程序直接连接到Cloudant以同步位置信息。 稍后我们将详细讨论。 这是系统架构的高级示意图: 除了创建相邻架构图中所示的特定于用户的数据库之外,服务器还为每个特定于用户的数据库配置连续复制到统一数据库( 所有位置 )中。 通过为我们提供一个位置来查询和分析所有用户记录的所有位置,同时又不损害用户安全性和隐私性(没有向用户提供直接访问统一数据库的权限),这满足了要求#5(位置合并和分析)。 注意: “每用户数据库”设计模式使您可以轻松地在iOS应用程序和Cloudant之间同步位置信息,同时确保信息保密。 对于中小型应用程序来说,这是一个很好的解决方案。 在下一个教程中,我们将向您展示复制用户隔离的数据的替代方法,以及如何扩展应用程序以支持数百万个用户。 服务器 Location Tracker Server是一个Node.js应用程序,它提供RESTful API,用于使用Cloudant Geo注册新用户和查询位置。 安装Location Tracker […]

位置跟踪器pt。 2:扩展“每个用户的数据库”模式

想要将您的应用程序扩展到数百万用户,同时保持将私有信息安全可靠地(轻松地!)同步到Cloudant的能力吗? 在本教程中,我们将向您展示如何进行。 在“位置跟踪器”(第1部分)中,我们向您展示了如何创建一个iOS应用程序来跟踪您的位置,与Cloudant同步以及执行地理位置查询以查找附近的兴趣点。 我们向您展示了如何使用每用户数据库设计模式来利用Cloudant强大的同步功能,同时确保用户的位置信息保持私有。 我们还讨论了“每用户数据库”设计模式如何适合中小型应用程序,但是当您希望扩展到数百万个用户时,效果不那么理想。 在本教程中,我们将向您展示如何扩展Location Tracker来做到这一点。 复习 Location Tracker应用程序是在Swift中开发的iOS应用程序,可跟踪用户位置并将这些位置同步到Cloudant。 当用户移动并记录新位置时,该应用会查询服务器以获取用户位置附近的兴趣点。 以下是“位置跟踪器”应用的屏幕截图。 蓝色图钉标记应用程序记录的每个位置。 在用户行进的路径上绘制了一条蓝线。 每次Location Tracker应用程序记录新位置时,都会在Cloudant中执行基于半径的地理查询,以查找附近的兴趣点(在应用程序中称为“地点”)。 半径由绿色圆圈表示。 位置显示为绿色图钉。 在第1部分中,我们确定了Location Tracker应用程序的五个关键要求: 跟踪前景和背景中的位置。 使用地理空间查询来查找指定半径内的兴趣点。 离线运行。 将用户位置信息保密。 提供合并和分析所有位置的功能。 为了满足要求#4和#5,我们实现了每个用户数据库的设计模式。 这是学习如何使用Cloudant Sync同步个人或私有数据的重要第一步,但是当扩展到数百万甚至数万个用户时,此设计会出现问题。 Glynn Bird在这篇文章中指出了使用每个用户数据库模式进行扩展的一些问题: 备份-如何为数百万甚至数千个数据库设计备份和还原计划? 报告-您如何在数百万个数据库中生成报告? 变更控制-如何在数百万个数据库中传播数据更新? 为了帮助提供针对这些问题(以及更多问题)的解决方案,一组IBM员工构建了Cloudant Envoy。 Cloudant Envoy FTW! Cloudant Envoy是一种微服务,可充当您的PouchDB Web应用程序或基于Cloudant Sync的本机应用程序的复制目标。 Envoy允许您的客户端代码采用“每个用户一个数据库”的设计模式,将用户数据的副本存储在移动设备上,并在联机时同步到云中,同时将所有用户的数据无形地存储在一个大空间中。数据库。 这样可以防止在添加用户时发生的数据库激增,并简化备份和服务器端报告。 这就是在GitHub上描述Cloudant Envoy的方式。 让我们分解一下此描述,并解压缩Location Tracker的相关点: Cloudant Envoy是一种微服务,可充当您的PouchDB Web应用程序或基于Cloudant Sync的本机应用程序的复制目标。 在第1部分中,我们展示了Location Tracker iOS应用如何针对Cloudant中特定于用户的数据库进行复制。 […]

构建移动应用程序:首先离线,最后离线!

“由于互联网连接可能不稳定或不存在,因此您需要首先考虑离线:将您的应用编写为没有互联网连接。 一旦您的应用程序脱机工作,请添加您的应用程序所需的任何网络功能,以使其在联机时能做更多。” [来源:脱机优先] 但这很痛苦,对吧? 脱机代码,在线代码,对网络连接的更改做出反应,解决数据冲突,yadda,yadda。 大量的时间和低级的代码花费在移动数据上。 但是,我们必须正确地做。 精心设计的移动应用程序可让用户完成工作,而不会抱怨互联网连接的不足或质量。 在我的工作中,我看到了与Salesforce平台集成的自定义移动应用程序的许多有趣用例,而脱机需求通常最难满足。 因此,我对试用Realm的新对象服务器(其移动平台的后端)非常感兴趣: “ Realm Mobile Platform在服务器和设备之间提供自动和无缝的实时数据同步以及强大的事件处理功能。 您无需再考虑网络代码。 Realm Mobile数据库是跨平台的,同时支持iOS和Android,并且Realm Object Server可以在您的服务器或您喜欢的云上运行。” [来源:Realm Mobile Platform] 听起来很有希望,所以我着手研究如何将Realm Object Server与Salesforce集成。 更具体地说,我想看看是否可以监视通过Realm的示例移动应用程序“ Realm Tasks”进行的数据更改,然后相应地创建和更新Salesforce任务记录。 而且我在短短几分钟内就做到了(好吧,这还不包括阅读Realm文档以及了解如何设置自定义事件监控所需的时间)。 领域对象服务器太棒了! 我在移动设备上修改了数据,该数据几乎立即显示在Realm Object Server中。 我使设备脱机,更新了设备和服务器上的数据,然后看着我重新打开WiFi后毫不费力地同步了本地数据库。 Realm Object Server忠实地通知了我的事件监视器,该事件监视器触发了对Salesforce的API调用。 根本没有用于处理数据同步的代码,只有一个相对简单的Javascript文件即可监视事件并更新Salesforce。 请参阅GitHub上的源代码。