首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分解索引和unix时间戳

分解索引和unix时间戳
EN

Stack Overflow用户
提问于 2018-02-06 21:12:38
回答 2查看 357关注 0票数 2

我的每个实体都由许多单值属性和一个数组组成。

在每个实体中都有unix纪元时间戳和用户id。

我的问题是我希望能够做这样的查询

SELECT * FROM <kind> WHERE time >= value AND time <= value and userId = value

问题是我必须创建一个复合索引,但我也读到过关于爆炸式索引和存储空间的内容,但我不太理解。

有没有人可以向我解释一下,创建这样的复合索引是不是一个“爆炸式索引”,查询是好还是不好?

EN

回答 2

Stack Overflow用户

发布于 2018-02-06 23:15:20

爆炸式索引问题(以及相关的存储使用增长)仅适用于索引中包含多值(数组/重复)属性的情况。由于您的特定查询只涉及单值属性(timeuserId),因此相应的索引不会是爆炸性的。

但是,您可能有一个需要考虑的潜在问题:单调的time属性可能会在高读/写速率下造成问题。来自Indexes

  • 不索引单调递增值(如NOW()时间戳)的属性。维护这样的索引可能会导致热点,从而影响具有高读写速率的应用程序的云数据存储延迟。有关处理单调属性的进一步指导,请参阅下面的High read/write rates for a narrow key range

同样,如果您需要使用排序或筛选器在单调递增(或递减)属性上查询,则可以改为在新属性上建立索引,对于该属性,您可以在单调值前面加上一个在整个数据集内具有高基数的值,但该值对于要执行的查询范围内的所有实体都是通用的。例如,如果您希望按时间戳查询条目,但一次只需要返回单个用户的结果,则可以在时间戳前加上用户id,并为该新属性建立索引。这仍然允许对该用户进行查询和排序结果,但是用户id的存在将确保索引本身被很好地分片。

票数 5
EN

Stack Overflow用户

发布于 2018-02-13 07:01:57

爆炸性指数不仅仅是一个综合指数问题。创建复合索引时,您只需为一组属性创建另一个索引,而不是只创建一个。通常,您只能存储数据的一个副本,除非实体中的一个或多个属性是重复/嵌套字段。Exploding index是指你错误地为实体的每个属性建立了索引,而没有意识到如果你有一个重复或嵌套的字段,你就会多次对其进行索引。

示例:如果使用3个字符串属性保存此实体类型:

名称、爱好和最喜欢的颜色。即使您为每个属性建立索引,您也最多只能存储3个按每个属性排序的表,这没什么大不了的。

但是,如果爱好和喜爱的颜色被存储为重复或嵌套字段,那么现在您有6个爱好和7种颜色...现在每一行都被存储了6*7=42次!这就是你需要避免的。如果不需要对嵌套字段进行查询和排序,请不要对其进行索引。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48643902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档