JDBC vs Servicio Web para Android

¿Puede alguien responder en mi dilema qué método utilizar para conectar el dispositivo Android a mySQL o Postgresql?

Puedo hacerlo en ambos sentidos sin errores y problemas, sin diferencia notable, pero todos recomiendan el servicio web en lugar de usar el controlador jdbc y la conexión directa,

¿Puede alguien explicar por qué con algunos hechos?

EDIT: No mencioné que es más simple y necesita menos tiempo para hacerlo sobre jdbc. Entonces, ¿por qué servicio web, o por qué no?

Crees que es más sencillo y rápido hacerlo con JDBC porque no estás considerando el entorno operativo real de teléfonos y dispositivos portátiles. A menudo tienen conectividad flakey a través de proxy de reescritura de tráfico buggy y firewalls insanos. Por lo general, utilizan una capa de transporte de red que tiene altas y variables tasas de pérdida de paquetes y latencias que varían en muchos órdenes de magnitud en períodos cortos de tiempo. TCP realmente no es grande en este ambiente y en particular las luchas con conexiones de larga duración.

El principal beneficio de un servicio web es que:

  • Tiene conexiones de corta duración con un estado mínimo, por lo que es fácil volver a donde estaba cuando el dispositivo cambia las redes WiFi, a / desde celular, pierde brevemente la conectividad, etc; y

  • Puede pasar por todos los proxies web, excepto los más horribles y draconianos

Rutinariamente encontrará problemas con una conexión JDBC directa. Uno de los desafíos es desconectar las conexiones muertas, restablecer las sesiones y liberar bloqueos en la sesión anterior (ya que el servidor no puede decidir que está muerto al mismo tiempo que el cliente). Otro es la pérdida de paquetes que provoca operaciones muy lentas, transacciones de base de datos de larga ejecución y problemas consecuentes con duraciones de bloqueo y tareas de limpieza transaccional. También conocerá cada variedad de proxy y firewall dañados y rotos bajo el sol – los proxies que soportan CONNECT pero luego resultan asumir que todo el tráfico es HTTPs y mangle si no lo es; Firewalls con seguimiento de conexión con estado de buggy que causan que las conexiones fallen o vayan a un estado de zombi medio abierto; Cada problema de NAT que puedas imaginar; Los transportistas "provechosamente" generan TCP ACKs para reducir la latencia, sin importar los problemas que causa el descubrimiento de pérdida de paquetes y el dimensionamiento de ventanas; Bloqueo de puertos extravagantes; Etc.

Debido a que todo el mundo usa HTTP, puede esperar que funcione – al menos, mucho más a menudo que cualquier otra cosa. Esto es particularmente cierto ahora que los sitios web comunes utilizan el estilo de comunicación REST + JSON incluso en aplicaciones web para móviles.

También puede escribir sus llamadas de servicio web para que sean idempotentes usando tokens de solicitud únicos. Eso le permite a su aplicación volver a enviar solicitudes de modificación sin temor a que realice una acción contra la base de datos dos veces. Vea idempotencia y definición de idempotencia .

En serio, JDBC de un dispositivo móvil podría parecer una buena idea ahora – pero la única manera que incluso consideraría que sería si los dispositivos móviles estaban todos en una sola red WiFi de alta fiabilidad bajo mi control directo. Incluso entonces lo evitaría por razones de gestión del rendimiento de la base de datos si pudiera. Puede utilizar algo como PgBouncer para unir conexiones entre muchos dispositivos en el lado del servidor para que la agrupación de conexiones no sea un gran problema, pero la limpieza de las conexiones perdidas y abandonadas es, como es el tráfico tcp keepalive requerido para que funcione y el largo estancado Transacciones de conexiones abandonadas.

Puedo pensar en algunas razones

  1. JDBC android controlador de apoyo para su base de datos.
  2. El agrupamiento de conexiones a través de varios dispositivos Android dificulta el monitoreo y la limitación de los mismos.
  3. Los conjuntos de resultados enviados desde el DB a android consumirán mucho ancho de banda y energía de la batería .
  4. Los proxies generalmente permiten el acceso HTTP a su dispositivo.
  5. Exponer su base de datos directamente al cliente tiene implicaciones de seguridad .

Los servicios web pueden proporcionar funciones adicionales en la parte superior de la conexión JDBC, como autenticación / calidad de servicio / autorización / solicitudes GET condicionales, etc. JDBC no puede realizar ninguna de estas funciones.

Además de todas las cosas que dijo Craig Ringer, que estoy completamente de acuerdo, JDBC tiene otro problema: forzará a exponer su base de datos al mundo. Si desea que los dispositivos Android lo accedan, deberá proporcionar a su aplicación credenciales de base de datos y la base de datos tendrá que tener acceso público.

El uso de una API WebService o RESTful es claramente el camino a seguir para que su aplicación sea segura.

Otra opción sería utilizar una herramienta de sincronización de base de datos como SymmetricDS.

Esto le permitiría tener una base de datos Postgres en su servidor, y una base de datos SQLite en su tableta.

SymmetricDS sincronizará las bases de datos a través de HTTP, cuando haya una conexión disponible. Usted no tiene que sincronizar todo el db, por supuesto, sólo las partes pertinentes.

(No estoy afiliado a SymmetricDS)

  • ¿La mejor práctica para implementar retroalimentación de retorno a la actividad recreada?
  • Cómo alojar un servicio web java RESTful para la aplicación android
  • Ksoap2 casting getResponse ()
  • Necesidad de transferir el archivo .apk mediante webservice
  • ¿Cómo conectar el teléfono de android a un servicio de la tela funcionado en el servidor local?
  • Cliente Android para servicio web REST con seguridad básica
  • Utilizar el cursor para consultar desde el motor de aplicaciones de Google en android
  • ¿Hay alguna forma sólida de hacer frente a la autenticación integrada de Windows (NTLM) desde una aplicación de Android?
  • Autenticación de Facebook para el servicio JSON con la aplicación Android
  • Creación de un WebService ASP.net que devuelve JSON en lugar de XML
  • JSON Cadena devuelta desde el servicio web SOAP que no contiene registros para la tabla
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.