Google cloud platform Google云数据存储-索引枚举短列表的可扩展性

Google cloud platform Google云数据存储-索引枚举短列表的可扩展性,google-cloud-platform,google-cloud-datastore,Google Cloud Platform,Google Cloud Datastore,数据存储中索引只能有4-5个可能值的属性是否存在问题?这会导致平板电脑热点吗 我正在考虑一个属性,它有一个字符串值枚举,如“done”、“working”、“complete”。为这样一个属性编制索引的原因是,您可以创建一个复合索引,让您可以查询所有“完成”的实体 是的,如果/当您使用您提到的这些复合索引的查询率很高时,这将是一个问题,如下所示: 不要使用单调递增的值(例如NOW()timestamp)索引属性。维持这样一个指数可能会导致 影响具有以下特性的应用程序的云数据存储延迟的热点 高读

数据存储中索引只能有4-5个可能值的属性是否存在问题?这会导致平板电脑热点吗


我正在考虑一个属性,它有一个字符串值枚举,如“done”、“working”、“complete”。为这样一个属性编制索引的原因是,您可以创建一个复合索引,让您可以查询所有“完成”的实体

是的,如果/当您使用您提到的这些复合索引的查询率很高时,这将是一个问题,如下所示:

  • 不要使用单调递增的值(例如
    NOW()
    timestamp)索引属性。维持这样一个指数可能会导致 影响具有以下特性的应用程序的云数据存储延迟的热点 高读写速率。获取有关处理以下问题的进一步指导: 单调属性,见下文
如果/当您对具有相同属性值的实体的数据存储写入率较高时(例如每秒有100个实体
done
),您也会遇到平板电脑热点问题——这是同一问题的另一个方面。这是在以下章节中提到的案例:

  • 如果您使用单调递增的索引属性(如 时间戳,因为这些属性是索引中行的键 Bigtable中的表

是的,如果/当您使用您提到的这些复合索引的查询率很高时,这将是一个问题,列在:

  • 不要使用单调递增的值(例如
    NOW()
    timestamp)索引属性。维持这样一个指数可能会导致 影响具有以下特性的应用程序的云数据存储延迟的热点 高读写速率。获取有关处理以下问题的进一步指导: 单调属性,见下文
如果/当您对具有相同属性值的实体的数据存储写入率较高时(例如每秒有100个实体
done
),您也会遇到平板电脑热点问题——这是同一问题的另一个方面。这是在以下章节中提到的案例:

  • 如果您使用单调递增的索引属性(如 时间戳,因为这些属性是索引中行的键 Bigtable中的表

TLDR:只要实体键分散,它就可以缩放

博士:

首先考虑索引条目正在写。

我们有类似于:

SomeKind\E1 -> FullEntityKey1
SomeKind\E2 -> FullEntityKey2
SomeKind\E2 -> FullEntityKey3
SomeKind\E3 -> FullEntityKey4
我们注意到,每个单独的索引条目都指向某个实体

就负载分片而言,分片的值如下所示:

SomeKind\E1\FullEntityKey1
SomeKind\E2\FullEntityKey2
SomeKind\E2\FullEntityKey3
SomeKind\E3\FullEntityKey4
现在让我们想象一下,我们正在为实体键使用随机分配的ID(简单来说,范围为[0,2])——我们假设在随机实体ID上的写操作分布均匀

SomeKind\E1\0\RestOfKey1
SomeKind\E2\0\RestOfKey2
SomeKind\E2\1\RestOfKey3
SomeKind\E3\2\RestOfKey4
然后我们可以注意到,对于要分片的负载,有明确的分割点——也就是说,[0,2]个可能的随机id中的每一个都是一个分片,只要写操作以某种方式均匀分布在实体上,系统就可以无限扩展(使随机id更长,以获得更多的分割点/缩放)

因此,is索引枚举值缩放/热插销与被索引的实体键高度相关,这些实体键通常以可共享的方式构造,这意味着相关联的索引项也是可共享的


这并不是说不可能创建可能发生的情况(例如,如果实体键具有单调递增的值(如时间戳)),或者以一小部分密钥为目标,以获得非常高的写入速率——但对于典型的通信模式和实体密钥,这在默认情况下是不会发生的。

TLDR:只要实体密钥分散,它就可以扩展

博士:

首先考虑索引条目正在写。

我们有类似于:

SomeKind\E1 -> FullEntityKey1
SomeKind\E2 -> FullEntityKey2
SomeKind\E2 -> FullEntityKey3
SomeKind\E3 -> FullEntityKey4
我们注意到,每个单独的索引条目都指向某个实体

就负载分片而言,分片的值如下所示:

SomeKind\E1\FullEntityKey1
SomeKind\E2\FullEntityKey2
SomeKind\E2\FullEntityKey3
SomeKind\E3\FullEntityKey4
现在让我们想象一下,我们正在为实体键使用随机分配的ID(简单来说,范围为[0,2])——我们假设在随机实体ID上的写操作分布均匀

SomeKind\E1\0\RestOfKey1
SomeKind\E2\0\RestOfKey2
SomeKind\E2\1\RestOfKey3
SomeKind\E3\2\RestOfKey4
然后我们可以注意到,对于要分片的负载,有明确的分割点——也就是说,[0,2]个可能的随机id中的每一个都是一个分片,只要写操作以某种方式均匀分布在实体上,系统就可以无限扩展(使随机id更长,以获得更多的分割点/缩放)

因此,is索引枚举值缩放/热插销与被索引的实体键高度相关,这些实体键通常以可共享的方式构造,这意味着相关联的索引项也是可共享的


这并不是说不可能创建可能发生的情况(例如,如果实体键具有单调递增的值(如时间戳)),或者以一小部分密钥为目标,以获得非常高的写入速率——但对于典型的流量模式和实体密钥,这在默认情况下是不应该发生的。

但是,我想知道的是,当应用程序有大量读/写时(想想最坏的情况)。因此,从您所说的来看,在我的示例中可能存在热点?很难找到热点-您必须做一些其他错误-建议的索引模式本身不会导致热点。但是,我对规模感到疑惑,比如当应用程序有大量读/写时(想想最坏的情况)。因此,从您所说的来看,在我的示例中可能存在热点?很难找到热点-您必须做一些其他错误-建议的索引模式本身不会导致热点。