Blok Aralığı Endeksi - Block Range Index

Bir Blok Aralığı İndeksi veya BRIN , bir veritabanı indeksleme tekniğidir. Son derece büyük tablolarla performansı artırmaları amaçlanmıştır.

BRIN dizinleri yatay bölümlemeye veya parçalamaya benzer faydalar sağlar, ancak bölümleri açıkça bildirmeye gerek yoktur.

BRIN, büyük olan ve dizin anahtarı değerinin MinMax işleviyle kolayca sıralandığı ve değerlendirildiği bir tablodaki dizine uygulanabilir .

BRIN başlangıçta Alvaro Herrera tarafından önerilmiştir 2ndQuadrant 'Minmax dizinler' olarak 2013 yılında. Şimdiye kadarki uygulamalar, veritabanı tabloları için dahili uygulama ve depolama tekniklerine sıkı sıkıya bağlıdır. Bu onları verimli kılar, ancak belirli satıcılarla sınırlar. Şimdiye kadar PostgreSQL , bu özelliğe sahip canlı bir ürünü PostgreSQL 9.5'te duyuran tek satıcıdır. Diğer satıcılar Oracle , Netezza 'bölge haritaları', Infobright 'veri paketleri', MonetDB ve ORC / Parquet ile Apache Hive gibi bazı benzer özellikleri açıkladı .

Tasarım (değiştir | kaynağı değiştir)

Image
B-ağaç indeks yapısı
Image
BRIN dizin yapısı

BRIN, büyük veri bloklarını kompakt bir formda "özetleyerek" çalışır; bu, birçoğunu erken bir veritabanı sorgusundan dışlamak için verimli bir şekilde test edilebilir. Bu testler, her karşılaştırma için büyük bir veri bloğunu hariç tutar. BRIN, hem büyük blokları küçük demetler olarak temsil ederek hem de birçok bloğu ortadan kaldırarak veri hacmini bu kadar erken azaltarak, veritabanı düğümü tarafından satır bazında incelenmesi gereken ayrıntılı veri miktarını önemli ölçüde azaltır.

Büyük veri tabanlarında veri depolama, 'bloklar' halinde düzenlenmiş tablo depolamasıyla katmanlı ve parçalıdır. Her blok, her bir parçada belki 1 MB içerir ve disk tabanlı bir depolama katmanından belirli bloklar talep edilerek geri alınır. BRIN, bunun üstündeki hafif bir bellek içi özet katmanıdır: dizindeki her bir tuple, bir bloğu, içerdiği verilerin aralığına göre özetler: minimum ve maksimum değerleri ve blok, sütun için boş olmayan herhangi bir veri içeriyorsa ( ilgi alanları.

Geleneksel endeksi aksine bulur kesinlikle blokları gösteren "negatif endeksler" gibi ilgi, BRIN eylemi değerlerini içeren tablonun bölgelerini değil ilgi ve böylelikle işlenecek gerekmez.

Bazı basit karşılaştırmalar, dizine eklenmemiş tabloya kıyasla bir dizin taramasıyla arama performansında beş kat artış olduğunu göstermektedir. B ağaçları ile karşılaştırıldığında, bakım masraflarından kaçınırlar.

BRIN çok hafif olduğundan, tamamen bellekte tutulabilir ve böylece tarama sırasında disk yükünü önleyebilir. Aynısı B-ağacı için doğru olmayabilir: B-ağacı , tablodaki her yaklaşık N satır için bir ağaç düğümü gerektirir ; burada N, tek bir düğümün kapasitesidir, dolayısıyla dizin boyutu büyüktür. BRIN, her blok için (birçok satırdan oluşan) yalnızca bir demet gerektirdiğinden, dizin, disk ve bellek arasındaki farkı yaratmak için yeterince küçük hale gelir. 'Dar' bir tablo için B-ağaç indeks hacmi tablonun kendisine yaklaşır; BRIN bunun sadece% 5-15'i olabilir.

Avantajları

Arama ve dizin taraması

Büyük bir veritabanı dizini tipik olarak B-ağacı algoritmalarını kullanır. BRIN her zaman B-ağacının yerine geçmez, bir dizinin sıralı taramasında bir gelişmedir, endeksin sıralanmak için belirli koşulları karşılaması ve arama hedefinin dar bir dizi olması durumunda belirli (ve potansiyel olarak büyük) avantajları vardır. bu değerler. Genel durumda, rastgele verilerle, B-ağacı hala daha üstün olabilir.

Oracle Exadata'nın Akıllı Tarama ile paylaşılan BRIN tekniğinin özel bir avantajı, bu tür bir dizinin Büyük Veri veya veri ambarı uygulamaları ile kullanılmasıdır, burada tablonun neredeyse tamamının ilgi aralığı ile ilgisiz olduğu bilinmektedir. BRIN Tablo blokların alarak bu gibi durumlarda sorgulanabilir sağlar edilebilir ilgi verilerini içerir ve dış açık aralık, ya da bu sütun için hiçbir veri içeren hariç.

Ekle

Büyük tabloların işlenmesiyle ilgili olağan bir sorun, geri alma işleminin bir indeks kullanımını gerektirmesidir, ancak bu indeksin korunması yeni kayıtların eklenmesini yavaşlatır. Tipik uygulamalar, eklemeleri bir arada gruplandırmak ve bunları tek bir toplu işlem olarak eklemek veya dizini kaldırmak, yeni kayıtların toplu işini eklemek ve ardından dizini yeniden oluşturmak olmuştur. Bunların her ikisi de eşzamanlı okuma / yazma işlemlerini aksatır ve sürekli çalışan bazı işletmelerde mümkün olmayabilir.

BRIN ile, endeksin korunmasından kaynaklanan yavaşlama, B-ağacına kıyasla çok daha azdır. Wong, B-tree'nin dizine eklenmemiş 10GB'lık bir tabloya yapılan eklemeleri% 85 oranında yavaşlattığını, ancak benzer bir BRIN'in yalnızca% 11'lik bir ek yüke sahip olduğunu bildirdi.

Dizin oluşturma

BRIN, B ağacının yatay bölümlemeye ihtiyaç duyacağı son derece büyük veriler için oluşturulabilir.

BRIN'i oluşturmak da bir B-ağacından çok daha hızlıdır,% 80 oranında. Bu , kod değişikliği gerektirmeden drop-add-reindex yaklaşımını kullanan mevcut veritabanı uygulamalarını yeniden düzenlemek için yararlı bir gelişme olacaktır .

Uygulama

Masa sırasına bağımlılık

Tek bir tablodaki farklı sütunlar için birden çok BRIN tanımlanabilir. Ancak kısıtlamalar var.

BRIN, yalnızca anahtar değerlerin sıralaması, depolama katmanındaki blokların organizasyonunu takip ettiğinde etkilidir. En basit durumda, bu, genellikle içindeki satırların yaratılma sırası olan tablonun, anahtarın sırasına uyması için fiziksel olarak sıralanmasını gerektirebilir. Bu anahtarın bir oluşturma tarihi olduğu durumlarda, bu önemsiz bir gereklilik olabilir.

Veriler gerçekten rastgele ise veya 'etkin' bir veritabanında anahtar değerlerde çok fazla kargaşa varsa, BRIN'in altında yatan varsayımlar bozulabilir. Tüm bloklar "ilgilenilen" girişleri içerir ve bu nedenle çok azı BRIN aralık filtresi tarafından erkenden hariç tutulabilir.

Çoğu durumda, BRIN, tablo başına tek bir dizinle sınırlıdır. Birden çok BRIN tanımlanabilir, ancak yalnızca birinin uygun sıralaması olması muhtemeldir. İki (veya daha fazla) dizin benzer sıralama davranışına sahipse, aynı tabloda birden fazla BRIN tanımlamak mümkün ve faydalı olabilir. Açık bir örnek, hem oluşturma tarihinin hem de bir kayıt_kimliği sütununun kayıt oluşturma dizisi ile monoton olarak artmasıdır . Diğer durumlarda, anahtar değer tekdüze olmayabilir, ancak kaydın fiziksel düzeni içinde hala güçlü bir gruplama olması koşuluyla, BRIN etkilidir.

Exadata Depolama Dizinleri

BRIN, Oracle Exadata " Depolama Dizinleri " ile bazı benzerliklere sahiptir . Exadata, mimari yığınında güçlü bir 'depolama katmanı' konseptine sahiptir. Tablo verileri, depolama sunucularında bloklar veya 'depolama hücreleri' içinde tutulur. Bu depolama hücreleri , depolama sunucusuna opaktır ve istek üzerine, tanımlayıcıları tarafından veritabanı motoruna döndürülür. Önceden, veritabanı düğümleri taramak için tüm depolama hücrelerini talep etmelidir.

Depolama Dizinleri, bu katmanda veri ayıklama sağlar: daha fazla ilgilenilmeyen bölümleri verimli bir şekilde gösterir. Depolama İndeksi, depolama sunucusundaki belleğe yüklenir, böylece hücreler için bir istek yayınlandığında, arama değerleri ile tahmin edilebilir. Bunlar Depolama Dizini ile karşılaştırılır ve ardından yalnızca ilgili hücrelerin veritabanı düğümüne döndürülmesi gerekir.

Depolama Dizini ile ilgili performans avantajları, dizinlenmiş sütun birçok boş değer içerdiğinde en belirgindir . Seyrek veriler arasında tarama yapılırken büyük performans avantajları elde edilir .

Geliştirme

PostgreSQL için Geliştirme, AXLE projesinin (Aşırı Büyük Avrupa Veritabanları için Gelişmiş Analitik) bir parçası olarak gerçekleştirildi. Bu çalışma kısmen Avrupa Birliği'nin Yedinci Çerçeve Programı (FP7 / 2007-2013) tarafından finanse edildi .

PostgreSQL

PostgreSQL için uygulama ilk olarak 2013'te görüldü. BRIN , 2016'nın başında PostgreSQL'in 9.5 sürümünde çıktı .

Ayrıca bakınız

Notlar

Referanslar