Kim*_*Kim 2 google-app-engine google-cloud-datastore google-cloud-platform
我的每个实体都由许多单值属性和一个数组组成。
在每个实体中都有一个 unix 纪元时间戳和一个用户 ID。
我的问题是我希望能够进行这种查询
SELECT * FROM <kind> WHERE time >= value AND time <= value and userId = value
问题是我必须创建一个复合索引,但我也阅读了有关爆炸索引和存储空间的内容,但我不太明白。
有人可以向我解释一下,如果创建这样的复合索引是“爆炸式索引”,以及查询是否良好。
爆炸式索引问题(以及相关的存储使用量增长)仅适用于索引中包含多值(数组/重复)属性的情况。由于您的特定查询仅引用单值属性(time和userId),因此相应的索引不会是爆炸式索引。
但是您可能有一个需要考虑的潜在问题:单调time属性可能会在高读/写率下引起麻烦。从索引:
- 不要用单调递增的值(例如 NOW() 时间戳)索引属性。维护此类索引可能会导致热点,从而影响具有高读取和写入速率的应用程序的 Cloud Datastore 延迟。有关处理单调属性的进一步指导,请参阅下面针对窄键范围的高读/写率。
和
同样,如果您需要使用排序或过滤器查询单调递增(或递减)的属性,则可以改为对新属性进行索引,为此,您可以在单调值前面加上一个在整个数据集中具有高基数的值,但是对您要执行的查询范围内的所有实体都是通用的。例如,如果您想按时间戳查询条目,但一次只需要返回单个用户的结果,则可以在时间戳前加上用户 ID 并索引该新属性。这仍将允许对该用户进行查询和排序结果,但用户 ID 的存在将确保索引本身被很好地分片。
| 归档时间: |
|
| 查看次数: |
331 次 |
| 最近记录: |