He estado haciendo aplicaciones de Mac OS y desarrollo de iOS. ¿Qué tan difícil es cambiar a la programación del lado del servidor?

Hay dos dificultades con respecto a la programación del lado del servidor para un desarrollador actual del lado del clint:

Concurrencia:

Por lo general, en una aplicación cliente, hay dos subprocesos, uno para la red y otro para la interfaz de usuario. Si su aplicación no necesita un acceso a la red, solo necesita uno. Esto se maneja automáticamente con devoluciones de llamada y delegados y no tiene que preocuparse tanto por eso. Juts recuerda volver al hilo principal para cualquier cambio en la interfaz de usuario después de recibir una respuesta de la red.

Esto es mucho más desafiante en el lado del servidor porque tiene miles (o millones) de usuarios que envían solicitudes simultáneamente para recuperar o realizar cambios en su base de datos. Esto puede causar algunas consecuencias no deseadas. Por ejemplo, dos usuarios desean cambiar una fila específica en la base de datos al mismo tiempo. El primero lo recupera y agrega un número (n1) a un valor (v) pero antes de guardarlo, el segundo usuario recupera y agrega otro número (n2). El primer usuario guarda y el segundo usuario guarda después. El problema es que el resultado debería ser v + n1 + n2, pero debido a que el segundo usuario no es consciente de lo que hizo el primer usuario y recuperó v antes de que el primer usuario lo cambie, solo agregará n2 y el resultado final es v + n2.

La solución es que debe tener estos pensamientos al escribir su código y utilizar la serialización en su base de datos con tablas de bloqueo en las transacciones. Hay otras cosas que debe tener en cuenta.

Esquema de base de datos y Quieres

Escribir consultas como SQL es un poco difícil de entender para alguien que piensa en los datos de una manera orientada a objetos. En un DB, son todas las filas y cada columna tiene un valor o es una clave foránea para otra tabla. Imagine que tiene usuarios y que cada uno tiene muchas direcciones. Mientras que en un mundo orientado a objetos, tiene una clase para Usuario que tiene un atributo para direcciones que es una matriz de clase de Dirección, esto no se puede hacer en la base de datos y allí tiene dos tablas para las que una para direcciones tiene una clave foránea para la tabla de usuario. Esto significa que si desea buscar usuarios y recuperar sus direcciones, debe hacer una unión entre estas tablas. Estos conceptos son nuevos para alguien que generalmente escribe códigos del lado del cliente.

Aunque hay algunas herramientas para desarrolladores que asignan tablas de bases de datos a objetos (asignación relacional de objetos u ORM), esto sigue siendo complicado y algunos programadores pueden querer usar sus propias herramientas ORM. Por lo tanto, debe tener en cuenta que los datos no se almacenan como estaba pensando antes.