Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: Ckserver en Enero 20, 2018, 08:03:23 PM

Título: DB SQLite o externa (MySQL)?
Publicado por: Ckserver en Enero 20, 2018, 08:03:23 PM
Hola buenas, estoy creando un juego de estrategia y no sé cómo hacer para guardar la información del usuario, ya que será bastante. Os explico un poco: El juego tiene 2 formas de juego; offline y online. En el modo offline, el jugador juega contra la IU. En el online, el jugador juega contra otro, pero cuando está offline. Es decir, si el usuario al que vamos a atacar está online, no se le podría atacar, solo cuando el jugador no se encuentre conectado. 
 
Quiero que puedas jugar al juego sin conexion a internet, jugando al modo offline, es decir, contra la IU. Pero a su vez, que los avances que consigas se guarden también en el modo online. 
 
Se que para ello es necesario un server externo si o si. Como mantener estos servidores vale un dinero, y todavía no se si el juego va a gustar o no y si me va a sacar monetización o no, he pensado en bloquear el modo online hasta que haya jugadores suficientes como para pagar los costes del servidor etc.. 
 
Pero ahora tengo la siguiente duda: Sería suficiente con las librerias SQLite para guardar tanta información? O sea, tienen algun limite la DB interna SQLite en cuanto a capacidad (Gb)? El jugador guardaría info como; nivel, moneda1, moneda2, material1, material2, material3, material4.. vamos, un juego de estrategia tipo castle clash, para que me entendáis. 
 
 
 
Un saludo, espero que podais ayudarme, muchas dudas
Título: DB SQLite o externa (MySQL)?
Publicado por: francoe1 en Enero 20, 2018, 09:01:23 PM
Te estas equivocando en la terminologia, IU << no existe, seria IA o AI (Inteligencia artificial o Artifitial intelligence), por otro lado, creo y por lo redactado no entiendes muy bien la estructura de un modelo de datos relacional, me doy cuenta porque estás consultando sobre el limite de una "Base de datos", lo cual sería un grave error llegar a ese punto.
 
Cuando te refieres a mucha información pasamos a hablar de BIG DATA pero para estar en ese terreno nos falta muchísimo camino por delante, cualquier motor de DDBB que elijas te será de utilidad, podrias utilizar EF + SQL o crear un sistema de guardado basado en JSON, un modo de serialización personalizado o inclusive a través de XML.
 
En cuanto tu juego funcione de forma Offline, podrás dar el paso al online, pero sin ánimos de desilusionarte se va a complicar muchisimo que llegues al exito, debido a que se convierte en un estructura altamente compleja, con sin fin de teorías, problemas  y técnicas que requieren años de estudio y práctica -
 
Que te recomiendo, no pretendas realizar un proyecto tan ambicioso, prueba algo más simple, con sistemas de "Networking" mas básicos como Trades, Compras, etc.
 
En cuanto a la parte técnica, SQLite como cualquier otro motor de base de datos no tiene un limite, o si lo tienes estariamos hablando de 150 terabytes aproximadamente por lo cual no seria un limite para un juego, existen cierto límites atados al host como por ejemplo el fraccionamiento de información que puede hacer que la base de datos se haga cada vez más lenta, pero tambien hablamos de grandes cantidades de información.
 
Por otro lado, por lo general, el limite no es la base de datos sino el Hardware del cliente, por ejemplo un dispositivo android con 4GB ram un Snapdragon 8xx no puede estar trabajando con base de datos SQLite de mas de 20 Gb aprox, por que no cuenta con la memoria ram suficiente para ciertas tareas que se realizan en las consultas -
 
Imaginate que en el peor de los casos el diseño de tu cliente no tiene límites en una sentencia SELECT y superas los 30K registros entonces tendrias un problema grave, suponiendo que cada registro tiene por lo menos 5 columnas.
 
Mi punto de vista, no necesitas base de datos, con JSON podrias guardar toda la información que necesites, y tendrás muchísima más libertad en tipos de datos, por otro lado la modificación de la estructura no te seria un problema, si necesitas cambiar, borrar o agregar un dato no sería tanto problema como lo es con una base de datos, puedes crear relaciones, cargar parcialmente la información requerida y muchisimas cosas mas.
 
