Fritha Alone

Categoría: Programación

Publicado: 16:11 06/03/2011 · Etiquetas: mysql, optimizacion, bases de datos · Categorías: Informática & Tecnología : Programación
Si trabajamos a menudo con bases de datos muy grandes, con multitud de campos con diversos datos, este pequeño truco nos puede servir para mejorar la rapidez de la consultas que hagamos. Primero es necesario comprender la teoría.

(Voy a usar la sintaxis de MySQL porque es donde trabajo normalmente, aunque todo esto es aplicable a otros sistemas, puesto que es mera teoría).

Si queremos seleccionar todos los campos de una tabla o algunos en concreto, y cuando tenemos algun WHERE o LIMIT, normalmente hacemos lo siguiente:



De este modo el motor recorre fila por fila y va extrayendo los datos de cada campo y al final los devuelve, hasta aquí todo bien. Un par de ejemplos más, supongamos la estructura de nuestra tabla tal que:



Si queremos seleccionar el campo3, haríamos lo siguiente:



Pero esta consulta no está optimizada, puesto que el motor primero recorre 'campo1' y 'campo2' y los descarta porque no se los pedimos. Es decir, está obteniendo y descartando continuamente puesto que el 'campo3' está en medio de la fila.



Sabiendo esto, volvamos al primer ejemplo, teníamos:



¿Qué pasa con esta consulta? Pues que al pedirle a MySQL que saque todos los campos con la determinada condición, irá recorriendo la tabla, obteniendo aquellas filas completas cuyos datos no se incluyen en nuestra condición, por lo que es un gasto de recursos innecesario.

Esto se arregla facilmente haciendo lo siguiente:




Nótese que hemos hecho una subconsulta, de modo que primero seleccionamos solamente el campo_indice (que suele y debe estar al principio de tabla), y a continuación lo unimos a nuestra consulta principal, relacionando este índice, con lo que obtenemos todos los datos que necesitamos directamente sin tener que descarta nada (salvo los índices de aquellas filas que no cumplen la condición, pero esto no es optimizable).



No obstante, hay que saber decidir si esto nos sirve o no. Para bases de datos grandes sin duda supone ganar velocidad; sin embargo, en bases de datos pequeñas, hay que saber decidir si el coste de hacer una subconsulta es menor que seleccionar directamente e ir descartando aquello que no necesitamos. Siempre puedes perfilar la aplicación y hacer testing masivo para descubrirlo

Publicado: 18:29 03/03/2011 · Etiquetas: c++, game engine, sdl, udk · Categorías: Videojuegos : Programación
Hace unos meses empecé a ponerme en serio con el tema de la programación de videojuegos. Siempre me han gustado, y he querido dedicarme profesionalmente a este mundillo. Además, se me da bien ser autodidacta, suele aprender todo por mi cuenta. De hecho, este fue uno de los motivos para abandonar la carrera de Ing. Informática (aunque la continuaré el año que viene por la UNED). Ahora mismo estoy trabajando de ingeniero web y me va bastante bien. No obstante, ya veo mi futuro dedicado al desarrollo de videojuegos. Es algo que tengo claro que sea así, y estoy trabajando duro para llevarlo a cabo.

Cuando empecé a estudiar sobre el tema, lo primero que hice fue recopilar información. Por Internet puedes encontrar lo básico, desde cómo se programa un motor gráfico hasta como está estructurada la industria del videojuego por todo el mundo. Está claro que hay muchos apartados en el desarrollo de un videojuego, y muy diferentes entre sí. Yo he decidido centrarme en la programación, todo lo referente a motores gráficos, uso de SDKs, optimización, lenguages de scripting y un larguísimo etcétera.

A continuación os pongo una lista de libros con los que he empezado a estudiar. Recogen lo más básico que hace falta saber para iniciarse en este mundillo. Quién sabe, quizás en el futuro pueda trabajar en alguna empresa y llegar a sacar un videojuego al mercado. Ese, desde luego, sería mi sueño.

1. Professional C++



