PolarDB PostgreSQL版(兼容Oracle)提供了Ganos并行創(chuàng)建空間索引功能,本功能采用空間排序(GiST Sort)的方法,可將索引構建過程并行化,并大幅減少磁盤的讀寫操作,實現(xiàn)索引構建加速,您可通過本章節(jié)的內容體驗千萬級時空數據創(chuàng)建空間索引加速的過程。

背景信息

PostgreSQL數據庫非常適合用來存儲管理空間數據,然而隨著數據量的日益增長,性能問題也日益明顯,當數據量達到千萬級規(guī)模時,創(chuàng)建空間索引耗時會比較長。

前提條件

  • 擁有阿里云賬號
  • 已創(chuàng)建PolarDB PostgreSQL版(兼容Oracle)集群,本章節(jié)以4核16 GB的PolarDB PostgreSQL版(兼容Oracle)集群為例。

注意事項

空間排序方法僅適用于點數據(Point),其他空間類型的數據使用此方法將會降低索引的查詢性能。

操作步驟

  1. 創(chuàng)建時空擴展并生成測試數據。
    1. PolarDB PostgreSQL版(兼容Oracle)集群中,創(chuàng)建數據庫。
    2. 使用pgAdmin連接數據庫。
    3. 執(zhí)行以下命令,創(chuàng)建Ganos時空擴展。
      create extension ganos_geometry cascade;
    4. 執(zhí)行以下命令,生成測試數據。
      CREATE TABLE test (id int, geom Geometry(Point, 4326), name text, code int);
      INSERT INTO test SELECT i,
                      ST_SetSRID(ST_MakePoint(random() * 180.0, random() * 90.0), 4326),
                      'text', 1
                      FROM generate_series(1,1000 * 10000) AS i;
  2. 傳統(tǒng)方法創(chuàng)建空間索引。
    執(zhí)行以下命令,創(chuàng)建空間索引。
    select now();
    CREATE index ON test using GiST(geom);
    select now();
    耗時統(tǒng)計:
    330.10 S
  3. 使用Ganos并行創(chuàng)建空間索引。
    執(zhí)行以下命令,使用Ganos并行創(chuàng)建空間索引。
    set max_parallel_maintenance_workers=4;
    set maintenance_work_mem='1GB';
    set polar_enable_gist_sort= on;
    
    select now();
    CREATE index on test using GiST(geom);
    select now();
    耗時統(tǒng)計:
    33.54 S

結論

使用Ganos并行創(chuàng)建空間索引,耗時比傳統(tǒng)方法創(chuàng)建空間索引提升了10倍左右。