MySQL tampoco es una opción válida, dependes de compartir un servidor MySQL con tus clientes, lo que sería un total problema de seguridad - cualquier motor de base de datos SQL Server, MySQL PostgreSQL, etc, no deben tener una conexión al exterior, debido a que son los motores con mayor cantidad de exploit dando vueltas y son los más vulnerables, en 10 minutos que tu servidor este online podrias encontrarte con la DDBB encriptada, truncada, modificada etc... 
Título: DB SQLite o externa (MySQL)?
Publicado por: Ckserver en Enero 21, 2018, 08:00:12 PM
Cita de: francoe1 date=1516478483Te estas equivocando en la terminologia, IU << no existe, seria IA o AI (Inteligencia artificial o Artifitial intelligence), por otro lado, creo y por lo redactado no entiendes muy bien la estructura de un modelo de datos relacional, me doy cuenta porque estás consultando sobre el limite de una "Base de datos", lo cual sería un grave error llegar a ese punto.
   
   
      Cuando te refieres a mucha información pasamos a hablar de BIG DATA pero para estar en ese terreno nos falta muchísimo camino por delante, cualquier motor de DDBB que elijas te será de utilidad, podrias utilizar EF + SQL o crear un sistema de guardado basado en JSON, un modo de serialización personalizado o inclusive a través de XML.
   
   
      En cuanto tu juego funcione de forma Offline, podrás dar el paso al online, pero sin ánimos de desilusionarte se va a complicar muchisimo que llegues al exito, debido a que se convierte en un estructura altamente compleja, con sin fin de teorías, problemas  y técnicas que requieren años de estudio y práctica -
   
   
      Que te recomiendo, no pretendas realizar un proyecto tan ambicioso, prueba algo más simple, con sistemas de "Networking" mas básicos como Trades, Compras, etc.
   
   
      En cuanto a la parte técnica, SQLite como cualquier otro motor de base de datos no tiene un limite, o si lo tienes estariamos hablando de 150 terabytes aproximadamente por lo cual no seria un limite para un juego, existen cierto límites atados al host como por ejemplo el fraccionamiento de información que puede hacer que la base de datos se haga cada vez más lenta, pero tambien hablamos de grandes cantidades de información.
   
   
      Por otro lado, por lo general, el limite no es la base de datos sino el Hardware del cliente, por ejemplo un dispositivo android con 4GB ram un Snapdragon 8xx no puede estar trabajando con base de datos SQLite de mas de 20 Gb aprox, por que no cuenta con la memoria ram suficiente para ciertas tareas que se realizan en las consultas -
   
   
      Imaginate que en el peor de los casos el diseño de tu cliente no tiene límites en una sentencia SELECT y superas los 30K registros entonces tendrias un problema grave, suponiendo que cada registro tiene por lo menos 5 columnas.
   
   
      Mi punto de vista, no necesitas base de datos, con JSON podrias guardar toda la información que necesites, y tendrás muchísima más libertad en tipos de datos, por otro lado la modificación de la estructura no te seria un problema, si necesitas cambiar, borrar o agregar un dato no sería tanto problema como lo es con una base de datos, puedes crear relaciones, cargar parcialmente la información requerida y muchisimas cosas mas.
   
   
      MySQL tampoco es una opción válida, dependes de compartir un servidor MySQL con tus clientes, lo que sería un total problema de seguridad - cualquier motor de base de datos SQL Server, MySQL PostgreSQL, etc, no deben tener una conexión al exterior, debido a que son los motores con mayor cantidad de exploit dando vueltas y son los más vulnerables, en 10 minutos que tu servidor este online podrias encontrarte con la DDBB encriptada, truncada, modificada etc... 
   


Muchas gracias por responder.. la verdad que si, que estoy un poco verde en estas cosas.. Vengo de crear retroservers (habbo holos), que te daban la cms y la db hechas, no tenías más que añadir-borrar ciertos scripts (php y html) e imágenes. Con el xampp y un buen emulador te valía para soportar 70 personas online, sin casi caídas del cliente y si no te pasabas a un VPS o con el mismo IIS de windows te valía para soportar unas 120 personas 24/7 online.
 
Pongamos que quitamos el modo online, solo jugamos contra la IA, hay alguna forma de sobreescribir los datos que vamos guardando en el propio movil con C#?? 
Título: DB SQLite o externa (MySQL)?
Publicado por: FNP en Enero 22, 2018, 01:38:24 PM
A mi me parece (y esto es una opinión muy personal) que SQLite es la base de datos mas "antibase de datos" que se ha inventado. Para mi una BD es una cosa bastante mas seria que te garantiza consistencia de datos, transaccionalidad, integridad referencial, una tipología de datos adecuada y SQLite, hablando en esos términos es un truño, así que puestos a almacenar  datos estructurados que tengan cierto volumen usa otra cosa, JSON, por ejemplo. Usa solo este engendro si no te queda mas remedio que cierta velocidad en la búsquedas, uso de índices, etc.
 
(Igual se me ve el plumero y se nota que le tengo un poco de manía :P)
 
 
Título: DB SQLite o externa (MySQL)?
Publicado por: francoe1 en Enero 23, 2018, 12:52:41 PM
Cita de: Ckserver date=1516561212Muchas gracias por responder.. la verdad que si, que estoy un poco verde en estas cosas.. Vengo de crear retroservers (habbo holos), que te daban la cms y la db hechas, no tenías más que añadir-borrar ciertos scripts (php y html) e imágenes. Con el xampp y un buen emulador te valía para soportar 70 personas online, sin casi caídas del cliente y si no te pasabas a un VPS o con el mismo IIS de windows te valía para soportar unas 120 personas 24/7 online.
   
   
      Pongamos que quitamos el modo online, solo jugamos contra la IA, hay alguna forma de sobreescribir los datos que vamos guardando en el propio movil con C#?? 
   


Si tu tienes un archivos Json para los datos del jugado, el nombre podría estar compuesto por playername.profiler, cargas y guardas la información siempre en el mismo archivo. 
 
Para trabajar con Json te recomiendo una librería LitJson es muy buena y muy simple de utilizar, muchos juegos en el mercado la están utilizando.