paint-brush
Yüksek Lisans Destekli OLAP: Apache Doris ile Tencent Deneyimiby@junzhang
1,607
1,607

Yüksek Lisans Destekli OLAP: Apache Doris ile Tencent Deneyimi

Jun Zhang7m2023/08/28
Read on Terminal Reader
Read this story w/o Javascript

Altı ay önce, veri yönetimi sistemimizde OLAP motoru olarak ClickHouse'u neden Apache Doris ile değiştirdiğimizi yazmıştım. O zamanlar SQL ifadelerinin otomatik olarak oluşturulmasıyla uğraşıyorduk. Günler geçtikçe sizlere referans olabilecek ilerlemeler kaydettik ve yine buradayım. Doris tabanlı OLAP hizmetlerimizi güçlendirmek için Büyük Dil Modellerini (LLM) benimsedik.

People Mentioned

Mention Thumbnail
featured image - Yüksek Lisans Destekli OLAP: Apache Doris ile Tencent Deneyimi
Jun Zhang HackerNoon profile picture
0-item
1-item

Altı ay önce, veri yönetimi sistemimizde OLAP motoru olarak ClickHouse'u neden Apache Doris ile değiştirdiğimizi yazmıştım. O zamanlar SQL ifadelerinin otomatik olarak oluşturulmasıyla uğraşıyorduk. Günler geçtikçe sizlere referans olabilecek ilerlemeler kaydettik ve yine buradayım.


Doris tabanlı OLAP hizmetlerimizi güçlendirmek için Büyük Dil Modellerini (LLM) benimsedik.

Yüksek Lisans + OLAP

Amacımız dahili personelimizi SQL yazmanın zorlu öğrenme eğrisinden kurtarmaktı. Bu nedenle, LLM'yi ara madde olarak kullandık. Doğal dil sorularını SQL ifadelerine dönüştürür ve SQL'leri yürütülmek üzere OLAP motoruna gönderir.


LLM'yi ara düzey olarak kullanma


Yapay zekayla ilgili her deneyimde olduğu gibi bazı sürtüşmelerle karşılaştık:


  1. LLM, "alanlar", "satırlar", "sütunlar" ve "tablolar" gibi veri jargonlarını anlamaz. Bunun yerine, temel olarak alanların/satırların/sütunların konusu olan "kurumsal gelir" ve "DAU" gibi iş terimlerini mükemmel bir şekilde tercüme edebilirler. Bu, yalnızca analistlerin sorularını yazarken ihtiyaç duydukları metriğe atıfta bulunmak için tam olarak doğru kelimeyi kullanması durumunda iyi çalışabileceği anlamına gelir.


  2. Kullandığımız Yüksek Lisans, çıkarımda yavaştır. Cevap vermek 10 saniyeden fazla sürüyor. Ücretleri jetonla tahsil ettiğinden, maliyet etkinliği bir sorun haline geliyor.


  3. Yüksek Lisans, geniş bir kamuya açık veri seti koleksiyonu üzerinde eğitilmiş olmasına rağmen, niş bilgi konusunda yetersiz bilgi sahibidir. Bizim durumumuzda LLM indie şarkılara çok yabancı olduğundan, şarkılar veritabanımıza dahil edilse bile LLM onları doğru şekilde tanımlayamayacaktır.


  4. Bazen girdi sorularımız, bir eğitim veri setine veya bilgi tabanına dahil edilmesi zor olan yeterli ve en güncel yasal, politik, mali ve düzenleyici bilgileri gerektirir. Daha çeşitli görevleri yerine getirmek için Yüksek Lisans'ı daha geniş bilgi tabanlarına bağlamamız gerekiyor.


Bu sorunları birer birer ortadan kaldırıyoruz.

1. Anlamsal bir katman

1 numaralı problem için, LLM ile OLAP motoru arasına anlamsal bir katman sunuyoruz. Bu katman iş şartlarını ilgili veri alanlarına çevirir. Çeşitli doğal dil ifadelerinden veri filtreleme koşullarını tanımlayabilir, bunları ilgili ölçümlerle ilişkilendirebilir ve ardından SQL ifadeleri oluşturabilir.


Bunun yanı sıra anlamsal katman hesaplama mantığını optimize edebilir. Analistler, örneğin çok tablolu bir birleştirme gibi karmaşık bir sorgu içeren bir soru girdiğinde, anlamsal katman, anlamsal bozulmayı azaltmak için bunu birden çok tek tablolu sorguya bölebilir.


Hesaplama Mantığını Optimize Etmek İçin Semantik Katmanı Kullanmak


2. Yüksek Lisans ayrıştırma kuralları

Yüksek Lisans kullanımında maliyet etkinliğini artırmak için, metrik hesaplama, ayrıntılı kayıt alma ve kullanıcı segmentasyonu gibi tüm senaryoların hesaplama karmaşıklığını değerlendiriyoruz. Daha sonra kurallar oluşturuyoruz ve LLM ayrıştırma adımını yalnızca karmaşık görevlere ayırıyoruz. Bu, basit hesaplama görevleri için ayrıştırmayı atlayacağı anlamına gelir.


