çoklu serverdan aynı anda veri çekme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
mustafasoy
Üye
Mesajlar: 154
Kayıt: 02 Ağu 2013 05:00
Konum: istanbul
İletişim:

çoklu serverdan aynı anda veri çekme

Mesaj gönderen mustafasoy »

merhabalar , bir konuda tecrübeli arkadaşlardan fikir almak istiyorum
sorum şu ;
ortak bir havuza login olduktan sonra bir sorgu sonucunda
farklı serverlardaki veriyi çekerek kullanıcıya göstermek istiyorum
örneğin kullanıcı sisteme login oldu ve tüm siparişlerim diye bir rapor çekti
login olan kullanıcının birden fazla firmada siparişi olabilir , bu durumda o kullanıcının bilgisinin geçtiği serverlardan ilgili sorguyu çekerek kullanıcının karşısına getirmek istiyorum , bunun için nasıl bir yapı kurmamı tavsiye edersiniz ?
aklıma gelenler :
1. webservis oluşturarak havuzu besleyecek olan serverlardan bu web servis aracılığı ile ve göndererek havuzu doldurayım (bu durumda tüm serverlarda bir uygulamanın çalışması belirli periyotlarda veriyi güncellemesi gerekmekte)
2.serverlar tarafında hazırda bekleyen bir uygulama hazırlamak ve oturum açan kullanıcının sorgusu sonucunda serverda bekleyen uygulamaya sorgu gönderip sonucunu geri göndermesini beklemek hoş ikiside birbirine çok benziyor gibi ama birinci yöntem daha güvenli gibi geliyor

ancak 1.yöntemde çok fazla veri kirliliği olacaktır , oturum açan kullanıcının kim olacağını bilemeyeceğinden sistemdeki tüm carilerin sipariş bilgilerini gönderecektir ki hızlı sonuç dönsün bu yüzden 2.yöntem daha mantıklı geliyor sorgu çekildiğinde
bağlı 10 servere oturum açan kullanıcıyla alakalı bir kayıt varmı diye bakacak varsa sonuçlar dönecek ve kullanıcıya gösterilecek böylelikle hem bilgi en güncel haliyle gelecek aynı zamanda server üzerinde gereksiz birsürü kayıt tutmamış olunacak
daha doğru ve güvenli nasıl bir yol izleyebilirim , ilgilenen arkadaşlarıma teşekkür ederim.
Nasıl ki Soru sorarak öğrendiyseniz , öğrendiklerinizi cevap vererek öğretiniz.
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: çoklu serverdan aynı anda veri çekme

Mesaj gönderen thelvaci »

Hangi veritabanı sunucusunu kullandığınızı; veritabanlarının aynı sunucu üzerinde mi yoksa başka sunucular üzerinde mi olduğunu belirtmediğiniz için varsayımlara binaen aklınızda bir kurgu oluşturmanıza yardımcı olayım.

Bu kurgu SQL Server kullandığınızı varsayıyor.

Eğer veritabanlarınız aynı sunucu üzerinde host edilecek ise; almayı arzu ettiğiniz konsolide raporlar için bir veritabanından bir diğerine yada ortak bir havuza veri çekmeniz yerine; ortak bir veritabanı üzerinde yazacağınız bir stored procedure'nin tüm veritabanlarından bilgi çekecek şekilde tasarlanması yerinde olabilir.

Örneğin;
Sunucu Instance: 192.168.1.99\Sql2012
Veritabanı-1 Adı: Ortak
Veritabanı-2 Adı: A
Veritabanı-3 Adı: B
Veritabanı-4 Adı: C

Siz "Ortak" isimli veritabanına bir sp yazacaksınız ve bu sp kayıt deseni aynı olan tablolardan UNION ALL ile veri çekecek. Tabii, bu varsayım canlı verilere ihtiyacınız varsa geçerlidir. Eğer canlı, anlık veriye ihtiyacınız yok ise; bu durumda sizin belirleyeceğiniz bir saat diliminde(tercihen çalışma saaatleri dışında) çalışacak bir job ile ihtiyacınız olan verileri ortak bir havuza toplayabilirsiniz. Genelde Olap sistemlerinin yaklaşımı bu şekildedir.

Herbir veritabanı farklı sunucular üzerinde host ediliyor ise; bu durumda seçenekler çeşitleniyor. İlk olarak linked server kullanıp yukarıda bahsettiğim gibi bir stored procedure vasıtası ile verilerinizi çekebilirsiniz. Yada sunucular arasında veri aktarım işlemlerini organize edebilirsiniz. Bunun için SQL Server tarafında pek çok alternatif var, replication, always on, mirroring vs. Ancak; yazdıklarınızdan anladığım kadarı ile her bir veritabanınız aynı schema'ya sahip ancak verileri farklı(muhtemelen farklı firmalar); bu durumda replication, always on, mirroring vb. çözümler pek de efektif olmayacaktır.

Sizin için ideal çözüm; her sunucuya bağlanabilen linked server'ların oluşturulduğu ortak bir sunucu üzerinden merkezi bir sql sorgusu ile bilgileri elde etmek gibi görünüyor.

Bu durumda;

Sunucu Instance: 192.168.1.90\sql2012 (Ortak Instance (DB Name: X))
Sunucu Instance-1: 192.168.1.91\sql2012 (DB Name: A)
Sunucu Instance-2: 192.168.1.91\sql2012 (DB Name: B)
Sunucu Instance-3: 192.168.1.91\sql2012 (DB Name: C)

Öncelikle, "Ortak Instance" üzerinde her üç sunucu instance'ına da bağlantı sağlayabilen 3 adet linked server yazıp, ardından X veritabanında bir stored procedure içinde bu linked server'lar üzerinden sorgu çekebilirsiniz. Benzer şekilde OPENROWSET gibi fonksiyonları da kullanabilirsiniz, bundan sonrası sizin araştırmanız ve sizin modellemeniz.
Kullanıcı avatarı
mustafasoy
Üye
Mesajlar: 154
Kayıt: 02 Ağu 2013 05:00
Konum: istanbul
İletişim:

Re: çoklu serverdan aynı anda veri çekme

Mesaj gönderen mustafasoy »

kusura bakmayın tuğrul hocam eksik bilgiler yazmışım, doğru tahmin etmişsiniz mssql server üzerinde bir yapı düşünüyorum
ancak linked server kullanmak çok mantıklı gelmiyor sebebi ise modem port yönlendirme vs. işlemler gerekecek bütün bunlarla uğraşmak yerine başka bir çözüm üzerinde biraz araştırma yapayım , ilginiz için teşekkürler
Nasıl ki Soru sorarak öğrendiyseniz , öğrendiklerinizi cevap vererek öğretiniz.
Cevapla