我正在使用 Google Datastore,需要查询它来检索一些实体。这些实体需要按从最新到最旧的顺序排序。我的第一个想法是拥有一个包含时间戳的 date_created 属性。然后我会索引该字段并对该字段进行排序。这种方法的问题是它会导致数据库中出现热点(https://cloud.google.com/datastore/docs/best-practices https://cloud.google.com/datastore/docs/best-practices).
不要为具有单调递增值的属性(例如 NOW() 时间戳)建立索引。维护此类索引可能会导致出现热点,从而影响具有高读写速率的应用程序的 Cloud Datastore 延迟。
显然,按日期对数据进行排序是对数据库执行的最常见的排序。如果我无法索引时间戳,是否有另一种方法可以实现在没有热点的情况下将我的查询从最新到最旧进行排序?
正如您所注意到的,索引单调变化的值不会扩展,并且可能导致热点。您是否可能受到此影响取决于您的特定使用情况。
作为一般规则,此模式的热点点是每秒 500 次写入。如果您知道自己肯定会处于这种状态,那么您可能不需要担心。
如果您确实需要每秒超过 500 次写入,但有上限,则可以尝试分片方法。基本上,如果每秒写入次数上限为 x,则 n =上限(x/500),其中 n 是分片数量。当您写入时间戳时,请在开头添加 random(1, n) 。这将创建 n 个随机密钥范围,每个密钥范围每秒最多可执行 500 次写入。当您查询数据时,您需要发出 n 个查询并对结果流进行一些客户端合并。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)