Tüm Ürünler
Search
Belge Merkezi

ApsaraDB RDS:roaringbitmap uzantısını kullanma

Son Güncelleme:Oct 03, 2026

Bu konu, ApsaraDB RDS for PostgreSQL tarafından sağlanan roaringbitmap uzantısının sorgu performansını artırmak amacıyla nasıl kullanılacağını açıklar.

Ön koşullar

RDS örneği PostgreSQL 12 veya sonraki bir sürümde çalışır.

Not

RDS örneğiniz PostgreSQL 17 üzerinde çalışıyorsa, örneğin küçük motor sürümü 20241030 veya daha yeni olmalıdır.

Arka plan bilgileri

Roaring bitmap yapısında 32 bitlik tamsayılar 216 parçaya ayrılır. Her bir parçadaki tamsayılar aynı 16 en anlamlı biti paylaşır. Tamsayıların 16 en az anlamlı biti bir konteynerde saklanır. Roaring bitmap, konteynerleri birincil dizinler olarak dinamik bir dizi içinde tutar. İki tür konteyner mevcuttur: seyrek parçalar için dizi konteynerleri ve yoğun parçalar için bitmap konteynerleri. Bir dizi konteyneri en fazla 4.096 tamsayı saklayabilir. Bir bitmap konteyneri ise 4.096'dan fazla tamsayı saklayabilir.

Roaring bitmapler, bu depolama yapısını kullanarak belirli değerlere hızla erişebilir. Ayrıca, iki konteyner türü arasında AND, OR ve XOR gibi bit düzeyinde işlemler sağlar. Bu sayede roaring bitmapler üstün depolama ve hesaplama performansı sunar.

Kullanım notları

Uzantının kararlılığını sağlamak için RDS örneğinizi en son küçük motor sürümüne güncellemenizi öneririz.

Not

Bir RDS örneğinin küçük motor sürümünü nasıl güncelleyeceğiniz hakkında daha fazla bilgi için bkz. Küçük motor sürümünü yükseltme.

Yordam

  1. Uzantıyı oluşturun. Örnek:

    CREATE EXTENSION roaringbitmap;
  2. Roaringbitmap verilerini saklamak için bir tablo oluşturun. Örnek:

    CREATE TABLE t1 (id integer, bitmap roaringbitmap);
  3. Roaringbitmap verilerini eklemek için rb_build işlevini çağırın. Örnek:

    -- Set the bit value of an array to 1.
    INSERT INTO t1 SELECT 1,RB_BUILD(ARRAY[1,2,3,4,5,6,7,8,9,200]);
    -- Set the bit values of multiple elements to 1 and aggregate the bit values into a roaring bitmap.  
    INSERT INTO t1 SELECT 2,RB_BUILD_AGG(e) FROM GENERATE_SERIES(1,100) e;
  4. OR, AND, XOR ve ANDNOT gibi bitmap işlemleri uygulayın. Örnek:

    SELECT RB_OR(a.bitmap,b.bitmap) FROM (SELECT bitmap FROM t1 WHERE id = 1) AS a,(SELECT bitmap FROM t1 WHERE id = 2) AS b;
  5. Yeni bir roaring bitmap oluşturmak için OR, AND, XOR ve BUILD gibi bitmap toplu işlemleri uygulayın. Örnek:

    SELECT RB_OR_AGG(bitmap) FROM t1;
    SELECT RB_AND_AGG(bitmap) FROM t1;
    SELECT RB_XOR_AGG(bitmap) FROM t1;
    SELECT RB_BUILD_AGG(e) FROM GENERATE_SERIES(1,100) e;
  6. Roaring bitmap'in kardinalitesini hesaplayın. Kardinalite, roaring bitmap içinde 1 olarak ayarlanmış bitlerin sayısıdır. Örnek:

    SELECT RB_CARDINALITY(bitmap) FROM t1;
  7. 1 olarak ayarlanmış bitlerin alt indislerini alın. Örnek:

    SELECT RB_ITERATE(bitmap) FROM t1 WHERE id = 1;

Bitmap hesaplama işlevleri

İşlev

Giriş

Çıktı

Açıklama

Örnek

rb_build

integer[]

roaringbitmap

Bir tamsayı dizisinden bir roaring bitmap oluşturur.

rb_build('{1,2,3,4,5}')

rb_and

roaringbitmap,roaringbitmap

roaringbitmap

AND işlemi uygular.

rb_and(rb_build('{1,2,3}'),rb_build('{3,4,5}'))

rb_or

roaringbitmap,roaringbitmap

roaringbitmap

OR işlemi uygular.

rb_or(rb_build('{1,2,3}'),rb_build('{3,4,5}'))

rb_xor

roaringbitmap,roaringbitmap

roaringbitmap

XOR işlemi uygular.

