fen*_*nix 24 mysql postgresql android web-services jdbc
有人可以回答我的困境,用于将Android设备连接到mySQL或Postgresql的方法是什么?
我可以在没有任何错误和问题的情况下以两种方式做到这一点,没有明显的区别但是每个人都推荐Web服务而不是使用jdbc驱动程序和直接连接,
有人可以用一些事实来解释原因吗?
编辑:我没有提到它更简单,需要更少的时间来完成jdbc.那么,为什么是Web服务,或者为什么不呢?
Cra*_*ger 28
您认为使用JDBC更简单,更快捷,因为您没有考虑手机和便携式设备的真实操作环境.他们通常通过错误的流量重写代理和疯狂的防火墙实现连接.它们通常使用网络传输层,该网络传输层具有高且可变的数据包丢失率和延迟,这些延迟在短时间内变化了许多数量级.TCP在这种环境中确实不是很好,特别是与长期连接的斗争.
Web服务的主要优点是:
具有最小状态的短暂连接,因此很容易回到设备切换WiFi网络,进出蜂窝网络,短暂失去连接等的位置; 和
可以通过除了最可怕和最严厉的网络代理之外的所有网络代理
您将经常遇到直接JDBC连接的问题.一个挑战是可靠地超时死连接,重新建立会话和释放旧会话持有的锁(因为服务器可能不会在客户端同时判断它已经死亡).另一个是数据包丢失导致非常慢的操作,长时间运行的数据库事务以及锁定持续时间和事务清理任务的后续问题.您还将遇到各种各样的疯狂和破坏的代理和防火墙 - 支持CONNECT但代之以所有流量都是HTTP并且如果不支持则将其破坏; 具有错误状态连接跟踪的防火墙导致连接失败或进入半开僵尸状态; 您可以想象的每个NAT问题; 运营商"有助于"生成TCP ACK以减少延迟,更不用说导致丢包发现和窗口大小调整的问题; 古怪的港口堵塞; 等等
因为每个人都使用HTTP,所以你可以期望它能够工作 - 至少比其他任何事情都要频繁.现在,即使在移动网络应用中,常见网站也使用REST + JSON通信方式,这一点尤其如此.
您还可以使用唯一请求令牌将您的Web服务调用编写为幂等.这样,您的应用就可以重新发送修改请求,而无需担心它会对数据库执行两次操作.看到幂等性和定义幂等性.
说真的,来自移动设备的JDBC现在看起来可能是一个好主意 - 但我认为唯一的方法就是移动设备都在我直接控制下的单个高可靠WiFi网络上.即便如此,如果可能的话,我会出于数据库性能管理的原因而避免使用它.您可以使用类似PgBouncer之类的东西来集中服务器端的许多设备之间的连接,因此连接池不是一个大问题,但是丢失和放弃连接的清理,以及使其工作所需的tcp keepalive流量和长时间停顿来自废弃连接的交易.
除了 Craig Ringer 所说的所有事情之外,我完全同意,JDBC 还有另一个问题:它会强制将您的数据库暴露给全世界。如果你想让安卓设备访问它,你需要为你的应用程序提供数据库凭据,并且数据库必须具有公共访问权限。
使用 WebService 或 RESTful API 显然是使您的应用程序安全的方法。
我可以想到几个原因
Web服务可以在JDBC连接之上提供额外的功能,例如身份验证/服务质量/授权/条件GET请求/ 错误处理等.JDBC无法执行任何这些功能.
| 归档时间: | 
 | 
| 查看次数: | 15547 次 | 
| 最近记录: |