JeuWeb - Crée ton jeu par navigateur
Tout sérializer avant de mettre dans la base de données - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Tout sérializer avant de mettre dans la base de données (/showthread.php?tid=6646)

Pages : 1 2 3


RE: Tout sérializer avant de mettre dans la base de données - Sephi-Chan - 24-02-2013

Du coup, faire du quick'n'dirty qui n'est pas spécialement quick, c'est plus une entrave qu'autre chose. :/

L'argument des nombres de colonnes est plutôt fumeux. Parfois il vaut juste mieux utiliser des lignes dans une table qu'on joint. Une table pour les bâtiments, une table pour les ressources, une table dont chaque entrée lie une ressource à un bâtiment en indiquant la valeur de la consommation/production (selon le signe du nombre) et c'est torché : bien conçu, évolutif. Et c'est trivial à optimiser en terme de performances si le besoin s'en fait sentir (il ne faut pas le faire avant que ça devienne un problème, sinon c'est de l'optimisation prématurée et c'est tout aussi mauvais).


RE: Tout sérializer avant de mettre dans la base de données - Kroc - 24-02-2013

Ah... Je n'avais pas pensé que tu pouvais écrire toi même le code de sérialisation/désérialisation. Et en effet, ça limite beaucoup l'intérêt.

Mais j'imagine que la plus part des langages (?) proposent un moyen de sérialiser en étant un peut plus robuste que ce que tu décris sans avoir à écrire de code.
Dans le cas du java que j'utilise, il y a en standard 2 sérialisations possibles (binaire ou xml) et plusieurs autres solutions que l'on pourra trouver dans d'autres librairies.

N'y a t'il pas moyen de sérialiser des classes en JSON, ça aurais l'avantage de ne nécessiter aucun traitement avant l'envoi au client ?

Donc oui, l'écriture de code pour sérialiser ses données dans un blob, n'a pas d'avantage. Je suis d'accord.


RE: Tout sérializer avant de mettre dans la base de données - Sephi-Chan - 24-02-2013

Avec Ruby on Rails, on peut écrire quelque chose comme :


class Building < ActiveRecord::Base
serialize :hourly_resources
end

Ça permet d'écrire quelque chose comme :


Building.create({
name: 'Gold mine',
level: 1,
hourly_resources: {
gold: +100,
energy: -60
}
})

Le hash hourly_resources est alors automatiquement sérialisé (en YAML) quand l'objet est enregistré, et automatiquement désérialisé quand on récupère l'objet.


Une fois de plus, ce n'est pas une solution que j'encourage, car ça pousse à faire des choses sales et potentiellement délicate à maintenir. Autant opter pour une solution propre (qui aura en plus l'avantage d'être trivial à optimiser). L'expérience du terrain montre qu'il y a des tas de raisons de ne pas le faire.


Et si on veut vraiment le faire, autant opter pour une base qui supporte nativement ce genre de choses. Parmi les bases SQL, PostgreSQL le permet (mais sans pouvoir requêter sur le contenu du JSON). Et toutes les bases orientées documents le permettent (tout en pouvant requêter sur le contenu du JSON).


RE: Tout sérializer avant de mettre dans la base de données - Xenos - 25-02-2013

Pour PHP, tu peux essayer serialize ou var_export.
Et oui, quick & dirt, c'est quick au début, mais c'est dirt, donc ca n'est plus quick après :p


RE: Tout sérializer avant de mettre dans la base de données - niahoo - 25-02-2013

Aaaaah cool pour postgresql je me suis justement basé dessus pour mon prototype Smile Je vais pouvoir stocker des JSON venant du client par exemple des presets de config pour telle unité ou tel bâtiment.

Par contre pour mettre des array dans un champ en les serialisant je dirais un peu comme les autres : soit tu utilises une base de données qui gère ça bien, logiquement une base NoSQL, ce qui signifie que tu as un modèle de relations léger, soit tu ne le fais pas, autant utiliser un ORM sympa qui va gérer ça à ta place.


RE: Tout sérializer avant de mettre dans la base de données - Sephi-Chan - 25-02-2013

Tu peux aussi stocker des tableaux (même multidimensionnels) dans PostgreSQL. On peut requêter sur les éléments et s'en servir dans les conditions.

C'est vraiment un SGBDR à 1000 lieues de MySQL. On se ferait beaucoup moins chier pour bien des choses en l'utilisant. Smile


RE: Tout sérializer avant de mettre dans la base de données - niahoo - 25-02-2013

(25-02-2013, 11:05 AM)Sephi-Chan a écrit : C'est vraiment un SGBDR à 1000 lieues de MySQL. On se fait beaucoup moins chier pour bien des choses en l'utilisant. Smile

Je l'utiliser autant au taf que pour mes projets perso Smile Il est gratuit et disponible sur pas mal d'hébergements.