2017-10-04 3 views
3

Ainsi, dans la section limites (https://firebase.google.com/docs/firestore/quotas) du nouveau produit Firestore de Firebase il dit:Une clarification limite pour la nouvelle Firestore

vitesse d'écriture maximale à une collection dans laquelle les documents contiennent valeurs séquentielles dans un indexé champ: 500 par seconde

Nous sommes assez confus quant à ce que cela implique réellement. Si nous avons, disons, une collection au niveau racine appelée users avec 10 millions d'entrées, ce taux affectera-t-il cette collection de manière à ce que seulement 500 utilisateurs puissent mettre à jour leurs données en une seconde donnée?

Quelqu'un peut-il clarifier?

+0

Je vous recommande de poser cette question à https://groups.google.com/forum/#!forum/firebase-talk et/ou https://www.reddit.com/r/Firebase/ à la place de StackOverflow, vous aurez une meilleure idée là-bas. StackOverflow est le meilleur pour les questions concernant le code spécifique. En outre, Google prévoit de lever les limites qu'ils ont publiées une fois qu'ils auront obtenu plus de données sur les performances de Firestore en version bêta. – WillB

Répondre

5

Désolé pour la confusion; un exemple pourrait aider.

Si vos documents utilisateur contenaient un horodatage mis à jour en dernier et indexiez sur cet horodatage, chaque nouvelle écriture finirait par se regrouper autour de la même valeur (maintenant) créant un point d'accès dans l'index. De même, si vous attribuez d'une manière ou d'une autre aux utilisateurs une valeur séquentielle comme une ligne ou quelque chose comme cela, cela créerait également un point d'accès. Incidemment, c'est pourquoi les ID de document générés sont des chaînes aléatoires. Cela distribue uniformément les écritures sur l'index de clé primaire.

Si vous évitez ce type de modèles, la limite est le ciel, mais pendant la version bêta, vous atteindrez la limite de la base de données.

+0

C'est un peu flou, car on ne sait pas comment les index sont construits et où les hotspots sont créés. En outre, n'importe quel champ numérique dans les objets peut être considéré comme "séquentiel" puisque vous pouvez trier par ce champ. Je crois par séquentiel que vous vouliez dire les champs des objets mis à jour/écrits pendant une certaine période de temps. Imaginons que j'ai 10000 objets et qu'ils ont tous un champ numérique qui "énumère" tous les objets - de 0 à 9999. Supposons que j'ai créé ces objets dans un ordre aléatoire, donc pas de hotspot, mais si j'ai créé tous les 10K au hasard que 1 seconde cela va créer un hotspot? – frangulyan

+0

Et qu'en est-il du cas où ces objets 10K sont numérotés au hasard entre 0 et 1000'000'000? Est-ce que la mise à jour de tous en moins d'une seconde signifiera toucher toutes les positions d'index, ce qui signifie des hotspots? Cela signifie-t-il que l'on ne devrait pas mettre à jour tous les objets d'une collection en moins d'une seconde s'il y en a plus de 500 ou est-ce que je me trompe sur l'idée derrière les index et les hotspots? Je crois que cela vaut la peine d'expliquer dans les détails aussi dans la documentation. – frangulyan

4

Une petite note supplémentaire: pour le moment toutes les propriétés sont indexées par défaut, donc si vous aviez un horodatage mis à jour en dernier, il serait nécessairement indexé - donc vous ne pourriez pas éviter le hotspot.

L'invalidation de l'index sera disponible sur la route.