将移动设备连接到数据库,而无需编写服务器代码

哈Ha! 我想分享我使用Foresight移动平台的经验。

如果您面临着无需编写自己的服务器即可远程存储数据的任务,那么想到的第一件事就是Firebase Realtime Database工具。 大多数读者都知道有什么问题,但其余的我会解释。 使用Firebase数据库,您可以NoSql形式远程存储数据。


图片来自firebase


从使用优势:

  • 谷歌支持
  • 无需在基​​础端编写任何代码
  • 快速工作
  • 释放最多5GB
  • 通过大量授权提供程序与Firebase身份验证服务集成
  • 支持android,ios,Unity等
  • 实时同步:更新数据库中的数据时,它们将在客户端中更新

缺点:

  • 当超出空间和服务器负载的既定限制时,您必须支付
  • 无法自定义存储结构

FMP + PostgreSQL


现在,我想告诉您一个我必须使用的替代工具。

我会从远方去。 我在某个地方有一台带有数据库的PostreSQL服务器。 在数据库中,我有一个包含水果的表:



什么是PostreSQL,如何使用它可以在此处阅读。

我的任务是以最少的代码编写尽快在电话上获取此表,并确保每个阶段的安全性。

这是pgAdmin4中的my_table_fruits表:



接下来,我在pgAdmin4树中找到过程。 我正在编写自己的获取表的过程:



该过程将被称为fruits_get_by_color,并将从my_table_fruits表中为我提供某种颜色的水果。

之后,我切换到移动平台的Foresight服务器(以下称为FMF)。 如何部署平台以及您需要什么可以在文档中找到。 FMF是具有连接到数据库服务器的连接器的服务器。 它也可以连接到我们需要的PostgreSQL。 无需为此编写代码。 我需要使用的是通过浏览器管理面板。 输入服务器,数据库的必要地址。 管理面板具有设置和环境树:



您还可以在文档中阅读有关设置的更多信息。

不幸的是,FMF没有任何试用版或免费期限。 而且,FMF部署在客户的安全基础架构中。 因此,我无法提供服务器链接以进行尝试。 但是,要了解工作的实质,以下信息就足够了。

我在环境树中创建一个新环境,例如,我将其称为Leonid_environment。 在环境内部,我创建一个项目,例如Leonid_project。 我进入该项目并在其中创建数据源,在本例中为PostgreSQL。 我输入存储表的服务器和数据库参数:



我进入数据源,然后单击“导入”。 我在源名称中输入我在PostgreSQL中引入的过程的名称,在本例中为Fruits_get_by_color。 对于移动客户端,您可以使用其他名称,尽管不一定。 我将其命名为fruits_get_by_color_for_android:



单击“导入”按钮后,FMF平台将“查看”我们的过程以及必须在此处转移的参数。



特别是,她将看到我们必须传递fruit_color参数:



之后,转到“ API用户”选项卡并创建一个用户。 创建了一个具有Leonid用户名和密码123123的用户:



从这一刻起,您可以转到Android Studio在手机上获取此数据。

FMP + Android


我正在创建一个新项目。 与该平台一起,分发了使用该平台的框架 。 将框架拉入项目文件→导入模块→* .aar



在项目中,我声明了一些常量,可以在其中插入服务器地址,以及发明的环境名称,项目名称,登录名,密码和FMP中的资源名称:

private static final String MY_URL = "http://mobilefmp.dev.fs.world"; private static final VersionAPI MY_VERSION_API = VersionAPI.V_1; private static final String MY_ENVIRONMENT = "Leonid_environment"; private static final String MY_PROJECT = "Leonid_project"; private static final String MY_VERSION = "v1"; private static final String MY_LOGIN = "Leonid"; private static final String MY_PASSWORD = "123123"; private static final String MY_RESOURCE = "fruits_get_by_color_for_android"; 