Örneğin, bir analist "bana büyük müzik platformlarının kazançlarını söyle" girişini yaptığında LLM, bu sorunun yalnızca birkaç ölçüm veya boyut gerektirdiğini belirler, dolayısıyla soruyu daha fazla ayrıştırmaz, doğrudan SQL oluşturma ve yürütme için gönderir. Bu, sorgu yanıt süresini büyük ölçüde kısaltabilir ve API masraflarını azaltabilir.


Yüksek Lisans ayrıştırma kuralları


3. Şema Eşleyici ve harici bilgi tabanı

Yüksek Lisans'ı niş bilgiyle güçlendirmek için Yüksek Lisans'ın yukarı akışına bir Şema Eşleyici ekledik. Şema Eşleyici, giriş sorusunu harici bir bilgi tabanına eşler ve ardından LLM ayrıştırmayı gerçekleştirir.


Şema Eşleyiciyi sürekli olarak test ediyor ve optimize ediyoruz. İçeriği harici bilgi tabanında kategorilere ayırıp derecelendiriyoruz ve daha iyi anlamsal ayrıştırma sağlamak için çeşitli düzeylerde eşleme (tam metin eşleme ve bulanık eşleme) yapıyoruz.


Şema Eşleyici ve Harici Bilgi Tabanı


4. Eklentiler

Yüksek Lisans'ı daha fazla bilgi alanına bağlamak için eklentiler kullandık ve farklı eklenti türleri için farklı entegrasyon yöntemlerimiz var:


  • Yerel dosyaların yerleştirilmesi : Bu, özellikle LLM'ye genellikle metin dosyaları olan en son düzenleme politikalarını "öğretmemiz" gerektiğinde kullanışlıdır. İlk olarak sistem, yerel metin dosyasını vektörleştirir, yerel dosyada eşleşen veya benzer terimleri bulmak için anlamsal aramalar yürütür, ilgili içerikleri çıkarır ve çıktı oluşturmak için bunları LLM ayrıştırma penceresine koyar.


  • Üçüncü taraf eklentiler : Pazar yeri her türlü sektöre yönelik tasarlanmış üçüncü taraf eklentilerle doludur. Onlarla LLM geniş kapsamlı konuları ele alabilir. Her eklentinin kendi istemleri ve arama işlevi vardır. Giriş sorusu bir istemle karşılaştığında ilgili eklenti çağrılacaktır.


Yüksek Lisans'a bağlanmak için eklentileri kullanma


Yukarıdaki dört optimizasyonu tamamladıktan sonra SuperSonic çerçevesi ortaya çıkıyor.

SüperSonik çerçeve

Şimdi size bu çerçeveyi anlatayım:


SüperSonik çerçeve


  • Bir analist bir soru girer.


  • Şema Eşleştiricisi soruyu harici bir bilgi tabanına eşler.


  • Harici bilgi tabanında eşleşen alanlar varsa soru LLM tarafından ayrıştırılmayacaktır. Bunun yerine, bir metrik hesaplama formülü OLAP motorunun sorgulamaya başlamasını tetikleyecektir. Eşleşen alan yoksa soru LLM'ye girecektir.


  • Yüksek Lisans, önceden tanımlanmış kurallara dayanarak sorunun karmaşıklık düzeyini derecelendirir. Basit bir sorgu ise doğrudan OLAP motoruna gidecektir; karmaşık bir sorgu ise anlamsal olarak ayrıştırılacak ve bir DSL ifadesine dönüştürülecektir.


  • Anlamsal Katmanda, DSL bildirimi sorgu senaryosuna göre bölünecektir. Örneğin, çok tablolu bir birleştirme sorgusu ise, bu katman birden fazla tek tablolu sorgu SQL ifadesi üretecektir.


  • Soru harici bilgi içeriyorsa LLM üçüncü taraf bir eklentiyi arayacaktır.


Örnek:


Dış bilgileri içeren sorular sormak


Belirli bir şarkının varyete şovlarında çalınıp çalınamayacağını yanıtlamak için sistem, şarkıyla ilgili ayrıntılar için OLAP veri ambarını alır ve onu Ticari Kullanım Sorgusu üçüncü taraf eklentisinden alınan sonuçlarla birlikte sunar.

OLAP Mimarisi

Bu çerçevenin OLAP kısmına gelince, birkaç tur mimari evrimden sonra mevcut OLAP boru hattımız böyle görünüyor.


Ham veriler, analistler tarafından özel olarak tanımlanan etiketlere ve ölçümlere göre sıralanır. Tutarsız tanımlardan kaçınmak için etiketler ve metrikler birleşik yönetim altındadır. Daha sonra çeşitli sorgular için çeşitli etiket kümeleri ve metrik kümeleri halinde birleştirilirler.


OLAP Mimarisi


Mimari optimizasyon deneyimimizden sizin için iki ana sonuç çıkardık.


