Bonjour à tous,
Mon application va devoir charger des données de l'utilisateur qu'il aura lui même configuré via un éditeur en indiquant les le type de base de données, ses coordonnées ainsi que les tables et champs à charger.
Par la suite, il se servira de mon application pour les manipuler.
Par exemple il va définir :
- ip base
- port
- base
- t_clients (id, name)
Une fois configuré j'ai un module qui va être capable d'aller chercher ces données et les transmettre à mon application. Je me pose la question de "comment les stocker".
Intuitivement je verrais bien une structure comme celle-ci
J'avais implémenté ça en C++, mais le fait d'allouer des chaines de caractères "id", "name" pour chaque client faisait exploser la mémoire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 data["t_clients"][0]["id"] = 1 data["t_clients"][0]["name"] = "Pierre" data["t_clients"][1]["id"] = 2 data["t_clients"][1]["name"] = "Paul" data["t_clients"][2]["id"] = 3 data["t_clients"][2]["name"] = "Jacques"
La solution retenue était alors d'utiliser des pointeurs de membres, ce qui revenait plus ou moins (en code approximatif) à ceci :
Et ainsi on alloue autant de chaînes de caractères qu'il n'y a de champ par type de donnée et non par données, ce qui réduisait considérablement la mémoire utilisée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 // données data["t_clients"][0] = [1, "Pierre"]; data["t_clients"][1] = [2, "Paul"]; data["t_clients"][2] = [3, "Jacques"]; // meta data["t_clients"].meta["id"] = 0 data["t_clients"].meta["name"] = 1 // accès function getEntityById(entity, field, id) { var index = data[entity].meta[field]; foreach(c in data[entity]) { if(c[index] == id) return c; } return null; }
Est-ce que je dois me soucier de cela en javascript ?
Question secondaire, est-il possible de gérer toute une multitude de données en javascript au sein d'un navigateur ? Par exemple si j'ai 3 millions de clients qui chacun possèdent une 10ène d'ordres , ça va pas faire planter le navigateur de charger tout ça ?
Merci pour vos réponses,
A bientôt
Partager