【问题标题】:Bigtable row key design for records with a set field具有设置字段的记录的 Bigtable 行键设计
【发布时间】:2020-10-18 05:36:38
【问题描述】:

我需要提高从 Bigtable 获取数据的服务的性能,并且考虑到所涉及的访问模式和数据,我认为行键设计主要是问题所在。我还需要一种不同服务的性能,该服务可以推送数据以保持一致(或改进)。

这是一个例子(请耐心等待)。我每天收到成批发送的数百万条记录。假设它是每天更新的全球宠物主人信息,每条记录都有这种格式:

  • 名字
  • 姓氏
  • 地址
  • HomeType
  • 宠物

例子:

  • 彼得
  • 谢尔曼
  • 悉尼袋鼠路 42 号
  • 公寓
  • [猫、狗、鱼、鸟、袋鼠]

目前,针对服务的查询类型为(按频率/重要性排序):

  1. 在第 32 天向我提供所有拥有鸟类但不包括鱼或猫的人的宠物主人信息。这是典型的格式 - 即,告诉我拥有该特定宠物的人,而不是这 X 数量的其他宠物.我们经常想排除很多很多宠物。这个世界上的人也可以拥有很多宠物——有时是几十只宠物。
  2. 在第 3 天、第 4 天、第 5 天告诉我,在我为您提供的这 1000 个人中,哪些人是或不是宠物主人。
  3. 从第 7 天到第 20 天,给我所有“新”宠物主人的宠物主人信息。如果在第 7 天有 2 只,而在第 20 天有原来的 2 只中的 1 只加上 1 只新的,请给我1 的信息。

现在行键/列的格式是这样的(列包括所有其他信息):

  • DayX-Pet-FirstName-LastName(答案 1)
  • DayX-FirstName-LastName(答案 2/3)

注意事项:这一天总是很重要的。查询总是围绕一天展开。批次只包含一天的数据,而不是很多(假设很多批次可以同时到达)。此外,无需担心极端情况 - 这个世界上没有人驯养过一种叫做“史蒂夫”的动物,也没有人给他们的孩子取名为“乌鸦”。

今天,对于第一个查询,我们在测试我们正在查看的行是否包含我们想要排除的宠物条目时包含一个列值过滤器(它是一个正则表达式过滤器) - 该集合只是一个字符串。我认为这是我们被搞砸的地方,因为宠物排除清单有时很长。我试过忘记值过滤器,只是自己在内存中进行过滤(这很冒险......零星的内存问题),这改善了请求的周转时间,但我希望我能做得更好。

约束:

  • 目前无法更改数据存储(欢迎提出更好的建议)
  • 将数据推送到 Bigtable 的服务理想情况下应该在大致相同(或更少)的时间内推送大致相同数量(或更少)的数据。可以在更长的时间内推动更多,而不是按数量级。

我的想象力让我失望了。

【问题讨论】:

    标签: hbase google-cloud-bigtable


    【解决方案1】:

    您的问题非常笼统,有很多事情可能会导致 Bigtable 出现性能问题,您可以在此处查阅:

    https://cloud.google.com/bigtable/docs/performance#slower-perf

    请在此处查看 BigTable 的预期性能:

    https://cloud.google.com/bigtable/docs/performance#typical-workloads

    您可以参考此链接测试您的服务功能:

    https://cloud.google.com/bigtable/docs/performance#testing

    以及解决常见问题:

    https://cloud.google.com/bigtable/docs/performance#troubleshooting

    总而言之,this documentation 将极大地帮助您了解 BigTable 的性能影响。

    您也可以考虑按照以下步骤重新设计您的架构: https://cloud.google.com/bigtable/docs/schema-design

    【讨论】:

      猜你喜欢
      • 2012-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多