1. Bağlantıları kolaylaştırın


Apache Doris'i benimsemeden önce, etiketlerin ve metriklerin hesaplanmasını hızlandırmak için ClickHouse'a ve boyutlu verileri işlemek için Elasticsearch'e sahiptik. Bu iki analitik motordur ve sorgu ifadelerini her ikisine de uyarlamamızı gerektirir. Yüksek bakım gerektiriyordu.


Böylece ClickHouse'u Apache Doris ile değiştirdik ve Elasticsearch Katalog işlevselliğini kullanarak Elasticsearch verilerini Doris'e bağladık. Bu şekilde Doris'i birleşik sorgu ağ geçidimiz haline getiriyoruz.


2. Düz masaları bölün


OLAP mimarimizin ilk sürümlerinde verileri düz tablolara koyardık, bu da işleri zorlaştırırdı. Öncelikle, düz tablolar yukarı akışlardan gelen tüm yazma gecikmesini emdi ve bu da veri gerçek zamanlılığında önemli bir kayba neden oldu. İkincisi, düz tablodaki verilerin %50'si nadiren güncellenen boyutlu verilerdi. Her yeni düz tabloyla birlikte, çok fazla depolama alanı tüketen bazı hacimli boyutlu veriler geldi.


Bu nedenle düz tabloları metrik tablolar ve boyut tabloları olarak ayırdık. Farklı hızlarda güncellendiklerinden bunları farklı veri modellerine yerleştiririz.


  • Metrik tablolar : Metrik verileri Apache Doris'in Aggregate Key modelinde düzenliyoruz; bu, yeni verilerin eski verilerle SUM, MAX, MIN vb. yoluyla birleştirileceği anlamına gelir.


  • Boyut tabloları : Bu tablolar Apache Doris'in Unique Key modelindedir, yani yeni veri kaydı eskisinin yerini alacaktır. Bu, sorgu senaryolarımızda performansı büyük ölçüde artırabilir.


Çoğu sorgu her iki tablo türünden de veri gerektirdiğinden, bu durum sorgularda sorun yaratıyor mu diye sorabilirsiniz. Merak etmeyin, Doris'in Toplama özelliğiyle bu sorunu çözüyoruz. Temel tabloları temel alarak, otomatik olarak GROUP BY çalıştıracak olan Toplama görünümleri oluşturmak için ihtiyacımız olan boyutları seçebiliriz. Bu bizi her Toplama görünümü için etiket tanımlama zorunluluğundan kurtarır ve sorguları büyük ölçüde hızlandırır.

Diğer Hileler

Apache Doris ile olan tecrübemize göre, başka bazı işlevleri de kullanışlı buluyoruz, bu yüzden onları da sizin için burada listeliyorum:


1. Gerçekleştirilmiş Görünüm


Gerçekleştirilmiş Görünüm önceden hesaplanmış bir veri kümesidir. Belirli boyutlardaki verilere sıklıkla erişmeniz gerektiğinde sorguları hızlandırmanın bir yoludur. Bu senaryolarda türetilmiş etiketleri ve metrikleri orijinal olanları temel alarak tanımlarız. Örneğin Metrik 1, Metrik 2 ve Metrik 3'ü birleştirerek türetilmiş bir metrik oluşturuyoruz: sum(m1+m2+m3) . Daha sonra bunun için Materyalleştirilmiş Görünüm oluşturabiliriz. Doris'in yayın planına göre sürüm 2.1, çok tablolu Materyalleştirilmiş Görünümleri destekleyecektir ve bunu sabırsızlıkla bekliyoruz.


2. Flink-Doris-Konektörü


Bu, veri alımında Tam Olarak Bir Kez garantisi içindir. Flink-Doris-Connector, bir kontrol noktası mekanizması ve iki aşamalı taahhüt uygular ve ilişkisel veritabanlarından Doris'e otomatik veri senkronizasyonuna olanak tanır.


3. Sıkıştırma


Toplama görevlerinin sayısı veya veri hacmi Flink için çok fazla olduğunda, veri sıkıştırmada çok büyük gecikmeler yaşanabilir. Bunu Dikey Sıkıştırma ve Segment Sıkıştırma ile çözüyoruz. Dikey Sıkıştırma, sütunların yalnızca bir kısmının yüklenmesini destekler, böylece düz tablaları sıkıştırırken depolama tüketimini azaltabilir. Segment Sıkıştırma, veri yazma sırasında çok fazla segment oluşturulmasını önleyebilir ve aynı anda yazarken sıkıştırma yapılmasına olanak tanır.

Sıradaki ne

Maliyetleri azaltmak ve hizmet kullanılabilirliğini artırmak amacıyla, yeni yayımlanan Doris'in Depolama-Bilgisayar Ayrımı ve Kümeler Arası Çoğaltmasını test etmeyi planlıyoruz ve SuperSonic çerçevesi ve Apache Doris projesi hakkındaki her türlü fikir ve girdiyi benimsiyoruz.