Sorting 谷歌数据存储-索引没有热点的日期创建字段
我正在使用谷歌数据存储,需要查询它来检索一些实体。这些实体将需要按从新到旧排序。我的第一个想法是创建一个包含时间戳的date_属性。然后,我将索引这个字段并在这个字段上排序。这种方法的问题是它会导致数据库中出现热点() 不要使用单调递增的值(例如NOW()时间戳)索引属性。维护这样的索引可能会导致热点,影响高读写速率应用程序的云数据存储延迟Sorting 谷歌数据存储-索引没有热点的日期创建字段,sorting,google-app-engine,indexing,google-cloud-datastore,nosql,Sorting,Google App Engine,Indexing,Google Cloud Datastore,Nosql,我正在使用谷歌数据存储,需要查询它来检索一些实体。这些实体将需要按从新到旧排序。我的第一个想法是创建一个包含时间戳的date_属性。然后,我将索引这个字段并在这个字段上排序。这种方法的问题是它会导致数据库中出现热点() 不要使用单调递增的值(例如NOW()时间戳)索引属性。维护这样的索引可能会导致热点,影响高读写速率应用程序的云数据存储延迟 显然,按日期对数据进行排序是对数据库执行的最常见的排序。如果我不能索引时间戳,有没有其他方法可以完成从最新到最旧的排序,而没有热点?正如您所注意到的,索引单
显然,按日期对数据进行排序是对数据库执行的最常见的排序。如果我不能索引时间戳,有没有其他方法可以完成从最新到最旧的排序,而没有热点?正如您所注意到的,索引单调变化的值不会扩展,并且可能导致热点。这是否会对您造成潜在影响取决于您的具体使用情况 一般来说,此模式的热点是每秒500次写入。如果你知道你肯定会保持这种状态,你可能不需要担心
如果您确实需要每秒超过500次写入,但有一个上限,您可以尝试分片方法。基本上,如果每秒写入的上限是x,那么n=上限(x/500),其中n是碎片的数量。当您写入时间戳时,在开始处加上random(1,n)。这将创建n个随机密钥范围,每个密钥范围每秒最多可执行500次写入。当您查询数据时,您需要发出n个查询,并对结果流进行一些客户端合并。正如您所注意的,索引单调更改的值不会扩展,并且可能导致热点。这是否会对您造成潜在影响取决于您的具体使用情况 一般来说,此模式的热点是每秒500次写入。如果你知道你肯定会保持这种状态,你可能不需要担心
如果您确实需要每秒超过500次写入,但有一个上限,您可以尝试分片方法。基本上,如果每秒写入的上限是x,那么n=上限(x/500),其中n是碎片的数量。当您写入时间戳时,在开始处加上random(1,n)。这将创建n个随机密钥范围,每个密钥范围每秒最多可执行500次写入。查询数据时,需要发出n个查询,并对结果流进行客户端合并。此数字的来源是什么?此数字的来源是什么?