2015-09-06 1 views
1

Ma question est sur les compteurs partagés et si vous pourriez en avoir trop. notez ci-dessous est juste un exemple composé.pouvez-vous avoir un grand nombre de compteurs fragmentés, c'est-à-dire un grand nombre de types d'entités?

Dites que vous voulez garder un nombre de visites de différentes pages sur votre site. Ainsi, pour éviter la contention de banque de données, vous décidez de partitionner les compteurs d'accès pour chaque page. Maintenant, le nombre de pages augmente, d'où le nombre croissant de compteurs. En supposant que vous suiviez les exemples fragmentés typiques, chaque compteur fragmenté a son propre type permettant de construire une requête qui récupère toutes les entrées soufflant à un type, c'est-à-dire toutes les entités appartenant à ce compteur fragmenté particulier.

Mes questions sont les suivantes:

  1. Est-ce un grand nombre de compteurs (non tessons par contre) ) affecter les performances car il y aura tant de types d'entités?

  2. Est-ce la meilleure pratique? Je veux dire, il semble moche dans la visionneuse de datastore lorsque vous avez des tas de types d'entités que chaque type est un compteur partagé pour une page sur votre site.

  3. Si ce qui précède n'est pas bon, quelle serait la meilleure solution?

Répondre

1

Si vous avez suivi ce que vous appelez les exemples « compteur de tesson typiques », vous pouvez voir qu'il n'y a qu'un seul type de compteur, mais vous pouvez créer des clés de chaîne pour compter des choses différentes. De cette façon, vous n'avez qu'un seul type de ShardCounter dans votre base de données, mais beaucoup d'instances avec des clés de chaînes différentes.

Nous avons un système similaire à celui que vous avez décrit. En utilisant un seul type de compteur, nous comptons plus d'une centaine de types d'événements, totalisant environ un million de visites par jour. Il est donc prudent de supposer qu'il est assez évolutive;)

EDIT a ajouté des contre-exemples de code de la documentation de Google:
Dans le dernier exemple vous voulez un compteur qui a une variable SHARD_KEY_TEMPLATE en haut du code. Ce dernier exemple permet d'avoir différents compteurs avec la même classe de partition.
https://cloud.google.com/appengine/articles/sharding_counters?hl=en

+0

Attendez, je peux avoir besoin de votre aide, je me souviens avoir lu/mise en œuvre, que pour compter le nombre de résultats pour dire « event_a » vous créer un contre-type de nom (par exemple) « event_a_shards ». Ensuite, pour récupérer tous les fragments pour "event_a" vous exécutez une requête pour obtenir toutes les entités avec le type "event_a_shards". D'accord, je pense qu'il y avait un autre type de compteur juste pour garder une trace du nombre de fragments par compteur. Est-ce pas comme ça que tu le fais? Si c'est le cas, vous devez toujours avoir une sorte par compteur. –

+0

Édité la réponse, regardez les exemples dans le lien – MeLight

+0

Merci pour le conseil - c'est génial. Je ne l'ai jamais remarqué parce que j'ai seulement vérifié l'exemple de Java. –