请注意,我们专门指的是FMP,而不是直接指PostgreSQL。 接下来,创建一个HyperHive对象并填充声明的变量:

 hyperHive = new HyperHiveState(getApplicationContext()) .setHostWithSchema(MY_URL) .setApiVersion(MY_VERSION_API) .setEnvironmentSlug(MY_ENVIRONMENT) .setProjectSlug(MY_PROJECT) .setVersionProject(MY_VERSION) .buildHyperHive(); 

然后,您需要执行授权。 为此,请将用户名和密码传递给auth()方法:

 boolean status = hyperHive.authAPI.auth(MY_LOGIN, MY_PASSWORD, true).execute().isOk(); 

如果为true,则可以查询表的内容,我们将这样做。 在tableStreamCallParams对象中,我们以json的形式传递fruit_color参数,并为其输入黄色值。 让我提醒您,我们创建了一个水果表并在PostreSQL中创建了一个将颜色参数作为输入的过程。 这是在设备上输入此参数所必需的:

  TableStreamCallParams tableStreamCallParams = new TableStreamCallParams(); String data = "{\"fruit_color\": \"yellow\"}"; tableStreamCallParams.setData(data); String status = hyperHive.requestAPI.tableStream(MY_RESOURCE, tableStreamCallParams).execute(); 

请求后,我们转到FMP服务器。 FMP服务器访问PostgreSQL服务器。 结果,我们应该获得黄色水果的列表:



字符串流进SQLite数据库。 在这种情况下,黄色只是香蕉和柠檬。 在正常Internet速度下,在FMF侧上缓存数据的下载速度约为每秒10,000行。

我描述的所有步骤都可以在文档中阅读。 此外,还有有关连接到iO和其他操作系统的信息。

我给出了完整的激活码

我从主线程发出了一个请求,但没有处理错误以减少代码量。

功能性FMP


FMF功能不限于此。 您可以在数据库的服务器端创建一个过程,不仅用于接收,还可以根据传递的值来创建新行。 您可以传递值数组。 限制仅在数据库本身内部。

我将在FMP的主要功能中进行广泛的步骤:

  • 在平台端缓存数据并接收增量(不是整个表,而只是更改的行)
  • 记录用户操作
  • 用户,用户组,设备ID的访问控制
  • 通过LDAP进行身份验证
  • 与SMTP,Citrix XenMobile,Sentry集成
  • CryptoPro证书颁发机构中的数据签名
  • 文件存储不是FMF的一面
  • FMP端的本地数据库(您不能连接到第三方数据库,而只能在Firebase中本地创建数据库)
  • Firebase Cloud Messaging,Apple Push Notification和Windows Push Notification的连接器。 创建邮件列表和推送通知模板

有以下框架:

  • 安卓
  • ios
  • 超人
  • WinCE的
  • 旗鱼,极光(俄罗斯旗鱼)

有以下连接器:


FMP的优缺点


我将给出从我的观点来看的利弊。 根据项目的具体情况和规模,我认为您不会同意所有事情。

优点:

  • 无需编写服务器代码,就可以连接到数据库服务器
  • 大量连接到其他来源的连接器
  • 大多数移动操作系统的框架的存在
  • 俄语支持服务

缺点:

  • 费用
  • 商业客户导向
  • 没有免费试用期

结论


FMF平台与Firebase实时数据库的比较“牵强”,因为 我至少想与熟悉的android和iOs开发人员进行比较。 实际上,PMF的功能和用途略有不同。 竞争对手包括SAP移动平台,IBM第一个移动平台Optimum CDC。

最后,我想说的是,如果您具备以下条件,则值得关注FMF:

  • 相当大的客户愿意为系统付费
  • 谁不想在移动设备和数据库服务器之间写一个层
  • 其中包含大量数据,例如货物仓库
  • 为此,必须使用俄语软件
  • 数据保护在其中起着重要作用

Source: https://habr.com/ru/post/zh-CN463437/


All Articles