Bellek İçi Raporlama Sistemleri İçin Denormalizasyon Uygulaması Mehmet Yasin Akpınar1, Erdem Orman1, Mehmetcan Gayberi2 İdea Teknoloji Çözümleri, İstanbul mehmet.akpinar@ideateknoloji.com.tr, erdem.orman@ideateknoloji.com.tr 2 İstanbul Teknik Üniversitesi, Bilgisayar Mühendisliği Bölümü, İstanbul gayberi@itu.edu.tr 1 Özet: Veri hacminin artışına bağlı olarak geleneksel veritabanlarının yetersiz kaldığı bilinmektedir. Bu problemi çözmek amacıyla bellek içi veritabanlarından faydalanılmaktadır. Ayrıca denormalizasyon çalışmalarıyla da performansta artış elde edilebilmektedir. Ancak bellek içi veritabanları veri saklamaya elverişli değildir. Bu sebeple disk bazlı yedeklemeye başvurulmaktadır. Bu çalışmada bu yöntemlerin hepsini birlikte barındıran bir metod önerilmiştir ve gerçek veriler üzerinde testler yapılarak önerilen metodun eski sistemle performans açısından karşılaştırması yapılmıştır. Anahtar Sözcükler: Bellek İçi Veritabanı, Birliktelik Kuralı Analizi, Denormalizasyon, Geleneksel Veritabanı. A Denormalization Framework for Reporting Applications in Main Memory Databases Abstract: It is known that traditional databases are becoming insufficient due to the increase in data. To overcome this problem, main memory databases are made use of. Additionally, a performance increase can be achieved thanks to denormalization operations. On the other hand, main memory databases are not compatible for data storage. For that reason, traditional databases are utilized. In this study, a method combining all these procedures is proposed and a performance comparison is presented by testing on actual data. Keywords: Association Rule Analysis, Denormalization, Main Memory Database, Traditional Database. 1. Giriş Ürün takiplerinin elektronik ortama taşınmasıyla birlikte şirket veritabanlarındaki veri hacmi artışı beraberinde birçok problem ortaya çıkarmıştır. Bu problemlerin en önemlilerinden bir tanesi veri yönetiminin zorlaşması ve donanımın yetersiz kalarak performans düşüşü yaşanmasıdır. Bu nedenle veritabanı yönetim sistemlerinde yapılan çalışmalar büyük veri hacmine sahip şirketler için hayati önem taşımaktadır. Bu çalışmalar kapsamında geleneksel disk tabanlı veritabanı sistemlerinin yetersiz kaldığı durumlarda bellekiçi veritabanları tercih edilmektedir. Bununla birlikte veritabanında bulunan yapı analiz edilip denormalizasyon yoluna gidilerek performans artışı sağlanabilmektedir. Bunların dışında bellek içi veritabanı ve geleneksel disk tabanlı sistemler arasında bir kanal oluşturularak veri aktarımının sağlanması ve bu verinin güncelliğinin korunması gerekmektedir. Yapılan araştırmalarda yukarıda bulunan 3 yöntemi aynı anda bulunduran bir uygulama görülmemiştir. Bu bildiride, sayılan 3 yöntem bazı modifikasyonlarla birlikte bir çatı altında toplanmış ve kurumsal raporlama çözümlerinde yüksek performanslı bir sistem elde edilmeye çalışılmıştır. Çalışmanın esas hedefi, raporlama sürecinde hız kazanmak ve mevcut sitem ile raporlanması mümkün olmayan verilerin önerilen yöntem ile raporlanabilmesini sağlamaktır. Giriş Bölümü’nde çalışmanın ortaya çıkmasında etkili problemler, amaçlar ve kapsama ait bilgiler verilmiştir. İkinci bölüm olan İlgili Çalışmalarda ise literatür araştırmasında elde edilen bilgiler paylaşılmıştır. Üçüncü Bölüm’de önerilen yöntem detaylarıyla anlatılmakta olup, Dördüncü Bölüm’de bu yöntemin gerçeklenmesiyle elde edilen karşılaştırmalı sonuçlara yer verilmektedir. Son Bölüm olan Sonuç Bölüm’ünde ise çalışmadan elde edilen sonuçlar özetlenmektedir. 2. İlgili Çalışmalar Veri odaklı çözümlerin birçoğunda uzun yıllardır disk tabanlı veritabanları kullanılmaktadır. Bu tip sistemlerde ana bileşen sabit disktir ve veri disk üzerinde depolanır. Ancak sabit disklerin hızı düşük olduğu için genellikle önbellek yapısından destek almaktadır. Buna rağmen önbelleklerinin kısıtlı olması nedeniyle işlenecek veri hacminin artışına bağlı olarak performansları düşmektedir. Teknolojideki gelişme ve değişimler bellek donanımlarına hız artışı ve maliyet düşüşü olarak yansımıştır. Bununla birlikte eskiden yüksek maliyetli olan bellek içi veritabanı kullanımı yaygınlaşmaya başlamıştır. 2011 yılında yapılan bir çalışmada bellek içi veritabanı sistemlerinin performans odaklı sistemlerdeki payının ciddi şekilde yükseldiği, bu sistemlerin yüksek hızda veri işlemeye olanak sağladığı, çoklu kullanıcılı sistemlerde kullanılabildiği ve önbelleğe duyulan gereksinimi ortadan kaldırdığı tespit edilmiştir [1]. 2012 yılında yapılan bir çalışmada ise, özellikle 64-bit sunucuların gelişmesiyle bellek içi veritabanlarının kapasitelerinin yükselerek, daha kullanışlı hale geldikleri anlatılmaktadır [2]. Ancak bellek içi veritabanları beraberinde yedekleme problemini de getirmektedir. Fakat bu problem disk bazlı anlık yedekleme ile çözülebilmektedir. Bu alanda yapılan bir çalışmada farklı algoritmalar kullanılarak, hızlı ve az maliyetli bellek içi veritabanı yedekleme ile uğraşılmıştır [3]. Öte yandan geleneksel disk tabanlı sistemlerle birlikte bellek içi tabanlı sistemlerin birlikte kullanıldığı hibrid ilişkisel veritabanı sistemleri de mevcuttur. 2011’de yapılan bir çalışmada bu tip bir sistem üzerinde çeşitli çalışmalarla ciddi performans artışları sağlanmıştır [4]. Yapılan çalışmalar sadece donanımla kısıtlı kalmamış, yazılımla da performans artışı üzerine çalışılmıştır. Rapor sorgularında zaman açısından JOIN ve UNION yapıları oldukça yüksek maliyete neden olduğu için denormalizasyon yoluna gidilmiş ve bazı tablolar önceden birleştirilerek bu maliyetten kurtulmak istenmiştir. Bu şekilde bir performans artışı sağlanabilmesi için veritabanındaki verinin analiz edilip, ilişkilerin çıkarılması gerekmektedir. 2001 yılında yapılan bir çalışmada çeşitli denormalizasyon teknikleri detaylı bir şekilde ele alınmıştır [5]. 2009 yılında yapılan bir başka çalışmada ise sistematik bir veritabanı denormalizasyon yöntemi üretilmiş ve örnek sorgular üzerinden açıklanmıştır [6]. 3. Önerilen Yöntem Bu bölümde önerilen yöntem detaylı bir şekilde alt başlıklar halinde anlatılacaktır. Her alt başlıkta bulunan akış diyagramları bölümün sonunda birleştirilmiş olarak da mevcuttur. 3.1 Mevcut Veritabanındaki Verilerin Analiz Edilmesi Veritabanındaki verilerin analizi birçok konuda bilgi edinilmesini sağlamaktadır. Çalışma kapsamında bu analiz için Log Parser (Kayıt Ayrıştırıcı) uygulaması yazılmıştır. Böylece raporların çekilme sıklıkları, cevap süreleri ve istek zamanları elde edilmiştir. Bu çıktı kullanılarak raporların günlük, haftalık ve aylık histogramları çıkarılmıştır. Bununla birlikte cevap süresi uzun olan ve sistem üzerinde yük oluşturan raporlar tespit edilip, bellek içi veritabanından çekilecek raporlara karar verilmiştir. Ayrıca tablo içeriklerindeki değişiklikler (ekleme, güncelleme, silme) incelenerek, bu değişiklerin günün hangi zaman diliminde yoğunlaştığı öğrenilmiştir. Şekil 1: Mevcut Veritabanı Analizi 3.3 Birliktelik Kuralı Analizi Log Parser uygulaması aracılığıyla bellek içi veritabanından çekilmesi kararlaştırılan raporların sorguları SQL Parser aracılığıyla ayrıştırıldıktan sonra birliktelik kuralı analiziyle raporlarda birlikte en çok kullanılan JOIN yapıları elde edilmeye çalışılmıştır. Agrawal, Imieliński ve Swami’nin [7] çalışmasını baz alan bu adımda market sepetlerindeki ürünler yerine rapor sorgularında bulunan JOIN yapıları kullanılarak bu yapıları işlenmiş olarak bulunduran ekstra tablolar yaratılmıştır. 2 veya daha fazla tablonun JOIN kuralları çerçevesinde birleşimiyle oluşan bu tablolar ’küp tablo’ olarak adlandırılmıştır. Şekil 3: Birliktelik Kuralı Analizi 3.2 Rapor Sorgularının Ayrıştırılması 3.4 Boyut Tahmini Çalışmaları Mevcut veritabanındaki verilerin analizinden sonra kararlaştırılan raporların SQL sorguları yazılan SQL Parser uygulaması aracılığıyla ayrıştırılmıştır. Çıktı olarak TABLO, KOLON, FONKSIYON ve JOIN yapıları elde edilmiştir. Bu bilgiler aracılığıyla mevcut veritabanı yapısından bellek içi veritabanına aktarılması istenilen veriye ulaşılmıştır. Bu adımın sağladığı en büyük yarar bellek içi veritabanına kopyalanacak veri içinde gereksiz bilgilerin bulunmaması dolayısıyla yeni yaratılacak veritabanı boyutunun minimum tutulmasıdır. Bellek içi veritabanına aktarılacak olan veri ve yaratılacak küp tablolar belirlendikten sonra mevcut veritabanındaki veri tipi, boyutları ve tablolardaki satır sayıları kullanılarak bellek içi veritabanında yer alacak verinin toplam boyutu yaklaşık olarak hesaplanmıştır. Bu hesaplama yapılırken bellek içi veritabanı ürününün sunduğu kolon sıkıştırma özelliği de göz önüne alınmıştır. Böylece oluşturulacak veritabanının donanım gereksinimi elde edilmiştir. Şekil 2: SQL Parser ile Ayrıştırma Şekil 4: Boyut Tahmini Hesaplamaları 3.5 Güncelleme Modülü Çalışmaları Mevcut veritabanı ve bellek içi veritabanı sistemleri arasında veri ve dolayısıyla rapor güncelliği sağlanması için bir güncelleme modülü gerekmektedir. Bu işlem birden fazla yöntemle sağlanabildiği için bu yöntemlerin kıyaslanması ve en uygun olanın seçilmesi gerekmektedir. Şekil 5: Genel Akış 4. Deneysel Sonuçlar Bu bölümde bir önceki bölümde anlatılan adımlar takip edilerek algoritmalarda kullanılan parametreler ve elde edilen çıktılar sayısal olarak paylaşılmıştır. Çalışma kapsamında üzerinde çalışılan test sunucusunun özellikleri şu şekildedir; 4 Intel(R) Xeon(R) CPU E7-4820 @ 2.00 GHz işlemci, 240 GB bellek ve 300 GB disk. Sunucu üzerinde kurulu işletim sistemi ise Windows Server 2008 R2’dir. Hazırlanan test sunucusunda geleneksel disk tabanlı veritabanı ürünü olarak Oracle 11g (Release 2) veritabanı sistemi ürünü, bellek içi veritabanı olarak Oracle TimesTen (11.2.2 x64) ürünü kullanılmıştır. Bu ürünün seçiminde farklı bellek içi veritabanı sistemlerinin performanslarının karşılaştırıldığı bildiriden faydalanılmıştır [8]. 4.1 Mevcut Veritabanından Elde Edilen Bulgular Mevcut veritabanı analizinin ilk aşamasında Log Parser uygulaması örnek müşteri verilerinden oluşturulan alt küme üzerinde kullanılarak 2013 Eylül - 2014 Şubat periyodundaki rapor kayıtları (logları) incelenmiştir. Bu çıktıdan daha doğru cevap süresi ortalamaları elde edebilmek amacıyla, sonuçlar üzerinde tek yönlü budanmış ortalama (one-sided trimmed mean) yöntemi kullanılmıştır. Bu yöntemle her raporun en yavaş %1’lik kesimde yer alan kısmı ortalama hesabından çıkarılarak bazı bağlantı veya kullanıcı kaynaklı hataların sonucu etkilememesi amaçlanmıştır. Tek yönlü budanmış çalışma hızı ortalamaları 10 saniyenin üzerinde olan raporların bellek içi veritabanında çalıştırılması uygun görülmüştür. Ayrıca rapor istek frekansları da göz önünde bulundurulmuştur. Raporların istek frekanslarının bütün rapor istekleri içindeki yüzdeleri hesaplanıp değerleri %3 ün üzerindeki raporlar seçilmiştir. Bu iki özelliğe aynı anda sahip olan rapor sayısının 5 olduğu görülmüştür ve performans testlerinde bu alt küme ve raporlar kullanılmıştır. Yine Log Parser’dan elde edilen çıktı kullanılarak 4 farklı histogram üretilmiştir. Şekil 6’da bu histogramlar mevcuttur. Veritabanı analizinin ikinci aşamasında ise tablo içeriklerindeki değişiklikler ele alınmıştır. Şekil 7’de verilen sonuçlar ışığında değişiklik miktarlarında sabah 08:00-10:00 arasında bir yoğunluk yaşandığına, ancak asıl yoğunluğun 16:0020:00 arasında olduğuna ulaşılmıştır. Bu bilgiler daha sonra periyodik güncelleme zamanları belirlenirken kullanılmıştır. Şekil 6: Rapor İsteklerinin Çeşitli Histogramları Şekil 7: Büyük Veriye Sahip Tablo İçeriklerinin Günün Saatlerine Göre Değişimleri 4.2 Rapor Sorgularının Ayrıştırılması Rapor kayıtları incelemesiyle bellek içi veritabanından çekilmesi kararlaştırılan 5 raporun sorgularının SQL Parser aracılığıyla ayrıştırılması sonucu yeni yaratılacak veritabanına aktarılması gereken verinin 19 tabloda yer aldığı saptanmıştır. Ayrıca bu 5 raporun sorgularında bulunan JOIN yapıları da birliktelik kuralı analizi için kaydedilmiştir. Bu hesaplamada kullanılan formül Şekil 8 de verilmiştir. int row_size = 0; int size = 0; for each column in table_columns { If (data_type == "NVARCHAR2" && character _length > 64) size = 2 * avg_column_length + 24; Else If (data_type == "NVARCHAR2" && character _length <= 64) size = 2 * character_length + 8; 4.3 Birliktelik Kuralı Çalışmaları Çalışmanın bu aşamasında en çok bilinen ve uygulaması en kolay birliktelik kuralı algoritmalarından biri olan Apriori Algoritması gerçeklenmiştir. Bununla birlikte rapor sorgularından elde edilen JOIN yapılarıyla birlikte rapor frekansları kullanılarak apriori algoritması için bir girdi dosyası hazırlanmıştır. Apriori Algoritmasında kullanılan terim ve formüller Tan, Steinbach ve Kumar’ın kitaplarından alınmıştır [9]. Algoritma gerçeklenirken birçok farklı parametre denenmiştir. Bu parametreler içinden veritabanı uzmanı ile birlikte en doğru sonuçların support=0,33 ve confidence=0,01 parametreleriyle elde edildiği görülmüştür. Bir başka deyişle raporların en az 1/3’ünde yer alan JOIN ilişkilerinin küp tablo halinde saklanması gerektiği sonucuna varılmıştır. Bu parametreler doğrultusunda elde edilen çıktı filtrelenmiştir. Bu adımda amaçlanan mümkün olan en çok JOIN ilişkisini bir arada bulunduran küp tablolar yaratabilmektir. Bunu sağlamak için bir başka kuralın alt kümesi olan kurallar elenmiştir ve geriye sadece 4 küp tablo önerisi kalmıştır. 4.4 Boyut Tahmini Çalışmaları Rapor sorgularının ayrıştırılmasından elde edilen 19 tablo ve birliktelik kuralı analiziyle elde edilen kurallar doğrultusunda bu tablolardan yaratılacak olan 4 küp tablonun toplam boyutu 26GB olarak hesaplanmıştır. Else If (data_type == "DATE") size = 7; Else If (data_type == "NUMBER") size = data_precision + data_scale; row_size += size; } double table_size = row_count * row_size; // in bytes table_size = table_size/1048576; // in megabytes Şekil 8: Boyut tahmini formülü Formülde yer alan avg_column_length, character _length, data_precision, data_scale , data_type değişkenleri Oracle Veritabanı ürününden çekilen bilgilerdir. Bu adımdan sonra bellek içi veritabanı yaratılmıştır. Çalışma kapsamında yazılan aktarım modülüyle mevcut veritabanından bellek içi veritabanına veri aktarımı otomatik olarak gerçekleştirilmiştir ve bu veriler kullanılarak küp tabloların bellek içi veritabanında yaratılması sağlanmıştır. Bu modül girdi olarak 4.2 ve 4.3 numaralı bölümlerde elde edilen bilgileri içeren bir XML dosyası kullanmaktadır. Aktarım işlemi yalnızca bir defa sistem kurulurken çalıştırılmıştır. Sonrasında ise verinin güncelliğini sağlamak için güncelleme modülünden faydalanılmıştır. Ayrıca Timesten ürününün bize sunduğu bir özellik olan kolon bazlı sıkıştırma tablolar yaratılırken uygulanarak 26GB olarak belirlenen veri boyutunun veri aktarımı sonrasında 18GB seviyesine düşürülmesi sağlanmıştır. 4.5 Güncelleme Modülü Çalışmaları Önerilen Yöntem Bölümü’nde bahsedildiği üzere bu işlem algoritmik, anlık ve periyodik olmak üzere 3 farklı şekilde yapılabilmektedir. Bu 3 yöntemin güçlü ve zayıf yönleri yapılan deneylerde saptanmış ve Tablo 1’de gösterilmiştir: Tablo 1: Çeşitli Güncelleme Yöntemlerinin Karşılaştırmaları Algoritmik Güncelleme Anlık Güncelleme Periyodik Güncelleme Anlık Bilgi Doğruluğu Sistem Yükü Karmaşıklık Hız ORTA YÜKSEK YÜKSEK ORTA YÜKSEK YÜKSEK DÜŞÜK ORTA ORTA DÜŞÜK DÜŞÜK YÜKSEK Çalışma kapsamında amaçlanan hedeflerden bir tanesinin sistem üzerindeki yükü azaltmak olması ile algoritmik ve anlık güncelleme yöntemleri çelişmektedir. Ayrıca karmaşıklığı düşük olan periyodik güncelleme yüksek hızı ile de öne çıkmaktadır. Bu noktalar göz önüne alındığında periyodik güncelleme en uygun yöntem olarak seçilmiştir. Bununla birlikte mevcut veritabanı analizinde elde edilen tablo içeriklerinin günün saatlerine göre değişimi ele alınarak periyodik güncelleme zamanlarına karar verilmiş ve anlık bilgi doğruluğunun en yüksek seviyede tutulması hedeflenmiştir. Bütün işlemler tamamlandığında windows servis halinde yazılan güncelleme modülü ile istenilen periyotlarda güncellemenin otomatik olarak yapılması sağlanmıştır. Bu modül yine aktarım modülünde olduğu gibi bir XML girdisi kullanarak mevcut veritabanındaki içeriklerinde değişiklik olan tabloların bellek içi veritabanına aktarımından ve küp tabloların yeniden oluşturulmasından sorumludur. yapabilmek için seçilen 5 raporun SQL sorguları bellek içi veritabanında çalışacak şekilde yeniden düzenlenmiştir. İki sistem üzerinden de çalıştırılan sorguların doğruluğu onaylandıktan sonra Tablo 2’deki bulgulara ulaşılmıştır: Tablo 2: Performans Testi Sonuçları Raporlar Rapor 1 Rapor 2 Rapor 3 Rapor 4 Rapor 5 Veritabanı Seçimi Disk Bellek İçi Disk Süre (sn.) 1,99 0,53 8,08 Hızlanma katsayısı Bellek İçi Bellek İçi + Küp Tablolar Disk Bellek İçi Disk 0,25 32,32 x 0,2 40,40 x 111,08 7,97 12,78 13,94 x 0,09 142 x 0,06 213 x 19,59 0,78 25,11 x Bellek İçi Bellek İçi + Küp Tablolar Disk Bellek İçi 3,75 x 5. Sonuç Yapılan deneylerde de görüldüğü üzere, büyük veri hacmine sahip raporlama sistemlerinde bellek içi veritabanı performans açısından olumlu sonuçlar göstermektedir. Ayrıca rapor isteklerinin derinlik ve karmaşıklığına göre geleneksel ve bellek içi veritabanı sistemlerine ayrıştırılması ile disk tabanlı sisteme de katkı sağlamaktadır. Bununla birlikte cevap sürelerinde yaşanan azalma da sistem üzerindeki yükün azalması konusunda önemli bir fayda sağlamaktadır. 4.6 Performans Testleri Bellek içi veritabanı sistemi üzerinde çalışacak raporların ve yaratılacak küp tabloların seçiminde verinin yapısı ve kullanıcı yorumu etkilidir. Ancak yüksek frekansta ve yüksek karmaşıklıkta olan rapor isteklerinin bellek içi veritabanı sistemine iletilmesi, diğer daha düşük frekans ve düşük karmaşıklıktaki rapor isteklerinin ise geleneksel sistem üzerinden cevaplanması daha uygun görülmektedir. Son olarak önerilen sistem ve geleneksel sistem arasında bir performans kıyaslaması Sonuç olarak, büyük veri üzerinde çalışmakta olan raporlama ve benzeri çözümlerde, bellek içi veritabanı destekli bir yapının hem performans hem de sistem kaynak kullanımı açısından ciddi bir yararı olduğu saptanmıştır. Ayrıca karmaşıklığı yüksek olan sorgular içeren bir sistemde denormalizasyon yoluyla maliyeti yüksek bazı işlemlerin önceden yapılarak her sorguda tekrar çalıştırılmasının önüne geçilmiş ve büyük veri üzerinde çalışmayı kolaylaştırdığı ortaya konulmuştur. 6. Teşekkür Bu bildirideki çalışmalar "Idea Teknoloji ve Bilgisayar Çözümleri Ltd. Sti." kurumu tarafından 3120961 numaralı TEYDEB projesi kapsamında desteklenmiştir. 7. Kaynaklar [1] Francesco Pagano, Davide Pagano: Using In-Memory Encrypted Databases on the Cloud. Securing Services on the Cloud (IWSSC), 2011 1st International Workshop. 30-37 (2011) [2] Sansar Choinyambuu: In Memory Database:Performance evaluation based on query time. Seminar Database Systems. (2012) [3] Lasaro Camargos, Fernando Pedone, Rodrigo Schmidt: A Primary-Backup Protocol for In-Memory Database Replication. Network Computing and Applications, 2006. NCA 2006. Fifth IEEE International Symposium. 30-37 (2006) [4] Joan Guisado Gamez: In-memory and Ondisk Hybrid Relational Database Management System. Bitirme Tezi. (2011) [5] G. Lawrence Sanders, Seungkyoon Shin: Denormalization Effects on Performance of RDBMS. Proceedings of the 34th Annual Hawaii International Conference on System Sciences, 2001. 3-6 (2001) [6] Yma Pinto: A Framework for Systematic Database Denormalization. Global Journal of Computer Science and Technology, Vol 9, No 4. 44-52 (2009) [7] Agrawal, R.; Imieliński, T.; Swami, A: Mining association rules between sets of items in large databases. Proceedings of the 1993 ACM SIGMOD international conference on Management of data SIGMOD’93. 207 (1993) [8] Şule Gündüz Öğüdücü, Mehmetcan Gayberi, Erhan Akpınar, Hakan Kutluay: A Study for Performance Comparison of Different In-Memory Databases. Application of Information and Communication Technologies (AICT), 2013. 7th IEEE International Conference. 91-96 (2013) [9] Pang-Ning Tan, Michael Steinbach, Vipin Kumar: Introduction to Data Mining. Addison-Wesley. 329-337 (2005)