Go Back   Champions of Regnum > Español > La Taberna

La Taberna Un lugar para conversar sobre casi cualquier tema

 
 
Thread Tools Display Modes
Prev Previous Post   Next Post Next
Old 07-08-2009, 05:50 AM   #14
jeancasius
Pledge
 
Join Date: Aug 2007
Posts: 6
jeancasius is on a distinguished road
Default

Quote:
Originally Posted by ArcticWolf View Post
Les explico como funciona un servidor de un juego genérico (no tiene por qué ser Regnum).

Simple:
El server tiene una copia de los datos en memoria y otra en la base de datos. Como la base de datos es lenta como una tortuga entonces guarda temporalmente todo en memoria, hasta que decide que hay suficiente como para tirárselo a la base de datos. Cuando se cae el server, se borra lo que tenía en la memoria y que todavía no estaba en la base de datos. Es por eso que Surak dice que "no es justo".

Extendido:

Los mensajes llegan a través de un hilo dedicado a la comunicación IO, encargada del envío de datos. Eso se pasa por un parser, que lo tira a un dispatcher (generalmente equipotente para evitar duplicaciones), y luego caen en una queue o cola. Esos datos son leídos por los diversos submotores que componen funcionalidades específicas, como posicionamiento, mobs, recursos, mapa... Pero de algún lado tienen que sacar la información.

Sumado a esto existe algo llamado ORM, que mantiene una abstracción de los datos en la DB como objetos (o structs) en memoria. La idea es que ese ORM es el intermediario entre consultas SQL en crudo y algo más elevado y cercano al lenguaje. Además, las bases de datos profesionales contienen algo llamado transacciones, que permiten que la introducción de datos no cree registros huérfanos o inconsistentes).

¿Pero qué tiene que ver, Xephy? Las bases de datos como MySQL, OracleDB, Informix, PostrgreSQL y muchas más mantienen la seguridad de los datos de esta forma. El problema es que una transacción es segura, pero leeenta. Es por eso que muchas veces los ORMs mantienen los cambios en memoria hasta que cambien lo suficiente y se guarda todo a disco. Eso se llama dirty-triggered flush.

Cuando el servidor colapsa (stack overflow, auto-shutdown, if(ptr){scream(reallyLoud)}), lo más probable es que la capa ORM se muera con parte de los datos sin escribir, o mientras escribía. La base de datos deshace la transacción y se "pierde" información (que en realidad nunca estuvo almacenada, nada más).
me siento como indocumentado hispano cuando lo llevan ante un jez gringo que le habla en otro idioma al suyo y al final mas de lo mismo simplemente que lo pasaron a @~€#~€¬|\@#@.......
jeancasius no ha iniciado sesión   Reply With Quote
 


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 08:37 AM.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
NGD Studios 2002-2024 © All rights reserved