加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

海量、多维数据让人抓狂?高效搜索方法看这里

发布时间:2019-09-16 13:21:21 所属栏目:编程 来源:读芯术
导读:人与天下万物的互动会发生大量的时空数据。那么,当我们必要随时挪用已往的数据时,改怎么办?尤其是面临各类海量、多维度的数据库,假如没有高效的搜刮要领,我们只能望洋兴叹、一筹莫展。 别担忧,本文将器具体的代码,手把手来教授高效搜刮法的特技! 对

查询机能:

  1. postgres=# select * from ff(point (0,0) , 5, 10000000) as t(id int, info text, crt_time timestamp, pos point, c1 int, c2 int, c3 int, dist float8);  
  2.  id | info | crt_time | pos | c1 | c2 | c3 | dist  
  3. ---------+----------------------------------+----------------------------+----------------------------------------+------+------+-----+-------------------  
  4.  1850387 | 6e0011c6db76075edd2aa7f81ec94129 | 2017-07-22 17:59:38.243091 | (0.0168232340365648,0.420973123982549) | 100 | 4395 | 321 | 0.421309141034319  
  5.  1989439 | 6211907ac254a4a3ca54f90822a2095e | 2017-07-22 17:59:38.551637 | (0.0274275150150061,0.490507003851235) | 1850 | 5 | 74 | 0.49127323294376  
  6.  1444244 | 41bf6f8e4b89458c13fb408a7db05284 | 2017-07-22 17:59:37.339594 | (0.52773853763938,2.16670122463256) | 1 | 2470 | 820 | 2.23004532710301  
  7.  542633 | c422d6137f9111d5c2dc723b40c7023f | 2017-07-22 17:59:35.334278 | (0.0631888210773468,2.2334903664887) | 4968 | 3 | 245 | 2.23438404136508  
  8.  291950 | 1c2901689ab1eb7653d8ad972f7aa376 | 2017-07-22 17:59:34.776808 | (2.5384977646172,1.09820357523859) | 3 | 2131 | 360 | 2.76586731309247  
  9.  1361182 | 7c4c1c208c2b2b21f00772c43955d238 | 2017-07-22 17:59:37.155127 | (1.7334086727351,2.18367457855493) | 9742 | 0 | 232 | 2.78803520274409  
  10.  2267673 | 898fdd54dcc5b14c27cf1c8b9afe2471 | 2017-07-22 17:59:39.170035 | (0.394239127635956,2.86229319870472) | 2892 | 6 | 917 | 2.88931598221975  
  11.  459345 | 9e46548f29d914019ce53a589be8ebac | 2017-07-22 17:59:35.148699 | (0.715781506150961,3.1486327573657) | 1 | 1276 | 8 | 3.22896754478952  
  12.  570570 | fc57bfc6b7781d89b17c90417bd306f7 | 2017-07-22 17:59:35.39653 | (3.14926156774163,1.04107855819166) | 88 | 2560 | 561 | 3.31688000783581  
  13.  1004806 | afe9f88cbebf615a7ae5f41180c4b33f | 2017-07-22 17:59:36.362027 | (1.13972157239914,3.28763140831143) | 3 | 1639 | 208 | 3.47958123047986  
  14.  865508 | 34509c7f7640afaf288a5e1d38199701 | 2017-07-22 17:59:36.052573 | (3.12869547866285,2.34822122845799) | 2 | 65 | 875 | 3.91188935630676  
  15.  104558 | c4699c933d4e2d2a10d828c4ff0b3362 | 2017-07-22 17:59:34.362508 | (4.20534582808614,2.43749532848597) | 99 | 4858 | 543 | 4.86069100130757  
  16.  1069986 | 6b9f27bfde993fb0bae3336ac010af7a | 2017-07-22 17:59:36.507775 | (4.51995821669698,2.08761331625283) | 2 | 200 | 355 | 4.97877009299311  
  17. (13 rows)  
  18. Time: 0.592 ms 

太棒了!查询时刻从200毫秒镌汰到1毫秒以内。

优化要领综述

优化要领回首:

1. 为差异的数据范例构建差异的索引。

譬喻,对空间行使GiST或SP-GiST索引,对时刻行使B树或BRIN索引,对多个工具属性行使GIN索引。索引的目标是缩小数据扫描的范畴。

2. 要领五提到数据分区。

数据分区的目标是故意地组织数据,这意味着故意地组织数据以满意搜刮需求。譬喻,假如时刻是必须的查询前提或民众查询前提,那么可以定时刻(分区)支解数据,以镌汰必要扫描的数据量。

3. 要领六描写了索引分区。

目标相同于要领五。要领五和要领六的区别在于分区在索引级别行使,因此当执行索引扫描时,数据掷中率会直接进步。

4.要领七中的ctid归并扫描相同于PostgreSQL中的多索引bitmapAnd或bitmapOr扫描。

bitmapAnd/bitmapOr跳过不必要扫描的块,要领七中的ctid归并扫描跳过不必要扫描的行。

归并从多个索引扫描得到的ctid。跳过不必要扫描的行数。

假如当其他前提为“AND”时,过滤前提可以明显镌汰ctid(记录),则没有须要行使ctid归并扫描。相反,行使FILTER作为另一个前提。(这将略微增进CPU开销。)

5. 最好的工夫老是以最大的机动性、自由和对每一个举措的无穷想象为特性。

PostgreSQL实现多索引BitmapAnd或BitmapOr扫描,明显进步了多种前提(索引)下的数据掷中率。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读