为什么要使用网络服务而不是直接为Android应用访问关系数据库?


19

我在网上搜索了如何高效地访问远程位置的中央数据库,并且遇到了使用Web服务而不是直接访问数据库(例如JDBC等)的建议。我想知道这样做的原因以及其他建议。

Answers:


25

添加Web服务层使您有机会使客户端更加轻巧,无论是在所需的CPU能力还是在处理过程中使用的带宽方面。这两个因素对最终用户都非常重要:

  • 使用更少的CPU可以延长电池寿命,
  • 使用更少的带宽可以减少按计划计费的用户的每月付款

通过引入Web应用程序层,您可以将大部分处理从手持移动低功耗,低带宽,低内存客户端转移到具有更多内存的插入式高功率高带宽服务器。需求-一种环境,处理和通信成本仅为客户端成本的一小部分。

但是,等等,还为您提供了一些东西:通过拆分系统,您可以更好地控制业务规则,数据库结构以及现有版本。一旦让移动客户端直接连接到数据库,您的设计就会“嫁接到”该数据库结构:几乎任何更改都会破坏对客户端的向后兼容性,而后者可能不愿升级其应用程序。

相反,在两者之间添加Web服务可以使您以更易于管理的方式将界面扩展到移动客户端:例如,您可以保留旧界面,添加与之“并行”工作的新界面,然后完全在不破坏单个客户端的情况下重组数据库。

如果在设计Web服务时遵循一些非常基本的设计原则,则还可以通过重用已经建立的成熟的服务器端基础结构来获得显着的好处:例如,您可以免费获得缓存和代理服务。

最后,这将为其他开发人员打开大门,使您的应用程序暴露于您无法自行维护的平台上,从而最终发挥了公司的优势。


1
“我一直在寻找关键点:“在所需的CPU功率和处理过程中使用的带宽方面”。谢谢
yesildal 2012年

4
另外,如果您的应用程序直接与数据库通信,那么您只是一个反向编译器,而不会有人删除数据库中的每个表。使用网络应用程序,您可以使用更精细的控制并停止诸如此类的事情
Earlz 2012年

1
@Earlz:并不是我愿意为Webapp这样做,但是大多数数据库服务器确实具有相当扎实的权限。具有删除表权限的Web用户没有借口。
Wyatt Barnett

1
@WyattBarnett好的...如果没有存储过程之类的东西,您将如何允许用户更新其用户资料?拥有对USERS表的读/写权限...阻止他们删除或编辑不属于他们的行..甚至阻止读取不属于他们的行。我很确定没有使用存储过程或诸如此类的数据库服务器就不会有这种细粒度的功能
Earlz 2012年

@Earlz-我所不知道的,但这不是重点-为什么您要直接与数据库对话并故意忽略数据库功能以使之理智?您会做一些以配置文件为中心的工作并以这种方式进行大量更新吗?
怀亚特·巴内特

13

它在应用程序和数据库之间放置了一层抽象层。这为您带来了许多优势,例如:

  • 将对数据库的访问限制为仅应用所需的部分。这既简化了应用程序的代码,又确保了数据库的安全。
  • 由于抽象了数据库的内部工作,因此,如果您以后决定更改架构,查询甚至整个数据库,则只要您正确维护中间层,就不会断开与应用程序的链接。
  • 它使您可以在数据库范围之外添加功能。例如,缓存相当恒定的数据。业务规则是应该与数据库分开的另一部分。

1
另一个优点是,它允许您添加客户端或服务器端的高速缓存(或出于不同的目的两者)。
TMN 2012年

@TMN-好点!
系统停机

好的,但是这些事实也适用于任何类型的Web应用程序,不是吗?插入层(Web服务)是否会增加期望快速响应的移动应用程序的响应时间?
yesildal 2012年

1
@yesildal-是的,它们仍然有效。实际上,它们对所有类型的应用程序都有效。但是,在Web应用程序中,您不必坚持使用Web服务,只需将这些功能隔离到自己的程序集中即可(例如)。对远程应用程序(例如电话应用程序)使用Web服务的原因是数据库服务器距离不近。
系统停机

@yesildal-重新性能:并非如此,如果您有1个用户,则可以,返回结果会有额外的延迟,但是如果您有100万个用户,则情况有所不同,将代码拆分为2个服务器可以使整体性能更快。
gbjbaanb 2012年

4

不直接公开数据库的另一个原因-传输。大多数关系数据库(一种与JDBC交谈的东西)通常都不是为公共Internet设计的。无线互联网是上述公共互联网的可怕的不可靠的终结。异常处理将是噩梦般的,您可能最终会在应用程序内部编写相反的Web服务层,以避免丢失交易。

有一些更新的数据库确实支持HTTP,并且可能适合这种情况。它们还倾向于提供将各种应用程序代码放入数据库中的方法。您可能想看看CouchDb或RavenDb,它们都是具有map / reduce功能的文档db,它们可以在json和http上工作,就像许多现代Web服务一样。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.