您可以拥有大量的分片计数器,即大量的实体类型吗?

can you have a large number of sharded counters i.e. large number of entity kinds?

我的问题是关于分片计数器以及您是否可以拥有太多。 注意以下只是一个虚构的例子。

假设您想保留网站上不同页面的点击次数。因此,为了防止数据存储区争用,您决定为每个页面拆分命中计数器。现在页数增加了,因此分片计数器的数量也增加了。

假设您遵循典型的分片示例,每个分片计数器都有自己的种类,允许构建一个查询来检索所有条目,即属于该特定分片计数器的所有实体。

我的问题是:

  1. 会不会有大量的计数器(不是每个计数器的分片) ) 影响性能,因为会有这么多的实体种类?

  2. 这是最佳做法吗?我的意思是,当您有大量实体类型时,它在数据存储区查看器中看起来很丑陋,因为每种类型都是您网站上页面的分片计数器。

  3. 如果以上都不好,有什么更好的解决方案?

如果您遵循所谓的 "typical shard counter" 示例,您会看到只有一种计数器类型,但您可以创建不同的字符串键来计算不同的事物。

这样你的数据库中只有一种 ShardCounter 类型,但是有很多实例具有不同的字符串键。

我们有一个类似于您所描述的系统。仅使用一种类型的计数器,我们就可以计算出一百多种事件类型,每天总计约有 100 万次点击。因此可以安全地假设它具有很好的可扩展性;)

编辑 添加了来自 Google 文档的计数器代码示例:
在最后一个示例中,您将在代码顶部创建一个具有 SHARD_KEY_TEMPLATE 变量的计数器。最后一个示例允许使用相同分片 class.
的不同计数器 https://cloud.google.com/appengine/articles/sharding_counters?hl=en