rb_xor(rb_build('{1,2,3}'),rb_build('{3,4,5}'))

rb_andnot

roaringbitmap,roaringbitmap

roaringbitmap

ANDNOT işlemi uygular.

rb_andnot(rb_build('{1,2,3}'),rb_build('{3,4,5}'))

rb_cardinality

roaringbitmap

integer

Kardinaliteyi hesaplar.

rb_cardinality(rb_build('{1,2,3,4,5}'))

rb_and_cardinality

roaringbitmap,roaringbitmap

integer

İki roaring bitmap üzerinde yapılan AND işleminden kardinaliteyi hesaplar.

rb_and_cardinality(rb_build('{1,2,3}'),rb_build('{3,4,5}'))

rb_or_cardinality

roaringbitmap,roaringbitmap

integer

İki roaring bitmap üzerinde yapılan OR işleminden kardinaliteyi hesaplar.

rb_or_cardinality(rb_build('{1,2,3}'),rb_build('{3,4,5}'))

rb_xor_cardinality

roaringbitmap,roaringbitmap

integer

İki roaring bitmap üzerinde yapılan XOR işleminden kardinaliteyi hesaplar.

rb_xor_cardinality(rb_build('{1,2,3}'),rb_build('{3,4,5}'))

rb_andnot_cardinality

roaringbitmap,roaringbitmap

integer

İki roaring bitmap üzerinde yapılan ANDNOT işleminden kardinaliteyi hesaplar.

rb_andnot_cardinality(rb_build('{1,2,3}'),rb_build('{3,4,5}'))

rb_is_empty

roaringbitmap

boolean

Bir roaring bitmap'in boş olup olmadığını denetler.

rb_is_empty(rb_build('{1,2,3,4,5}'))

rb_equals

roaringbitmap,roaringbitmap

boolean

İki roaring bitmap'in aynı olup olmadığını denetler.

rb_equals(rb_build('{1,2,3}'),rb_build('{3,4,5}'))

rb_intersect

roaringbitmap,roaringbitmap

boolean

İki roaring bitmap'in kesişip kesişmediğini denetler.

rb_intersect(rb_build('{1,2,3}'),rb_build('{3,4,5}'))

rb_remove

roaringbitmap,integer

roaringbitmap

Bir roaring bitmap'ten belirli bir ofseti kaldırır.

rb_remove(rb_build('{1,2,3}'),3)

rb_flip

roaringbitmap,integer,integer

roaringbitmap

Bir roaring bitmap'te belirli ofsetleri tersine çevirir.

rb_flip(rb_build('{1,2,3}'),2,3)

rb_minimum

roaringbitmap

integer

Bir roaring bitmap'teki en küçük ofseti döndürür. Roaring bitmap boşsa -1 döndürülür.

rb_minimum(rb_build('{1,2,3}'))

rb_maximum

roaringbitmap

integer

Bir roaring bitmap'teki en büyük ofseti döndürür. Roaring bitmap boşsa 0 döndürülür.

rb_maximum(rb_build('{1,2,3}'))

rb_rank

roaringbitmap,integer

integer

Bir roaring bitmap'te belirtilen bir ofsetten küçük veya ona eşit olan öğelerin sayısını döndürür.

rb_rank(rb_build('{1,2,3}'),3)

rb_iterate

roaringbitmap

setof integer

Bir roaring bitmap'ten ofset listesi döndürür.

rb_iterate(rb_build('{1,2,3}'))

Bitmap toplu işlevleri

İşlev

Giriş

Çıktı

Açıklama

Örnek

rb_build_agg

integer

roaringbitmap

Bir grup ofsetten bir roaring bitmap oluşturur.

rb_build_agg(1)

rb_or_agg

roaringbitmap

roaringbitmap

OR toplu işlemi uygular.

rb_or_agg(rb_build('{1,2,3}'))

rb_and_agg

roaringbitmap

roaringbitmap

AND toplu işlemi uygular.

rb_and_agg(rb_build('{1,2,3}'))

rb_xor_agg

roaringbitmap

roaringbitmap

XOR toplu işlemi uygular.

rb_xor_agg(rb_build('{1,2,3}'))

rb_or_cardinality_agg

roaringbitmap

integer

İki roaring bitmap üzerinde yapılan OR toplu işleminden kardinaliteyi hesaplar.

rb_or_cardinality_agg(rb_build('{1,2,3}'))

rb_and_cardinality_agg

roaringbitmap

integer

İki roaring bitmap üzerinde yapılan AND toplu işleminden kardinaliteyi hesaplar.

rb_and_cardinality_agg(rb_build('{1,2,3}'))

rb_xor_cardinality_agg

roaringbitmap

integer

İki roaring bitmap üzerinde yapılan XOR toplu işleminden kardinaliteyi hesaplar.

rb_xor_cardinality_agg(rb_build('{1,2,3}'))