El lenguaje que más se usa hoy por hoy para el desarrollo es C++. Es esencial dominar a fondo este lenguaje, y para ello hacen falta buenos libros. Este en concreto, de la editorial Wrox americana, es un libro muy básico, que nos enseña las características principales de este lenguaje, y además lleva multitud de programas y ejemplos para practicar. Lo ideal es combinarlo con recursos adicionales en Internet. Hay cientos de páginas con ejercicios de programación, desafíos, foros de consultas y listas de correo.

2. Game Engine Architecture



Este libro es un pozo insondable de sabiduría. He aprendido más con este libro sobre ingeniería del software en 5 meses que en 2 años de carrera. Está escrito Jason Gregory, el Lead Engineer de Naughty Dog, y la verdad es que es un libro esencial si te quieres dedicar a esto. Se centra sobre todo en dar una perspectiva formal de todo lo referente a los motores gráficos, es decir, las bases de un videojuego. Incluye una cantidad insana de esquemas e imágenes, y además, bastante código aplicable a casos reales. Puesto que este tío es el creador básicamente del motor del Uncharted, hay cantidad de imagenes muy instructivas sobre motores gráficos en general, tal y como se desarrollan y usan en la industria real.

3. Professional Visual Studio 2010



Este es más prescindible, pero en general siempre viene bien tener una guia de referencia sobre Visual Studio. Este programa de Microsoft es el que se usa actualmente en la industria para programar videojuegos, y es imprescindible dominarlo si se quiere llegar lejos.

4. Game Coding Complete



Si Game Engine Architecture está más enfocado a los motores gráficos y las bases del videojuego, este libro es el complemento perfecto, puesto que nos muestra técnicas y códigos para capas más superiores del desarrollo. Es un libro largo y complejo, que actúa más como guía de referencia para tenerlo siempre al lado mientras estás diseñando un videojuego.

5. C++ for game programmers



Por último, este libro es una aplicación práctica a lo aprendido en el primero, el cual era básicamente teoría con ejemplos genéricos. Aquí podemos aprender, una vez más con ejemplos reales de la industria, cómo aplicar las técnicas y las características de C++ al desarrollo del videojuego. Además, es el más corto de todos, puesto que está muy sintetizado y no se hace nada tedioso seguirlo.

Todos los libros se pueden conseguir en Amazon a buen precio.

Aunque no sólo de libros y teoría vive el ser humano ¿no? Cuando uno empieza con esto, se da cuenta inmediatamente de que es muy aburrido seguir practicando la teoría si hacer algo "real" relacionado con los videojuegos. Por ello, es también muy importante aplicar todo lo que vas aprendiendo en pequeños desarrollos, y para ello nada mejor que usar cosas que ya estén hechas. Es la mejor manera de aprender, tirarse horas y horas siguiendo tutoriales y sacando pequeños programas que hagan algo. Además es una buena inyección de moral y motivación, parte también esencial.

Algunos motores ya hechos que podemos utilizar son:

SDL: Un clásico. Esta librería para gráficos en 2D es el punto de partida en todo programador, puesto que es muy fácil de usar, y en pocas semanas estaremos desarrollando un videojuego, muy cutre, pero algo es http://www.libsdl.org/

Ogre: Lo mismo que SDL, pero en 3D. Ogre es un motor gráfico muy completo, aunque no es tan fácil de usar (el paso de 2D a 3D es como pasar del parvulario a la universidad). Hay cientos de tutoriales y mucho código por internet, con lo que es fácil tirarse tardes enteras programando como un loco sólo para ver un cielo moviéndose o un terreno "navegable". http://www.ogre3d.org/

UDK: El SDK oficial del Unreal Engine, con el que se pueden hacer cosas muy chulas. Además, lleva editores de mapas, recursos, etc. con lo que podemos usarlo para aprender a usar las herramientas típicas, que aunque no vayamos a ser mapers, por ejemplo, podamos tener nociones básicas de como se hace un mapa, y un largo etcétera. http://www.udk.com/

Otros motores son Crystal Space, ioquake3 (el del Quake 3!) e Irrlicht Engine, con sus respectivas comunidades repletas de ejemplos y código.

http://www.crystalspace3d.org/main/Media
http://ioquake3.org/
http://irrlicht.sourceforge.net/index.html

¡Mucho ánimo si queréis emprender este duro camino!

Blogs en Vandal · Contacto · Denunciar Contenido