首页 > 解决方案 > Datastore 模式下的 Firestore:枚举属性值的索引热点与差的索引?

问题描述

我遇到的症状表明,在查询许多其他实体共享的属性时,Datastore 模式下的 Cloud Firestore 可能会很慢。似乎这可能与效率低下的无索引查询(例如,我需要一个复合索引进行此搜索)或索引热点有关(尽管我只能找到建议反对单调递增值的文档,而不是少数枚举值) .

我的情况(简化)如下:

因此,有几种方法可以查询相同的实体(在云控制台中使用 GCL 或通过 Java API):

  1. SELECT * FROM kind WHERE id = '000000'
  2. SELECT * FROM kind WHERE id = '000000' AND first_dig = '0'
  3. SELECT * FROM kind WHERE id = '000000' AND first_dig = '0' AND id2 = '000000'
  4. SELECT * FROM kind WHERE id = '000000' AND first_dig = '0' AND prop1 = 'all'

我发现查询#1 需要 5 秒,#2 需要 15 秒,#3 需要 15 秒,#4 需要约 50 秒。#4 比 #2 慢得多,但 #3 并不比 #2 慢的事实让我认为在搜索时存在索引热点prop1='all'(所有索引条目可能都在同一个平板电脑上),但对于id2='000000'.

我的问题是:

  1. 是什么导致这里的放缓?有什么我错过的吗?
  2. 是否有推荐的做法来查询具有低唯一性的索引属性?

谢谢!

请注意,这是交叉发布到https://groups.google.com/forum/#!topic/google-appengine/91jCVQXZ6tI,但这似乎是一个更合适的地方。

标签: google-cloud-firestoregoogle-cloud-datastore

解决方案



推荐阅读