2013-06-12 17 views
5

Çalışan bir gerçek zamanlı izleme programım var ama sınıf mimarisi çok karmaşık. Ve bu beni gerçekten çok rahatsız ediyor. Programı açıklayarak başlayayım.Sınıf Bilgilerini İzleme Mimarisi

Kullanıcı Etkileşimi

Bu kullanıcı etkileşimi ile bir izleme programıdır. Bu, kullanıcının farklı boyutları, farklı metrikleri seçebileceğini, bunları dahil edebileceğini, bunları hariç tutabileceğini veya gruplandırabileceğini ve her zaman gerçek zamanlı grafiğin kullanıcının kararlarına göre değişebileceğini gösterir.

Örnek Günlüğü Veri Dönüşüm

Req Success OrderFunction 5 60ms WebServer2 
Req Failed OrderFunction 2 176ms WebServer5 
Resp Success SuggestFunction 8 45ms WebServer2 

DB

So her satır onunla önemlidir her sütun var. Ve bunun gibi istemci tarafında olmalı. Kullanıcı, Başarılı Sipariş İşlevlerini veya WebServer2 veya Tüm Başarısız İstek vb .'deki tüm işlevleri görmeyi seçebileceğinden, bunları yapmak için bu sütunlar arasındaki tüm ilişkilere ihtiyacım var.

Başka bir şey, bunlar Veritabanından gelen değerlerdir. Ayrıca, kullanıcıların görmesi gereken Metin'i tutan bu değerlere de göz atıyorum. Req isteği gibidir, Resp yanıttır.

Bu sorunun genel olarak görüldüğünü biliyorum. Ama bir yol bulmaya çalışıyorum. Bu tür bir sınıf mimarisinin sektörde bir adı olabilir. Beni sadece doğru yollara yönlendirecek tavsiyelerde bulunmak için geldim.

Teşekkür

+0

Veritabanında sıradan bir tuple benziyor. – darijan

+0

Evet ama bunu sınıfta tutmak acıdır. 3 dakikalık aralıklarla 15k kayıt var. – Xelom

+1

