海量、多维数据让人抓狂?高效搜索方法看这里
副标题[/!--empirenews.page--]
人与世界万物的互动会产生大量的时空数据。那么,当我们需要随时调用过去的数据时,改怎么办?尤其是面对各种海量、多维度的数据库,如果没有高效的搜索方法,我们只能望洋兴叹、束手无策。 别担心,本文将用详细的代码,手把手来传授高效搜索法的绝技! 对象数据分类 对象数据可分为两种类型:静态数据(相对静态,例如建筑)和动态数据(例如人的活动和物联网传感器的活动)。 按研究需求分类的索引 时空快照搜索 有些对象以相对较低的频率生成数据。例如,建筑物和道路等惰性物体可能在数年内不会发生任何变化。如果将为这些对象生成的数据写入数据库,并按时间范围查询数据(例如,查询日期为2017-07-01至2017-07-02),则可能找不到与这些对象相关的任何数据。原因很简单,在这段时间内数据库根本没有相关数据输入。 时空行为数据搜索 时空行为数据是指从人的活动等动态对象中获取数据。 例如,分析特定地区特定时间段内某一人群的特征,或者分析大学周边人群在工作日和周末构成的差异。 时空快照不属于本文的讨论范围。现在,我们看看如何搜索时空行为数据。 数据结构 时空行为数据包含三个属性:时间、空间和对象。 非结构化索引:
除了应用于JSON,结构化数据还可以用于对象描述。例如:
时空行为数据的SQL查询实例
优化方法 考虑运用以下知识: 时间序列BRIN索引 crt_time字段是一个时间序列字段,表示生成数据的时间。在PostgreSQL堆存储中,存储和该字段的值具有很强的线性相关性。 因此,BRIN索引很合适。 使用BRIN索引来代替分区表进行TPC-H测试。大范围搜索的性能甚至优于使用分区表时的功能。
空间索引 显然,空间检索需要空间索引。PostgreSQL中可以使用三种方法实现空间检索。 1. 几何类型的GIST索引
该索引支持空间KNN搜索和空间位置确定等功能。 2. 几何类型的主索引
该索引支持空间KNN搜索和空间位置确定等功能。 3. Geohash和B-tree索引(将经度和纬度转换为Geohash并为hash值创建B-tree索引)。只需使用表达式索引。
此索引支持前缀搜索(其能落实编码地理信息网格中包含的关系)。它属于有损索引,需要二次过滤。 GiST和SPGiST空间索引能够找到准确的地理位置信息,优于GEOHASH索引。但是,查询信息时需要特别注意。 GIN 索引 此索引类型的目标是对象属性字段JSONB或多个结构化对象属性字段。只需使用GIN索引。 例如:
非结构化索引:
结构化索引:
BitmapAnd和BitmapOr 在上一节中,根据数据类型和查询需求可以为不同的查询维度选择相应的索引。 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |