Derinlemesine yorum! Zaman serisi veritabanı HiTSDB: Dağıtılmış akış toplama motoru

Alimei Kılavuzu: Yüksek Performanslı Zaman Serisi Veritabanı (HiTSDB), verimli okuma ve yazma, yüksek sıkıştırma oranı depolama ve zaman serisi veri enterpolasyonu sağlayan yüksek performanslı, düşük maliyetli, kararlı ve güvenilir bir çevrimiçi zaman serisi veritabanı hizmetidir Ve toplu hesaplama, zaman çizelgesi çok boyutlu analiz, esas olarak izleme sistemine ve IoT alanına hizmet eder. Şu anda, Alibaba Group'un bir dizi dahili işletmesinde yaygın olarak kullanılmaktadır ve 2016 Double 11 ve 2017 Double 11'de istikrarlı bir şekilde hizmete sunulmuştur.

arka fon

HiTSDB zaman serisi veritabanı motoru, Alibaba Group bünyesindeki müşterilere hizmet verdiğinde, grubun iş özelliklerine göre hedeflenen birçok optimizasyon yapılmıştır. Bununla birlikte, HiTSDB bulut ürünlerini parlatma sürecinde, belirli kullanıcılar için genel bulut üzerinde hedeflenen birçok optimizasyonun uygulanmasının zor olduğu yavaş yavaş keşfedilmiştir.

Aynı zamanda, genel bulut müşterileri için HiTSDB kullanma sürecinde, toplama sorgularının neden olduğu giderek daha fazla sorun keşfedilmiştir, örneğin: çok fazla veri noktası, yığın taşması gibi hatalara neden olur, çok fazla toplama noktası OOM'ye veya hataya neden olur Toplama tamamlanır, örnek tamamen takılır ve bu böyle devam eder. Bu sorunlar esas olarak orijinal toplama motoru mimarisindeki kusurlardan kaynaklanır.

Bu nedenle, değerlendirmeden sonra, HiTSDB geliştirme ekibi, HiTSDB motorunu yeni toplama motoru mimarisi etrafında yükseltmeye karar verdi: depolama modeli dönüşümü, dizin oluşturma yöntemi yükseltmesi, yeni akış toplama, veri geçişi ve performans değerlendirmesi. Bu makale, "yeni akış toplama bölümüne" odaklanarak bu beş konuya odaklanmaktadır.

1. Zaman serisi veri depolama modeli:

1.1 Zaman serisi veri depolama biçimi.

Tipik bir zaman serisi verileri iki boyutla temsil edilir. Bir boyut, zaman eksenini temsil eder. Zaman akmaya devam ettikçe, veriler eklenmeye devam edecektir. Diğer boyut, göstergelerden ve veri kaynaklarından oluşan zaman çizelgesidir. Veri kaynağı, bir dizi etiketle işaretlenmiş tek veri toplama noktasıdır. Örneğin, gösterge cpu.usage verileri bilgisayar odası, uygulama, örnek gibi boyutlardan oluşan toplama noktalarından gelir. Bu şekilde, id + {timestamp, value} zaman serisi veri modelini mantıksal olarak soyutlayabilirsiniz. Bu veri modelinin depolanması nasıl? Genellikle iki tipik veri depolama fikri vardır:

  • Bir veri bloğu, zaman penceresi boyutuna göre bölünür ve aynı doğal zaman penceresindeki sürekli veriler, {1:00, 2:00} gibi bitişik konumlara yerleştirilir - > (id1, id2, id3, ... ..., idN). Bu şekilde tipik zaman serisi veritabanları arasında InfluxDB, Promethues ve diğer TSMT yapılandırılmış veritabanları bulunur. OpenTSDB biraz özeldir çünkü OpenTSDB tek değerli bir modeldir ve sorgulama sırasında göstergenin boyutu gereklidir. Böylece onu önce dizine göre bölebilir ve ardından aynı zaman penceresindeki esasen sürekli veri olan zaman penceresine göre bölebilirsiniz. Zaman penceresi bölütleme yöntemine göre avantajı, yazarken diski doğal olarak pencereye göre yerleştirebilmenizdir.Yüksek enlemli etiket sorguları için temelde bazı sürekli taramalar.Bu yöntemde daha zor bir sorun var "dışarı". Promethues, zaman aralığının sona erdiği zaman noktası için sıra dışı "sıra dışı sorun" durumunda, Promethues doğrudan atma yöntemini kullanır ve bu durumda InfluxDB'nin performansı düşecektir.

  • Diğeri, veri bloklarını zaman çizelgesi boyutuna göre bölmek ve veriyi aynı zaman çizelgesine bitişik konumlara yerleştirmektir, örneğin (id1) - > (1:00, 2:00, 3:00, ... ..., 23:00). HiTSDB, zaman çizelgesi boyut bölme yöntemini benimser: mevcut yerleşim verileri HBASE'de depolanır ve temeldeki Rowkey göstergeler + etiketler + doğal pencerelerden oluşur. Rowkey, belirli bir zaman çizelgesinin veri noktalarını boyut sırasına göre birleştirir ve ardışık olarak bitişiktir. Bu nedenle, bazı düşük boyutlu sorgu verimliliği için çok verimlidir. Şu anda iletişim halinde olan bazı IoT hizmetlerine göre, daha fazlası bazı düşük boyutlu ziyaretlerdir. Orta boyutlu sorgular için akış taraması kullanılır. HiTSDB, çok yüksek enlem etiketi sorguları için önceden toplanmış hizmetleri kullanır (bu makalenin kapsamında değildir).

1.2 Zaman serisi modelinde sıcak konularla başa çıkmak

Üretim ortamında iş tarafları tarafından toplanan birçok gösterge türü vardır ve gösterge toplama döngüleri farklıdır. Örneğin, cpu.usage dizini hızlı bir şekilde değişir ve iş tarafı çok dikkat eder.Toplama süresi genellikle çok kısadır, 1 saniye, 5 saniye, 10 saniye vb. Bununla birlikte, gösterge diskinin değişim eğilimi. Kullanım nispeten düzgündür ve toplama süresi genellikle 1 dakika, 5 dakika, 10 dakika vb. Şeklindedir. Bu durumda, veriler aynı gösterge için özel işlem yapılmadan saklanırsa, sıcak sorunlara neden olmak kolaydır. Depolama kaynaklarının gösterge türlerine göre parçalandığını varsayarak, 20 işletme, işletme başına 10 küme, her kümede 500 ana bilgisayar ve toplama döngüsünün 1 saniye olduğunu ve saniyede 100.000 CPU olacağını hayal edin. Gösterge veri noktaları, aynı depolama kaynağı örneğine düşer ve disk.usage toplama süresi 1 dakikadır, bu nedenle yalnızca yaklaşık 1666 gösterge veri noktası başka bir depolama kaynağına düşer, bu nedenle veri çarpıklığı olgusu çok ciddidir.

1.2.1 Bölme

Bu tür problemlerin klasik çözümü, kepçelemedir. Örneğin, gösterge türüne ek olarak, işletme adı ve ana bilgisayar adı aynı anda boyut tanımlama etiketleri olarak kullanılır ve gösterge cpu.usage farklı kovalara bölünür. Yazarken, karma değer zaman çizelgesine göre farklı bölümlere dağıtılır. OpenTSDB aynı zamanda sıcak sorunlarla başa çıkmak için bir gruplama modu kullanır, ancak yayın okuması gerektirir.Temel nedeni, sorgu yönteminin belirli bir zaman penceresi içinde genel bir tarama gerektirmesidir. Bu nedenle, OpenTSDB'de kova sayısının ayarlanması bir denge stratejisi gerektirir.Eğer sayı çok küçükse, sıcak noktalarda hala yerel sorunlar olacaktır.Çok fazla varsa, sorgu sırasında yayın okumasından kaynaklanan ek yük çok büyük olacaktır.

Bununla karşılaştırıldığında, HiTSDB yayın okumayı önler ve sorgu verimliliğini artırır. HiTSDB sorguda olduğundan, tarama verilerini temel alınan depolamaya göndermeden önce, ilk olarak sorgu ifadesine göre isabetin tam zaman çizelgesini elde edecektir. Belirli bir zaman çizelgesiyle, bölümün konumu belirlenebilir ve ardından veriler karşılık gelen blok alanına getirilebilir Yayın okuması yoktur. HiTSDB'nin verileri sorgularken isabet zaman çizelgesini nasıl elde ettiğiyle ilgili olarak, ters çevrilmiş bölümü okuduktan sonra okuyucunun sorusunun temizleneceğine inanıyorum.

1.2.2 Bölge Ön Bölmesi

Bir tablo yeni oluşturulduğunda, HBase varsayılan olarak yeni tabloya bir Bölge atar. Tüm okuma ve yazma istekleri aynı regionServer'ın aynı bölgesine erişir. Şu anda, kümedeki diğer regionServers nispeten boşta durumda olacak ve şu anda yük dengelemenin etkisi elde edilmeyecek. Bu sorunu çözmek için önceden bölmeyi kullanın ve yeni bir tablo oluştururken bölüm sayısına göre birden çok bölge oluşturmak için özel bir önceden bölme algoritması kullanın. bayt splitKeys = yeni bayt; splitKeys = (kovaIndex0xFF);

2. Ters endeks:

2.1 Zaman serisi verilerinde çok boyutlu zaman çizelgesi

Çok boyutlu destek, herhangi bir yeni nesil zaman serisi veritabanı için son derece önemlidir. Zaman serisi verilerinin birçok türü vardır ve kaynak çok karmaşıktır.Sadece tek bir boyutta zamana dayalı sıralı değerler değil, aynı zamanda çok boyutlu zaman çizelgeleri ile ilgili çok sayıda kombinasyon da vardır. Basit bir örnek için, cpu yükü, cpu çekirdeğini, ana bilgisayarı ve uygulama uygulamalarını açıklamak için üç boyuta sahip olabilir.Her boyut yüz, hatta on binlik bir etiket değerine sahip olabilir. sys.cpu.load cpu = 1 host = ipA app = hitsdb, zaman çizelgesi her boyut birleştirildikten sonra kolayca milyon düzeyine ulaşabilir. Bu zaman çizelgelerinin nasıl yönetileceği, dizinlerin nasıl oluşturulacağı ve verimli sorguların nasıl sağlanacağı, zaman serisi veritabanlarında çözülmesi gereken önemli konulardır. Zaman serileri alanındaki mevcut ana yaklaşım, tersine çevrilmiş bir indeks kullanmaktır.

2.2 Ters indeksin temel kombinasyonu

Tersine çevrilmiş satırdaki temel zaman çizelgesi kombinasyon fikirleri aşağıdaki gibidir:

Zaman çizelgesinin orijinal girdi değeri:

idtime series1sys.cpu.load cpu = 1 host = ipA app = hitsdb2sys.cpu.load cpu = 2 host = ipA app = hitsdb3sys.cpu.load cpu = 3 host = ipA app = hitsdb4sys.cpu.load cpu = 4 host = ipA app = hitsdb5sys.cpu.load cpu = 1 host = ipB app = hitsdb6sys.cpu.load cpu = 2 host = ipB app = hitsdb7sys.cpu.load cpu = 3 host = ipB app = hitsdb8sys.cpu.load cpu = 4 host = ipB uygulaması = hitsdb

Ters inşaattan sonra:

termposting listcpu = 11,5 cpu = 22,6cpu = 33,7cpu = 44,8host = ipA1,2,3,4host = ipB5,6,7,8app = histdb1,2,3,4,5,6,7, 8

Sorgu zaman çizelgesi cpu = 3 ve ana bilgisayar = ipB:

termposting listcpu = 33,7host = ipB5,6,7,8

Kavşağı aldıktan sonraki sorgu sonucu 7'dir:

idtime series7sys.cpu.load cpu = 3 ana bilgisayar = ipB uygulaması = hitsdb

2.3 Ters satırlar ve optimizasyon fikirlerinin karşılaştığı sorunlar

Ters satır, esas olarak bellek genişletme sorunuyla karşı karşıyadır:

  • Gönderme listesi çok uzun. "Bilgisayar odası = Hangzhou" gibi yüksek enlem etiketleri için Hangzhou, binlerce hatta on binlerce makineye sahip olabilir, bu da gönderme listesinin binlerce 64-bit kimliği saklaması gerektiği anlamına gelir. Bu sorunu çözme fikri, gönderme listesini sıkıştırmak, kayıt listesini oluştururken dizideki kimlikleri sıralamak ve ardından delta kodlamasıyla sıkıştırmaktır.

  • Etiket anahtar-değer çifti doğrudan bir terim olarak kullanılırsa, bellek kullanımı dizenin boyutuna bağlıdır. Dizge sözlüğünün kullanılması bellek ek yükünü de büyük ölçüde azaltabilir.

3. Akış toplama motoru

3.1 HiTSDB toplama motorunun teknik sorun noktaları

HiTSDB'nin mevcut toplama motoru genel bulut genel testi ve toplu dahili iş operasyonu aşağıdaki sorunları ortaya çıkardı:

3.1.1 Materyalizasyon yürütme modu, Heap belleğinin kolayca patlamasına neden olur

Aşağıdaki şekil, orijinal sorgu motorunun mimari diyagramını göstermektedir. HiTSDB, depolama olarak HBase kullanır ve orijinal motor, Async HBase istemcisi aracılığıyla HBase'den zaman serisi verilerini alır. HBase veri okuma, zaman alan bir süreç olduğundan, genel çözüm, sistemin paralelliğini etkili bir şekilde iyileştirmek için asenkron HBase istemci API'sini kullanmaktır. Bununla birlikte, orijinal toplama motoru tipik bir materyalizasyon yürütme yöntemi kullanır: 1) HBase okumaya başlamak için birden çok eşzamansız HBase API'sini başlatın, 2) yalnızca sorguda yer alan tüm zaman serisi verileri belleğe okunduğunda, toplama işlemi başlar . Bu gerçekleştirilmiş ve sonra birleştirilmiş HBase Tarama yöntemi bellekte sonuçlanır, HiTSDB'yi Yığın bellek patlamasına yatkın hale getirir. Özellikle kullanıcı geniş bir zaman aralığı sorgusu gerçekleştirdiğinde veya sorgu zaman çizelgesinde çok fazla veri olduğunda, birçok zaman serisi verisi bulunduğundan, HiTSDB Yığın OOM oluşturacak ve sorgunun başarısız olmasına neden olacaktır.

3.1.2 HBase'e ulaşan büyük sorgu sorunu

HiTSDB'nin toplu sorguları işlerken temeldeki HBase'i patlatmasına neden olan iki neden.

  • HBase gereksiz zaman çizelgesi verilerini okuyabilir. HiTSDB'nin zaman çizelgesi HBase'de gösterge + zaman penceresi + etiket kodlama yöntemi kullanılarak saklanır. Tipik bir sorgu, kullanıcının uzamsal boyuttaki etikete göre aranacak bir gösterge, bir zaman aralığı ve eşleşen bir değer belirlemesidir. Uzamsal boyutun etiket sorgu koşulları her zaman etiket kodlama önekinde bulunmaz. Bu olduğunda, HiTSDB ters çevrilmiş indeksi, uzamsal boyutun sorgu koşullarına dayalı olarak belirli HBase sorgu koşullarını doğru bir şekilde bulamaz, ancak ilk okuma ve ardından filtreleme yöntemini kullanır. Bu, HBase'nin çok fazla gereksiz veri okuyabileceği ve dolayısıyla HBase üzerindeki yükü artırabileceği anlamına gelir.

  • HiTSDB, kısa sürede çok fazla HBase okuma talebinde bulunabilir. HiTSDB bir yandan HBase'de parçalanmış depolamayı kullanır.Her parça için en az bir okuma isteği başlatılırken diğer yandan yukarıda belirtilen materyalizasyon yürütme yöntemi nedeniyle bir sorguya dahil olan HBase okuma isteği aynı anda eşzamansız olarak gönderilir. , HBase'e kısa sürede çok sayıda okuma talebi göndermek mümkündür. Bu şekilde, büyük bir sorgu temeldeki HBase'yi patlatabilir.

Bu olduğunda, en kötü senaryo, HiTSDB'nin zaman serisi verilerinin yazma talebini işleyememesi ve sonraki yeni verilerin kaybıyla sonuçlanmasıdır.

3.1.3 Yürütme mimarisi son derece bağlıdır ve işlevleri değiştirmek veya eklemek zordur

Toplama motoru, esas olarak uygulama senaryolarında performans izlemeyi hedefler ve sorgu modu sabittir, bu nedenle motor mimarisi, sorgu mantığını, filtrelemeyi, doldurma / enterpolasyon ve toplama işlemi mantığını yüksek oranda birleştiren tek bir mod kullanır. Bu motor mimarisinin, izleme uygulamalarının sabit sorguları için çok fazla sorunu yoktur, ancak HiTSDB'nin amacı yalnızca izleme senaryolarında basit sorgular değil, aynı zamanda daha fazla uygulama senaryosunda karmaşık sorgulara odaklanır.

Orijinal motor mimarisiyle, işlevler eklemenin veya orijinal uygulamayı değiştirmenin zor olduğunu gördük. Bunun temel nedeni, orijinal toplama motorunun geleneksel veritabanlarında yaygın olarak kullanılan yürütme mimarisini kullanmamasıdır.Yönetim katmanı, birden çok özelleştirilebilir yürütme işlecinden oluşur ve sorgu semantiği, farklı yürütme işleçlerinin bir kombinasyonu ile tamamlanabilir. Bu sorun, ürün geliştirmenin başlangıcında çok derin değildir, ancak HiTSDB'nin uygulama senaryolarını genişletmesini ve yeni işlevler eklemesini ciddi şekilde etkileyen önemli bir faktördür.

3.1.4 Toplama işlemlerinin verimliliğinin iyileştirilmesi gerekiyor

Orijinal motor toplama işlemleri gerçekleştirdiğinde, toplama işlemlerini geleneksel veritabanları ile aynı yinelemeli yürütme modunda yinelemeli olarak yürütür. Sorun, her yinelemenin yürütülmesi, zamanda bir nokta döndürmesidir. Yinelemeli yürütme, OLTP gibi senaryolarda yaygın olan, zaman içinde bir nokta veya her seferinde bir kayıt döndürür, çünkü OLTP sorgularının erişmesi gereken kayıt sayısı çok azdır. Ancak, HiTSDB sorgusu büyük miktarda zaman çizelgesi verilerine erişim gerektirebilir ve bu tür bir yürütme yöntemi verimli değildir.

Nedenler 1) Zaman içinde bir nokta her işlendiğinde, performans üzerinde bir etkisi olan bir dizi işlev çağrısı gerekir.2) Yinelemeli döngü yinelemelerinde yer alan işlev çağrıları, yeni donanım tarafından desteklenen SIMD kullanılarak paralel olarak optimize edilemez. İşlev kodu, satır içi gibi JVM tarafından yaygın olarak kullanılan sıcak nokta aracılığıyla optimize edilir. Büyük veri hacmi sahnesinde, mevcut popüler genel uygulama, Vektörizasyon işlemeyi tanıtmaktır; yani, her yineleme bir kayıt değil, bir kayıt kümesi (satırlar grubu) döndürür, örneğin, Google Spanner batch-at- A-time, her seferinde satırın yerini alır ve Spark SQL ayrıca yürütme katmanında Vectorization yürütme modunu benimser.

3.2 Streaming Aggregation Engine Tasarım Fikirleri

HiTSDB'yi optimize etmek ve HiTSDB'nin ticari çalışmasını desteklemek için, HiTSDB'nin orijinal toplama işlem motorundaki sorunlara yanıt olarak HiTSDB toplama işlem motorunu dönüştürmeye karar verdik. Aşağıdaki şekil, yeni toplama sorgu motorunun temel mimarisini gösterir.

3.2.1 boru hattı yürütme modu

Geleneksel veritabanı yürütme modundan öğrenin ve ardışık düzen yürütme modunu (diğer adıyla Volcano / Iterator yürütme modu) tanıtın. Ardışık düzen, farklı yürütme hesaplama işleçleri (işleçler) içerir. Bir sorgu, farklı yürütme işleçlerinden oluşan fiziksel plan oluşturucu tarafından ayrıştırılır ve bir DAG'ye veya işleç ağacına ayrıştırılır. DAG üzerindeki kök işleç, sorgunun yürütülmesini sağlamaktan ve sorguyu dönüştürmekten sorumludur Sonuç, arayana iade edilir. Yürütme düzeyinde, yukarıdan aşağıya talebe dayalı yaklaşım benimsenir ve aşağıdaki operatörlerin yürütülmesi kök operatörden sürülür. Bu tür yürütme motoru mimarisinin avantajları vardır:

  • Bu mimari yaklaşım, birçok veritabanı sistemi tarafından benimsenmiş ve etkili olduğu kanıtlanmıştır;

  • Arayüz açıkça tanımlanmıştır ve farklı yürütme hesaplama operatörleri, diğer operatörleri etkilemeden bağımsız olarak optimize edilebilir;

  • Genişletmesi kolay: Yeni hesaplama operatörleri ekleyerek genişletilmiş işlevlere ulaşmak kolaydır. Örneğin, şu anda yalnızca etiket üzerindeki sorgu koşulları sorgu protokolünde tanımlanmıştır. Sorgu koşullarını desteklemek istiyorsanız (cpu.usage > =% 70 ve cpu.usage < =% 90), yeni bir FieldFilterOp eklenerek elde edilebilir.

Her operatör aşağıdaki arayüzleri uygular:

  • Açık: Kaynakları başlatın ve ayarlayın

  • Sonraki: Bir zaman serisi grubu almak, girişi işlemek ve zaman serilerinin toplu işini çıkarmak için girdi operatörünün next () işlevini çağırın

  • Kapat: Kaynakları kapatın ve serbest bırakın

HiTSDB'de aşağıdaki operatörleri uyguladık:

  • ScanOp: HBase'den zaman çizelgesi verilerini eşzamansız olarak okumak için kullanılır

  • DsAggOp: alt örnekleme hesaplamaları gerçekleştirmek ve doldurma değerlerini işlemek için kullanılır

  • AggOp: Grup toplama işlemleri için kullanılır, PipeAggOp, MTAggOp'a bölünür

  • RateOp: zaman çizelgesi değerinin değişim oranını hesaplamak için kullanılır

3.2.2 Bir grup hesaplama operatörünün zaman çizelgesi verileri işlem birimidir

Hesaplama motorunun yürütme performansını iyileştirmek için hesaplama operatörleri arasında bir birim olarak zaman çizelgesi verisi kullanın. Fikri, OLAP sistemi tarafından benimsenen Vektorizasyon işleme modundan ödünç alınmıştır. Bu şekilde Operatör, bir partinin birden çok zaman çizelgesini ve her zaman çizelgesinin birden çok zaman noktasını işleyebilir, bu da işlev çağrılarının maliyetini düşürebilir ve döngü yürütmenin verimliliğini artırabilir.

Her Operatör, zaman çizelgesi grubunu düzenli bir şekilde girdiden alır ve daha sonra, işlemden sonra, girdi zaman çizelgesi kümesini depolamadan zaman çizelgesi kümesini çıkarır, böylece bellek gereksinimlerini azaltır. Yalnızca Operatörün semantiğinin girdiyi gerçekleştirmesi gerektiğinde böyle bir işlem gerçekleştirilebilir (aşağıda bahsedilen toplama operatörünün farklı uygulamalarına bakın).

3.2.3. Farklı sorgu senaryolarını ayırt edin ve ayrı olarak optimize etmek için farklı toplama operatörleri kullanın

HiTSDB'nin orijinal toplama motoru, materyalizasyon yürütme modunu kullanır. Önemli bir neden, zaman serisi verilerinin enterpolasyon işlemini işlemektir. Bunun başlıca nedeni, zaman serisi verilerinin tipik bir özelliğinin, zaman çizgisinin hizalı olmamasıdır: farklı zaman çizgileri farklı zaman damgalarında bulunur Üzerinde veriler var. HiTSDB, OpenTSDB protokolü ile uyumludur ve enterpolasyon kavramını sunar.Amaç, toplama işlemi sırasında belirtilen enterpolasyon yöntemi aracılığıyla hesaplanan değeri hizalanmamış zaman damgasına eklemek, böylece hizalanmamış zaman çizelgesi verilerini hizalamaya dönüştürmektir. Zaman çizelgesi. Enterpolasyon, hangi zaman damgasının enterpole edilmesi gerektiğini belirlemek için aynı grubun tüm zaman çizelgeleri arasındaki bir karşılaştırmadır (OpenTSDB belgelerine bakın).

Toplama sorgularının performansını optimize etmek için farklı toplama operatörleri tanıttık. Amaç, farklı sorgu semantiği için farklı optimizasyonlar gerçekleştirmektir. Bazı toplama sorguları enterpolasyon gerektirir ve bazı sorgular enterpolasyon gerektirmez; enterpolasyon gerekli olsa bile, enterpolasyon işlemlerini gerçekleştirmek için yalnızca aynı toplama grubunun zaman çizelgesi verilerini belleğe okumanız gerekir.

  • PipeAggOp: Toplu sorgu aşağıdaki koşulları karşıladığında,

  • 1) Enterpolasyon gerekmez: Sorgu için aşağı örnekleme kullanılır ve alt örnekleme dolgu değeri boş olmayan / NaN stratejisi kullanır. Bu tür bir sorgu için, altörneklemeden sonra, zaman çizelgesi verileri hizalanır ve doldurulur, yani toplama işlevi tarafından kullanılan enterpolasyona artık gerek yoktur.

    2) Toplama işlevleri, toplama, sayma, ortalama, min, maks, sıfır, mimim, mimmax gibi artımlı yinelemeli toplamayı destekleyebilir, tüm giriş verilerini okumak yerine artımlı toplama kullanabiliriz Hafızaya. Bu yürütme operatörü bir ardışık düzen yöntemi benimser. Girdi operatöründen bir dizi zaman çizelgesi elde edildiğinde, gruplama hesaplanır ve toplama işlevinin kısmi değerleri güncellenir. Tamamlandıktan sonra, giriş zaman çizelgesi temizlenebilir ve yalnızca her gruplamayı tutması gerekir Toplama işlevinin değeri.

  • MTAgOp: Enterpolasyon gereklidir ve giriş operatörü zaman çizelgesi kimliğini önceden gruplamaya yardımcı olamaz. Bu yöntem, orijinal toplama motoru tarafından kullanılan yürütme moduna geri döner.

MTAggOp için, optimize etmek için bir gruplama toplama yöntemi sunabiliriz:

  • GroupedAggOp: Enterpolasyon gereklidir, ancak giriş operatörü zaman çizelgesinin kimliğinin etiketlere göre sıralandığını ve gruplandırıldığını garanti edebilir.Bu şekilde, ardışık düzen işlemede, en fazla bir grubun verileri gerçekleştirildiği sürece, bu operatör belleğe kıyasla tüm grupları korur Zaman çizelgesi, bellek gereksinimleri düşük olmalıdır ve farklı gruplar arasında paralel toplama işlemlerini destekler.

3.2.4 Sorgu iyileştirici ve yürütücü

Yürütme operatörü ve boru hattı yürütme modunu tanıttıktan sonra, HiTSDB'de sorgu iyileştirici ve yürütücü olmak üzere iki modüle ayırabiliriz. İyileştirici, sorgu işlemeyi optimize etmek için sorgu anlambilimlerinin ve yürütme işleçlerinin farklı özelliklerine göre farklı yürütme planları oluşturur. Örneğin, HiTSDB yukarıda tartışılan üç toplama operatörünü kullanabilir ve sorgu yürütme sırasında bellek yükünü azaltmak ve yürütme verimliliğini artırmak için farklı senaryolarda farklı yürütme işleçlerini kullanabilir. Bu işleme yöntemi, toplama motorunun orijinal tek yürütme modundan daha optimize edilmiştir.

4. Veri Geçişi

HiTSDB'nin yeni toplama motoru tarafından kullanılan temel depolama formatı önceki sürümlerle uyumlu değildir. Genel bulut genel beta beta sırasında eski sürümün örneklerinde çalışan verilerin yeni toplama motoruna taşınması gerekir. Aynı zamanda, sıcak yükseltmeyle ilgili bir sorun vardır ve yeni sürümün veri noktalarını eski veri yapısına dönüştürmek için veri geçişi geri alınmalıdır. Genel çözümün kullanıcılar üzerindeki etkisi şu şekildedir: yükseltme işlemi sırasında yazma algılanmaz ve geçmiş veriler okunamaz.

4.1 Veri Taşıma Mimarisi

  • Verilerin eşzamanlı dönüştürülmesi ve taşınması: Orijinal HiTSDB veri noktaları yazma sırasında parçalandı. Varsayılan olarak 20 Tuz vardır. Veri taşıma aracı, her Salt veri noktasını eşzamanlı olarak işleyecektir. Her "Tuz" un bir Üreticisi ve Tüketicisi vardır. Üretici, veri noktalarını elde etmek için HBase Tarayıcıyı açmaktan sorumludur. Her Tarayıcı, HBase'i eşzamansız olarak tarar ve her seferinde HBASE_MAX_SCAN_SIZE satır sayısının veri noktalarını alır. Sonra HBase Satır Anahtarını yeni bir yapıya dönüştürün.

    Son olarak, Satırı tüm Kuyruklara koyun ve Tüketici tüketimini bekleyin. Tüketici, her seferinde HBASE_PUT_BATCHSIZE veya HBASE_PUT_MIN_DATAPOINTS veri hacmini işleyecektir. Tüketici seriyi başarıyla yazdığında, UID tablosundaki "Salt" a karşılık gelen veri işleme pozisyonunu kaydedeceğiz. Bu şekilde, bir arıza yeniden başladığında, Üretici son başarılı yerden dönüştürme için veri noktaları elde etmek üzere yeniden başlar. Veri taşıma aracı, HBase'de eşzamansız okuma ve yazma işlemlerini kullanır. Verileri tararken veya veri yazma başarısız olursa, sınırlı girişimlerde bulunuruz. Deneme sayısı aşılırsa, "Salt" veri taşıma çalışmasını sonlandıracağız ve diğer "Salt" çalışmaları hiçbir şekilde etkilenmeyecektir. Araç bir dahaki sefere otomatik olarak yeniden başladığında, tüm veriler başarıyla dönüştürülene kadar sorunlu "Salt" verilerini taşımaya devam edeceğiz.

  • Akış kontrolü kısıtlaması: Çoğu durumda, Üreticinin HBase'ye tarama verileri, Tüketicinin HBase'e yazmasından daha hızlıdır. Kuyruk verilerinin birikmiş yığılmasının bellek üzerinde baskı oluşturmasını önlemek ve Üretici verileri tararken HBase üzerindeki baskıyı azaltmak için akış kontrolünü kurduk. Kuyruk boyutu HBASE_MAX_REQUEST_QUEUE_SIZE'a ulaştığında, Üretici geçici olarak HBase verilerini taramayı durduracak ve Tüketici tüketimini bekleyecektir. Kuyruğun boyutu HBASE_RESUME_SCANNING_REQUEST_QUEUE_SIZE'ye düşürüldüğünde, Üretici devam edecektir.

  • Üretici ve Tüketici süreçlerinin çıkışı

  • Başarıyla tamamlandığında nasıl çıkılır: Her şey yolunda gittiğinde, Üretici veri taramasını tamamladığında, Kuyruğa bir EOS (Tarama Sonu) koyar ve sonra çıkar. Tüketiciler, EOS ile karşılaştıklarında partinin son parti olduğunu bilecek ve seriyi başarıyla işledikten sonra otomatik olarak çıkacak.

  • Başarısızlıktan sonra nasıl kapatılır: Tüketici bir sorunla karşılaştığında: Tüketici HBase'e yazamadığında, tüketici bir Bayrak belirleyecek ve ardından iş parçacığından çıkacaktır. Yapımcı bir sonraki HBASE_MAX_SCAN_SIZE için taramaya hazır olduğunda, önce Bayrağı kontrol edecektir. Ayarlanırsa, ilgili Tüketici iş parçacığının başarısız olduğunu ve çıktığını bilecektir. Yapımcı ayrıca taramayı bırakıp çıkacaktır. Üretici bir sorunla karşılaştığında: Üretici veriyi tarayamadığında, işleme yöntemi başarılı tamamlamaya benzer. Bildirimin tamamı Kuyrukta EOS'a gidilerek yapılır. Üretici bir sonraki sefer yeniden başladığında, en son kaydedilen veri işleme konumundan yeniden tarama yapacaktır.

4.2 Veri geçişinin tutarlılığı

HiTSDB'nin bulut üzerindeki mevcut sürümü çift düğüm olduğundan, düğüm yükseltmesinden sonra HiTSDB'yi otomatik olarak yeniden başlatacaktır. Otomatik başlangıç komut dosyası, veri taşıma aracını otomatik olarak çalıştıracaktır. Önleyici tedbir yoksa, iki HiTSDB düğümü aynı anda veri taşıma gerçekleştirecektir. Veriler herhangi bir kayba veya zarara neden olmayacak olsa da, HBase üzerinde çok fazla yazma ve okuma baskısına neden olacak ve bu da kullanıcının normal yazma ve sorgu performansını ciddi şekilde etkileyecektir.

Bunun olmasını önlemek için, HBase'in Zoo Keeper'ına benzer bir FileLock kilidi uyguladık. Buna DataLock diyoruz. Veri geçiş süreci başladığında, engelleyici olmayan tryLock () 'a benzer bir form aracılığıyla Zoo Keeper'ın belirli yolunda geçici bir düğüm oluşturacaktır. Düğüm başarıyla oluşturulmuşsa, sonucun DataLock olduğu anlamına gelir. Düğüm zaten mevcutsa, başka bir HiTSDB tarafından oluşturulmuşsa, bir KeeperException alacağız. Bu, kilidin elde edilmediği ve arızanın hemen iade edildiği anlamına gelir. DataLock başarılı bir şekilde elde edilmezse, düğümdeki veri taşıma işlemi otomatik olarak sonlanır. DataLock'u alan düğümler veri geçişine başlayacaktır.

4.3 Veri Taşıma İşleminde "Bir Kez Yürüt"

Tüm "Salt" veri noktaları başarıyla taşındığında, eski HBase tablosuna data_conversion_completed adında yeni bir veri satırı ekleyeceğiz. Bu gezi, veri taşıma projesinin başarıyla tamamlandığını temsil ediyor. Aynı zamanda, otomatik komut dosyası, son veri geçişinin tamamlanmasını önlemek için her 12 saatte bir veri taşıma aracını başlatır. İlk olarak her başladığında "data_conversion_completed" bayrağını kontrol edeceğiz. Bayrak varsa, araç hemen çıkacaktır. Bu işlem yalnızca bir HBase sorgusu gerçekleştirecek ve bu normal durum denetimi maliyetinden daha düşüktür. Bu nedenle, veri taşıma aracını periyodik olarak başlatmak HiTSDB veya HBase'i etkilemeyecektir.

4.4. Veri geçişinin değerlendirilmesi

Test modeli: 4core, 8G, SSD

Toplama ve yazma aralığı veri noktaları depolama hattı test sonuçları 1 saniye 2,88 milyar 8 milyon geçiş TPS 20W, 10G depolama kapasitesi / saat 10 saniye 360 milyon taşıma TPS 19W, 9G depolama kapasitesi / saat 1 saat 10 milyon 10 milyon taşıma 13W, 6G depolama kapasitesi / saat

Etki: Çevrimiçi olduktan sonra, 100'den fazla örnek veri geçişi ve çalışırken yükseltme hatasız tamamlanır.

5. Sorgu performansı değerlendirmesi

Test ortamı yapılandırması

192.168.12.32.1.5 sürümü

192.168.12.4 sürüm 2.2.0 (Ardışık Düzenli Motor)

Test verileri - 10.000 adet zaman, farklı toplama sıklıkları ve zaman aralıkları ve sorgunun isabet ettiği zaman çizelgelerinin sayısı.

Durum 1: Veri toplama sıklığı 5 saniyedir, sorgu sayısı 1000, zaman penceresi 3600 saniyedir

Test ortamı sürümü test sonucu 2.1.5max rt = 628 ms, min rt = 180 ms. Avg rt = 1912.2.2max rt = 136 ms, min rt = 10 ms. Avg rt = 13

Durum 2: Veri toplama sıklığı 1'ler, sorgu isabetleri 1, zaman aralığı 36000'ler

Test ortamı versiyonu test sonuçları 2.1.5max rt = 1803 ms, min rt = 1803 ms. Avg rt = 18032.2.2max rt = 182 ms, min rt = 182 ms. Avg rt = 182

Özet: Yeni sorgu toplama motoru, sorgu hızını 10 kattan fazla artırdı.

diğer

Bu makale, ticari işlemden önce yüksek performanslı zaman serisi veritabanının HiTSDB motorunun optimizasyonunu ve yükseltilmesini tanıtmaktadır.Amaç, HiTSDB motorunun kararlılığını, veri yazma ve sorgulama performansını ve yeni işlevlerin ölçeklenebilirliğini iyileştirmektir. HiTSDB resmi olarak Alibaba Cloud'da ticarileştirildi. HiTSDB müşterilerine daha iyi hizmet verebilmek için kullanıcı geri bildirimlerine göre HiTSDB motorunu daha da geliştireceğiz.

HiTSDB ile ilgili bağlantılar

Alibaba Cloud yüksek performanslı zaman serisi veritabanı HiTSDB resmi bağlantısı:

https://www.aliyun.com/product/hitsdb

Önce HiTSDB ticarileştirme, sınırlı bir süre için% 30 indirim:

https://promotion.aliyun.com/ntms/act/hitsdbdebute2018.html

Köpeği 14 milyon doları beslemek mi? İki savaşta 12 atıştan 0'ı, antrenörü azarladığı için James'i suçlamak değil!
önceki
Messi yine rekor kırdı! Deplasman koleksiyon defterine yeni üyeler eklendi, 37. stadyum ele geçirildi
Sonraki
Test sürüşü Roewe ERX5, 425km seyir menziline sahip bu saf elektrikli SUV'un satış noktaları nelerdir?
Ali, Şangay için "yüksek teknolojili bir kartvizit" oluşturuyor, Dharma Akademisi bir dizi yeni teknolojiyi Şangay'a ihraç ediyor
Yıldız modunda Lien Chan'da "Dynasty Warriors 7 Xtreme Generals" deneyimi Lien Mode'da 100 Lien elde etme
Tekrar kaybetmek ve kaybetmek Lillard'ı kızdırdı! Paul'ün maçtan sonraki sözleri iyi!
Yenilikçilerin gücü! Lynk & Co 03 ile Honda Civic
Hızlı toplama! "Alibaba Teknik Referans Atlası" yayınlandı ve 600 sayfalık teknik panoramalar yayınlandı
İnsanlar sıcaktan bayılıyor, araba güneşte yanacak mı?
Hong Kong Bank PS4 Pro konsolu, 13 Ekim'de 3180 Hong Kong doları fiyatıyla satışa çıkacak
Patron kim? Fiyaskodan sonra Thomas inisiyatif aldı, ancak James bunu yapmakla meşguldü!
Retro görünüm ve modern çekirdek! En iyi 5 kopya modelinin envanteri
Geri dönüş kralı Manchester United'ın Mourinho'yu kükreyen bir sorunu var! Kırmızı Şeytanların daha iyi sonuçları var
2018 Dünya Streetball Grand Prix'si başladı, Kirilenko yardım etmiş gibi göründü, Tokyo Olimpiyat 3v3 oyuncuları JUMP10'da doğabilir.
To Top