Passer au contenu principal
Toutes les collectionsQuestions générales
Quelles sont les limites de taille des entités usager?
Quelles sont les limites de taille des entités usager?

Limites de données dans les entités usager et globales.

Jason Liang avatar
Écrit par Jason Liang
Mis à jour cette semaine

Pour MongoDB, la taille maximale du document est de 16 Mo. Vous ne pourrez donc pas créer un objet d'entité de 50 Mo.

Cela dit, ce que nous recommandons est considérablement plus petit.

En général, nous recommandons aux applications de conserver des entités inférieures à 1 Mo. Pour les entités qui seront mises à jour fréquemment, la taille idéale ne doit généralement pas dépasser 50 à 200 Ko. (Les appareils mobiles en particulier peuvent avoir des difficultés à télécharger plus de 200 Ko lors d'une mise à jour). Les entités globales sont toutefois souvent en lecture seule. Ces tailles peuvent donc augmenter si nécessaire. L'utilisation d'entités globales pour stocker des données en lecture seule d'une taille de 1 à 2 Mo sera probablement acceptable. Voici quelques autres directives concernant les entités globales:

  • L'indexation des entités globales est limitée. En général, les performances des entités globales ralentissent après environ 1000 entités, en particulier si vous récupérez des entités à l'aide d'un autre élément que son entityIndexedId, entityId ou son entityType. (Remarque: les nouvelles entités personnalisées corrigent cette limitation.)

  • Pour cette raison, nous ne recommandons pas d'écrire une entité globale pour chaque utilisateur du système (les entités usager et/ou les entités personnalisées possédées sont bien meilleures pour cela).

  • Les mises à jour des entités globales doivent être limitées. Vous ne voulez pas vous retrouver dans une situation où des milliers d'utilisateurs tentent de mettre à jour simultanément la même entité globale.

  • Le système de contrôle de version nécessitera des tonnes de tentatives (ce qui s'aggravera à mesure que la population de votre application augmentera), ou vous perdrez des mises à jour si vous contournez le contrôle de version.

  • Ce problème est particulièrement aggravé si vos entités sont volumineuses. L'appel IncrementGlobalEntityData() constitue une amélioration partielle (mais pas parfaite).

  • Envisagez plutôt d’utiliser des statistiques globales ou des moyens de diviser les données afin que moins d’utilisateurs tentent de mettre à jour une seule entité en même temps.

Quelques directives supplémentaires concernant les entités - elles s'appliquent également à d'autres types d'entités:

  • Plus vos entités sont petites, plus elles seront rapides à lire et à écrire.

  • Plus vous avez d'entités (d'un type), plus il est lent de trouver les entités appropriées à lire ou à écrire. C'est pourquoi vous devez généralement limiter le nombre d'entités globales à quelques centaines ou moins, et le nombre d'entités usager à quelques dizaines (par utilisateur). Remarque: les index personnalisés des entités personnalisées atténuent considérablement ce problème.

  • Il y a donc un rapport de force entre un nombre réduit de grandes entités et un grand nombre de petites entités. Dans la mesure du raisonnable, il est généralement préférable d'avoir davantage de petites entités (mais sans dépasser les limites de "centaines d'entités globales" ou de "dizaines d'entités usager (par utilisateur)").

Conseil de pro: tenez compte des modèles d'accès aux données lors de la conception de vos entités. Par exemple, envisagez de séparer les données en fonction du moment et de la fréquence de mise à jour des données.

Si vous avez un jeu avec exploration, vous souhaiterez peut-être mettre à jour régulièrement l'emplacement, la direction, les statistiques de santé, l'arme actuelle, etc. d'un joueur. Donnez à ces données leur propre entité et mettez-les à jour toutes les 20 secondes +/- - selon ce qui a du sens pour votre jeu. Les données seront petites - probablement moins de 5 Ko.

En particulier, gardez ces données séparées de la structure qui décrit les métadonnées complètes du joueur (son nom, ses classes, ses attributs de spécialisation, son inventaire général, les sorts appris, etc. - des choses qui changent rarement) - ces données pourraient facilement atteindre des centaines de Ko.

Et n'oubliez pas d'envisager les entités personnalisées: ce sont les versions suralimentées des entités globales et usager. Nous les recommandons particulièrement à la place des entités globales, notamment dans les cas où vous disposez de grands ensembles de données avec de nombreuses façons d'accéder à ces données.

Si vous souhaitez stocker des fichiers volumineux, vous pouvez consulter notre service de fichiers. Les fichiers globaux ont une limite de 50 Mo, tandis que les fichiers utilisateur ont une limite de 20 Mo.

Avez-vous trouvé la réponse à votre question ?