Hisse senedi analiz depomun ilk versiyonu analitiği bir OLTP motorunda çalıştırıyordu ve ikinci versiyonum da aynı şeyi bir OLAP yığınında çalıştırıyordu. OLAP yığınını tek bir optimizasyon nedeniyle seçtim ancak bundan yararlanmak için göl eviyle ilgili her şeyi anlamam gerekiyordu.
Gelişmenin Ayrıntıları ve Kapsamı
Satırlar tüm sütunları bir arada saklar Bir sembol için bir çubuk getirmek, diskteki tek bir noktaya dokunur; bu da tam olarak ingest'in istediği şeydir. İki sütuna ihtiyaç duyan bir gösterge yine de her sütunu arabellek havuzundan getirir.
Dizinler okumaları hızlandırır ve yazmaları yavaşlatır Her dizin kendi B ağacıdır ve her yazma, tablodaki tüm B ağaçlarını güncellemelidir. B-ağaçlarının okunması son derece hızlıdır. Herhangi bir endeksin amacı, daha yavaş yazma pahasına okumaları hızlandırmaktır. Seçmeli okumalar için harika, yoğun alım gerektiren işler yazmak için berbat. Raw* tablolarımın neden yalnızca bir birincil anahtara sahip olduğunun ve Raw*'un çalışmasını alan tablolarda neden yoğun indeksleme ve bölümlemenin bulunduğunun nedeni de buydu.
“Teknoloji ekosisteminde ölçeklenebilirlik ve otomasyon süreçleri, kullanıcı deneyimi ile doğrudan birleştiğinde katma değer üretiyor.”
Geri alma günlüğü eşzamanlı okuma ve yazma işlemlerine izin verir Bir satır güncellendiğinde veya silindiğinde, eski değer geri alma günlüğü adı verilen bir yerde saklanır. Bir oturum yazma sırasında tabloyu okursa eski değer geri alma günlüğünden gelir. Ekler de daha küçük bir geri alma günlüğüne sahip olur, eklenen tablo ve birincil anahtar saklanır, böylece InnoDB, ekin işleme koyulmaması durumunda neyin geri alınacağını bilir. Kaydedildiğinde bir eklemenin geri alma günlüğü hemen temizlenir. Bir güncelleme veya silme işleminin geri alma günlüğü, oturumların değiştirilen verilerin eski sürümlerini okumasını sağlayan geçmiş listesi adı verilen genel bir listeye katılır. Ağır veritabanlarını güncellemek ve silmek için geçmiş listesi hızla büyür ve bu, başa çıkılması gereken bir kabus olur. Şans eseri benden daha akıllı biri çözümü geliştirdi ve siz de doğru tahmin ettiniz; bu çözüm doğrudan InnoDB'nin içine yerleştirilmiştir. InnoDB bayrakları, taahhüt öncesinde veya sırasında başlatılan her oturum bittiğinde temizlenecek günlükleri geri alır. Bu sisteme Multi-Version Concurrency Control, kısaca MVCC adı verilmektedir. Tüm teknik jargondan sonra, İngilizce çevirisi MVCC'nin okumaları engellemeden eklemelerin ve güncellemelerin gerçekleşmesine izin vermesidir.
Farkında olmadan InnoDB veritabanımı OLAP tasarım esasını kullanarak tasarladım. mali veriler tarihsaati, açılış, yüksek, düşük ve kapanış bilgilerini tutuyordu. Başlangıçta tarihsaati tutan tek tabloydu. Sorgulamak istediğim herhangi bir teknik gösterge, gösterge satırının hesaplandığı tarihi bilmek için finansal veri tablosunda bir birleştirme gerektiriyordu. En kötü veri tasarımlarımdan biriydi. Farkına vardığım bir tasarım, ancak veritabanında 100 GB'ın üzerinde veri bulunduğunda işe yaramayacağını fark ettim. Bunu düzeltmek acımasızdı.
İşte finansal veri tablosu bölümümden sorumlu dosyaların bir resmi. Her .ibd, tablo verilerinin kabaca 1/100'ünü içeren bir InnoDB tablo alanı dosyasıdır. Dosya aralığı: FinancialData#p#p0.ibd - FinancialData#p#p99.ibd.
Adil olmak gerekirse tasarımın arkasındaki fikir sağlamdı. Yukarıdaki şemada görebileceğiniz gibi finansal verilerde tarihsaat, açılış, kapanış, düşük, yüksek ve StockID'nin yanı sıra pek çok başka sütun bulunur. Bu veritabanına başladığımda her sorgu için bu sütunlara ihtiyacım olacağını düşündüm. Bu veritabanına başladığımda en önemli fiyatın kapanış fiyatı olduğunu bile bilmiyordum. Diyelim ki uzun bir yol kat ettim, hatta şimdi Wall Street Journal'ı bile okudum ve sanırım hepimiz bunun ne anlama geldiğini biliyoruz. Her neyse, bu tasarım, tüm gösterge tablolarımın içinde FinancialDataID ve StockID'nin bulunduğu anlamına geliyordu; bunlar, birleştirilecek verimli sütunlar olarak hizmet ediyordu. Finansal verileri temel tablom olarak kullanma ve üzerinde çalıştığım göstergelere göre istediğim sütunları "seçme" fikri, yalnızca istediğim sütunları sorgulamaya ve tablodaki diğer sütunları göz ardı etmeye oldukça benziyor.
Sonunda kurşunu sıktığımda ve gösterge tablolarıma StockDate'i eklediğimde, birkaç farklı zamanlanmış olay tarafından yürütülen bir saklı prosedür olan ole güveniliri kullandım. Planlanan her olay, saklı yordamı ayrı bir tabloda çalıştırıyordu; dolayısıyla kilitleme sorun değildi, beklemek sorundu.
Planlanan her etkinlik, bu güncellemelerden tek bir tanesini çalıştırdı ve diğer güncellemeler yorumlandı.
V1'in başlangıcından 5 yıl sonra, analitik çalışmamda tablo başına 2 veya 3 sütun kullanıldığını ve her sütunu okumak zorunda kaldığımı fark ettim. Analitik çalışma için optimizasyon yapmak teorik olarak bana pazarda avantaj sağlayabileceğinden, buna göre optimizasyon yapmaya karar verdim. Biraz araştırma yaptıktan sonra motor seçiminin yanlış olduğu sonucuna vardım.
Recep Usta OS — Sistem & Mühendislik Değerlendirmesi
Altyapı ve Verimlilik Perspektifi: Aynı İş, İki Motor: InnoDB ve Iceberg Internals haberi incelendiğinde; kurumsal dijitalleşme ve otomasyon süreçlerinin modern yazılım mimarileriyle nasıl güçlendirildiği açıkça görülüyor. Ağ güvenliği, yüksek erişilebilirlik ve mikroservis tabanlı veri senkronizasyonu bu tarz operasyonlarda başarının anahtarıdır.
Kullanıcı odaklı dijital çözümlerin güvenli altyapılarla desteklenmesi, hem yerel pazarda hem de uluslararası genişlemede sistem sürdürülebilirliğini sağlamlaştırmaktadır.