Daha sonra ilişkisel bir veritabanında tutmayı ve bir dizi hizmetle ihtiyaç duyduğunuz bilgileri elde etmeyi düşünün. VEYA, tüm bunları mevcut yapıyla ve gerçek nesnelerle yapabilirdiniz, ancak bu nesnelerin (genellikle otomatik olarak, oluşturma ve değiştirme üzerine) devamlılığını sağlayan bir nesne veritabanına (örneğin, Versant'a bakın) yapabilirsiniz. – darijan

cevap

1

15k I (snmp ortamının o tür çok gürültülü alabilirsiniz) veri merkezlerinde ağ izleme uygulamaları ile bakın eskiden ne gibi bir çok geliyor, her 3 dakikada bir kaydeden bir sürü. Ne yapacağımız, ne kadarlık bir boyuta sahip olduğumuzun ne kadarını, hangi ayrıntı seviyesinde ve bu bilginin ne tür bir roll-up stratejisi belirlediğine karar vermesidir - aynı zamanda ne kadar depolama alanı istediğimizi soruna atmak. Zaman sıraları üzerinde birleştirdiğiniz bir roll-up stratejisiyle, sütunlarını birleştirerek, veritabanının boyutuna sonlu bir sınır olduğundan emin olabilirsiniz.

Muhtemelen bu günlerde daha yeni araçlar var, ancak bu tür izleme sorunları için RRD (http://oss.oetiker.ch/rrdtool/) ve BerkeleyDB'yi kullandım. Ayrıca, bazı yazılımların tekilleştirilmesinden faydalanabilirsiniz. Bir satırın, bir satırın önceki bir satıra benzer bir şekilde bulunup bulunmadığını yalnızca bir sayıyı güncellediğiniz bir yaklaşımdır. Olay fırtınalarının NOC ekranlarına su basmasını önlemek ve teknisyenlerin kritik olayları kaçırmasına neden olmak için bunu yapardık. Bu arada, bunu bir yorum olarak bıraktım, ama stackoverflow beni önleyen bu şöhret meselesini yapıyor ve ben de dün burada soruları yanıtlamaya başladım.

Yani, daha tamamlanmış bir örnek olarak verilerinizi kullanarak:

Req Success OrderFunction 5 60ms WebServer2 
Req Failed OrderFunction 2 176ms WebServer5 
Resp Success SuggestFunction 8 45ms WebServer2 

Ben istemini varsayalım/Resp yalnızca iki değer vardır - istek ve yanıt tekabül? Bu durumda, o sütun ikili, 1 bit olsun - bir istek olup olmadığını yapın. İkinci sütun, Başarı/Başarısız - 1 bit veya en kötü üçlü, 2 bit alan gibi görünür. Fonksiyonlar (OrderFunction, Öneri Fonksiyonu, vb.) Muhtemelen numaralandırılabilir - ya da burada tekilleştirme yapıyorsanız, bunu bir bit maskesi haline getirebilirsiniz. Bunun için bir yabancı anahtarı sadece bir birleşim tablosuna da kullanabilirsiniz. Numaralandırılan seçenekte, bunların 256'sından daha az, ancak 128'den fazla bir bayt kullandığınızı varsayalım.Satırları kaydetmek için, özellikle de bu gibi hızlı bir şekilde geldiğinde, bir de-çoğaltma çözümüne yerleştirebilirseniz ve 256 seçeneğiniz varsa, bit maskesi için tam olarak bu kadar çok bit gerekir. Her bir permütasyonun temsil edilmesi gerekmediği, bu durumda, maksimum permütasyon sayısını ve bu, tekilleştirme için bit masanızdaki bitlerin sayısını doğru bir şekilde yuvarlamaktır. İçinde 5,2 ve 8 olan bir sonraki sütun, bunun neyi temsil ettiğinden emin değilim, bir çeşit tam sayı veya belki de bir bayt mı? Milisaniyeler, SQL lehçenize ve temsil etmek için beklediğiniz maksimum milisaniye, bir int veya belki de imzasız bir kısa veya belki sadece kısa bir şekilde (temelde yaklaşık 32.7 saniye) temsil edilebilir. Kısa veya imzasız kısa kullanırsanız, uygulama mantığınızda, maksimun ötesindeki bir değerin maks, sıfır değil olarak temsil edildiğinden emin olun. Son sütun, sunucularınızı temsil eden bir dizgeye benziyor. Bu, büyük olasılıkla, tekilleştirme veya aktarma konusunda rehberlik etmek için kullanacağınız bir sütun. Bu yüzden belki de bir yabancı anahtar olabilir.

Neyse, RRD gerçekten çok iyi kullanılmıştı ama neredeyse bir düzine yılda kullanmamıştım - bunu geri aldım, bir düzine yıldan fazla bir süredir RRD kullanmadım :). Eminim BerkeleyDB bu tür bir şey olsa da yine de iyi bir veri tabanıdır - bu gibi araçlara ve araçlara bakın ve eminim ki iyi bir çözüm ortaya çıkacaktır.

Bu yardımcı olur umarım!

+0

Detaylı cevabınız için teşekkür ederiz. Veritabanı yapmamla ilgili sorunum yok. Tek sorun uygulamadaki verilerim. Ve sen benim problemimi gerçekten iyi açıkladın. Tekilleştirme. Tüm verileri tutmak ve kullanıcının bunu değiştirmesini istediğimden, filtrelemek veya gruplandırmak istiyorum. Çok fazla yinelenen veri tutuyorum. Örneğin, kullanıcı başarısız işlemleri görmek istemiyorsa. Uygulamamda başarısız olan her satırı filtrelemem gerekiyor ve hatalı OrderFunction sayılarını azaltması gerekiyor. – Xelom

+0

Bir yaklaşım, uygulama mantığını daha ince hale getirmek, yani veritabanına daha fazla gezinti yapmak ve uygulama katmanı veya istemcide performansın arttırılması için istemcideki geri dönen satırların sayısına bir sınır koymak olabilir. karmaşıklığı azaltmak.Çakışmayı gerçekleştirmek için saklı yordamları kullanabilirsiniz, hatta çoğaltılmış veya bağımlı bir veritabanında çatırdama yapabilir ve ekleri için master'ı ayırabilirsiniz. Eklemede de-çoğaltma, son kullanıcı sorgularını daha hızlı hale getirirken, sorgulama sırasında yeniden çoğaltma, gelecekteki gereksinimler için esneklik sağlar. – hoonto

+0

Bu nedenle, uygulama veya istemcide, ancak azaltılmış veri kümesinde bazı filtreleme gerçekleşebilir. Ayrıca, çok fazla ham veriye gerçekten filtre uygulamanız gereken durumlarda, filtreleme seçenekleriyle birlikte saklı bir prosedür olarak bunu yapın. – hoonto