• Böylece, dosya-sunucu şemasının yukarıdaki tüm dezavantajları, istemci-sunucu mimarisinde ortadan kaldırılır. İstemci-sunucu teknolojisi

    Daha önce, hem veritabanı hem de onunla etkileşime giren uygulama aynı bilgisayarda bulunduğunda, yerel veritabanları düşünülüyordu. Bu bölüm, uygulamanın ve veritabanının farklı bilgisayarlarda bulunduğu bir ağda kullanılan uzak veritabanlarıyla çalışmanın bazı özelliklerini ele alacaktır.

    Prensip olarak, yerel bir veri tabanı, paylaşımlı erişim için, yani bir ağ versiyonunda da kullanılabilir. Bu durumda, veritabanı dosyaları ve onunla çalışmak için uygulama ağ sunucusunda bulunur. Kullanıcı, sunucuda bulunan bir uygulamayı bilgisayarından başlatır ve uygulamanın bir kopyası kendisi için başlatılır. Uygulamayı doğrudan kullanıcının bilgisayarına da yükleyebilirsiniz; bu durumda uygulamanın, örneğin bir takma ad aracılığıyla belirtilen, paylaşılan veritabanının konumunu bilmesi gerekir. Yerel bir veritabanı kullanmak için böyle bir ağ seçeneği, dosya sunucusu mimarisine karşılık gelir.

    "Dosya-sunucu" ağ mimarisinin avantajları, veritabanı ve uygulamanın geliştirilmesi ve işletilmesinin kolaylığıdır. Geliştirici aslında yerel bir veritabanı ve uygulama oluşturur ve bunlar daha sonra yalnızca ağ sürümünde kullanılır. Veritabanıyla çalışmayı organize etmek için ek yazılım gerektirmez. Bununla birlikte, dosya sunucusu mimarisinin de önemli dezavantajları vardır. Verilerle çalışmak için, büyük miktarda veri ağ üzerinde dolaşırken bir gezinme erişim yöntemi kullanılır. Sonuç olarak, ağın aşırı yüklenmesi, düşük hızının ve veritabanıyla çalışırken düşük performansının nedenidir. Senkronizasyon gerekli bireysel kullanıcılar, başka bir kullanıcı tarafından düzenlenen kayıtların tablolarındaki kilitle ilişkilendirilir. Uygulamalar yalnızca verileri işlemekle kalmaz, aynı zamanda veritabanını da yönetir. Veritabanının farklı bilgisayarlardan yönetilmesi nedeniyle veri tabanının erişim kontrolü, gizliliği ve bütünlüğünün sağlanması zordur.

    Bu eksiklikler nedeniyle, dosya sunucusu mimarisi genellikle küçük ağlarda kullanılır. olan ağlar için büyük miktar Kullanıcılar için tercih edilen seçenek (ve bazen tek olası seçenek) "istemci-sunucu" mimarisidir. "İstemci-sunucu" ağ mimarisinde, veritabanı ağ sunucusu bilgisayarında (sunucu veya uzak sunucu) bulunur ve uzak veritabanı olarak da adlandırılır. Bu veritabanı ile çalışan uygulama, kullanıcının bilgisayarında bulunur. Kullanıcı uygulaması, istemci uygulaması olarak da bilinen istemcidir. İstemci ve sunucu aşağıdaki gibi etkileşime girer. İstemci, veritabanını barındıran sunucuya bir istek oluşturur ve gönderir. Sunucu isteği yürütür ve istenen verileri istemciye döndürür. Böylece istemci-sunucu mimarisinde istemci bir istek gönderir ve yalnızca gerçekten ihtiyaç duyduğu verileri alır. Tüm istek işleme uzak sunucuda yapılır. Böyle bir mimarinin avantajları aşağıdaki faktörleri içerir. Verilerle çalışmak için ağ üzerindeki yükü azaltan ilişkisel bir erişim yöntemi kullanılır. Uygulamalar veritabanını doğrudan yönetmez, yönetimde sadece sunucu yer alır. Bu bağlamda, yüksek derecede veri koruması sağlanabilir. Uygulamada veri tabanı yönetim kodu yoktur, bu nedenle uygulamalar basitleştirilmiştir.

    Yalnızca bir bilgisayarın sunucu olarak adlandırılmadığını, aynı zamanda veritabanını yöneten özel bir program olduğunu unutmayın. İstemci ve sunucu arasındaki veri alışverişinin organizasyonu temel alındığından, SQL dili böyle bir programa SQL sunucusu da denir ve veritabanına da SQL veritabanı denir. Kelimenin geniş anlamıyla, bir sunucu bir bilgisayar, bir program ve veri tabanının kendisi olarak anlaşılmaktadır. SQL sunucuları, InterBase, Oracle, vb. gibi endüstriyel DBMS'lerdir. Sunucuların her birinin, örneğin veritabanının yapısı ve SQL dilinin uygulanması ile ilgili, dikkate alınması gereken kendi avantajları ve özellikleri vardır. bir uygulama geliştirmek. Ayrıca, sunucuyu bir program (yani SQL sunucusu) olarak anlayacağız ve sunucu bilgisayarda kurulu olan veritabanına uzak veritabanı adı verilecek.

    Bir istemci-sunucu mimarisinde çalışırken, bir uygulama şunları yapmalıdır:

    · sunucu ile bir bağlantı kurun ve sonlandırın;

    · isteğin sonuçlarını alarak sunucuya bir istek oluşturun ve gönderin;

    · alınan verileri işleyin.

    Ancak, veri işleme temel farklılıklar yerel veritabanlarında veri işlemeye kıyasla.

    Yerel bir veritabanı gibi uzak bir veritabanı, birbiriyle ilişkili tabloların bir koleksiyonudur. Ancak, bu tablolardaki veriler genellikle bir ortak dosya. Yerel bir veritabanında olduğu gibi, uzak bir veritabanının tablolarında da bağlantılar (ilişkiler), kısıtlamalar olabilir. bilgi tutarlılığı, sütun değerleri üzerindeki kısıtlamalar vb. Uzak veritabanları için bir alana sütun adı verilir. Veritabanını yönetmek için sunucu şunları kullanır:

    · tetikleyiciler;

    · jeneratörler;

    · saklı yordamlar;

    · kullanıcı tanımlı işlevler;

    · işlem mekanizması;

    · önbelleğe alınmış değişiklik mekanizması;

    Listelenen öğelerin çoğu, dil özellikleri tarafından sağlanır. SQL Server, yerel sürümle karşılaştırıldığında, aşağıda tartışılan önemli özelliklere sahiptir.

    Delphi sistemi, çeşitli sunucular için uygulamaların geliştirilmesini sağlar ve bunun için uygun araçları sağlar. Yerel veritabanlarıyla çalışmak için daha önce açıklanan uygulama geliştirme ilkelerinin ve araçlarının birçoğunun uzak veritabanlarıyla çalışmak için de geçerli olduğunu unutmayın. Özellikle uygulama geliştirme için DataSource, DatasetsTable, ADOTable, SQLTable, IBTable, Query, ADOQuery, SQLQuery, DBGrid grid gibi bileşenler kullanılmaktadır.

    BDE'yi kullanarak uzak bir veritabanına erişmenin ilişkisel bir yolunu uygulamak için yalnızca SQL dilinin araçlarını kullanmanız gerekir. Bu nedenle Query, StoredProc, UpdateSQL gibi bileşenler seçilmelidir. Ayrıca veri seti üzerinde navigasyonel erişim yöntemine özel yöntemler kullanılamaz.

    Sorgu bileşeni kullanılarak bir veritabanı değiştirme sorgusu yürütülürken ortaya çıkan veri kümesine ihtiyaç duyulmuyorsa, bu sorgunun ExecSQL yöntemi kullanılarak yürütülmesinin tercih edildiğini hatırlayın. Tablolar ve sorgularla çalışmak için Database Desktop ve SQL Explorer gibi programları kullanmaya devam edebilirsiniz.

    Uzak veritabanlarıyla çalışmak üzere tasarlanmış Delphi araçları iki türe ayrılabilir: araçlar ve bileşenler.

    Araçlar, geliştirilen uygulamalar dışında veri tabanının bakımını sağlayan özel programlar ve paketler içermektedir. Aralarında:

    · InterBase Sunucu Yöneticisi - InterBase sunucusu başlangıç ​​yönetimi programı;

    · IBConsole - InterBase sunucu konsolu;

    · SQL Monitor, uzak veritabanlarına yönelik SQL sorgularının yürütülme sırasını izlemek için kullanılan bir programdır.

    Bileşenler, uzak bir veritabanıyla işlem gerçekleştiren uygulamalar oluşturmak için tasarlanmıştır. Bunlardan en önemlilerini listeliyoruz:

    · Veritabanı (veritabanı bağlantısı);

    · Oturum (veritabanı ile geçerli oturum);

    · StoredProc (saklı yordam çağrısı);

    · UpdateSQL (SQL sorgusuna dayalı bir veri kümesinin değiştirilmesi);

    · DCOMConnection(DCOM bağlantısı);

    · ADO, dbExpress, Interbase sayfa bileşenleri Bileşen paletleri.

    Veritabanı, Oturum, UpdateSQL gibi adlandırılmış bileşenlerin birçoğunun yerel veritabanlarıyla çalışırken de kullanıldığını unutmayın. Bu nedenle, Veritabanı bileşeni, BDE mekanizmasını kullanarak verilere erişmek için gezinme yöntemiyle bir işlem mekanizması uygulamanıza izin verir. Ancak, bu bileşenler çoğunlukla uzak veritabanlarıyla çalışırken kullanılır. İstemci veri kümesi ClientDataSet ve DCOMConnection sunucusuna bağlantı gibi bazı bileşenler, üç katmanlı (üç katmanlı) bir "istemci-sunucu" ("ince" istemci) mimarisinde çalışacak şekilde tasarlanmıştır ve kullanılır bir uygulama sunucusu oluşturmak için.

    Uzak veritabanları ile hem araçlar kullanılarak hem de programlı olarak gerçekleştirilen işlemler, SQL dilini temel alır. Örneğin, IBConsole programını kullanarak bir tablo oluştururken, SQL sorgusu (talimat) Tablo Oluştur'u yazmanız ve yürütmeniz gerekir. BDE mekanizması kullanılarak bir tablonun oluşturulması kullanıcı uygulamasından gerçekleştiriliyorsa, bu amaçla aynı sorguyu gerçekleştiren bir Sorgu veri kümesi kullanılır. Ana fark, uzak veritabanına karşı SQL sorgusunun nasıl yürütüldüğüdür.

    Dolayısıyla, uzak veritabanları için, uygulamada kullanılan araçlar ile araçlar arasındaki fark, yerel veritabanlarına göre çok daha küçüktür.

    Interbase sunucusu.Tüm sunucular benzer veri düzenleme ve yönetim ilkelerine sahiptir. Örnek olarak, Delphi için "yerel" olan InterBase 6.x sunucusuyla çalışmayı düşünün. Delphi ile birlikte InterBase 6.x sunucusunun iki bölümü teslim edilir: sunucu ve istemci. InterBase'in sunucu kısmı, InterBase sunucusunun yerel bir sürümüdür ve uzak veritabanlarıyla çalışmak üzere tasarlanmış uygulamalarda hata ayıklamak için kullanılır ve bunların bir ağ sürümünde aynı bilgisayarda kontrol edilmesine olanak tanır. Yerel bilgisayarda hata ayıkladıktan sonra, uygulama aşağıdakileri yapmanız gereken herhangi bir değişiklik yapılmadan ağ bilgisayarlarına aktarılabilir:

    · veritabanını sunucuya kopyalayın;

    · uzak bir veritabanı ile uygulama için yeni bağlantı parametreleri ayarlayın.

    Gibi programları kullanarak veritabanını kopyalayabilirsiniz. Windows Gezgini. İstemci kısmı, uzak bir veritabanına uygulama erişimi sağlamak için gereklidir.InterBase sunucusunun yerel sürümünü kullanarak veritabanları ve uygulamalar geliştirirken, bunun bir takım sınırlamaları olduğunu ve örneğin aşağıdakileri desteklemeyebileceğini aklınızda bulundurmanız gerekir: sunucu olay mekanizması veya kullanıcı tanımlı işlevler. InterBase sunucusunun tam özellikli sürümü, Delphi'den ayrı olarak satın alınır ve kurulur.Belirtildiği gibi, uzak bir veritabanıyla çalışmak, uygun işlemleri sağlayan SQL dilinin yeteneklerine dayanır. Uzak veritabanları için SQL dilinin amacı ve yetenekleri, temel olarak bu dilin yerel veritabanları için amaç ve yetenekleri ile örtüşmektedir.

    İş kuralları. Belirtildiği gibi, iş kuralları veritabanı yönetim mekanizmalarıdır ve veritabanını tutarlı bir durumda tutmak için tasarlanmıştır. Ek olarak, veritabanı kısıtlamalarını uygulamak ve örneğin veritabanı işlem istatistiklerini toplamak gibi bir dizi başka eylemi gerçekleştirmeleri gerekir.

    İş kuralları, fiziksel ve yazılım düzeylerinde uygulanabilir. İlk durumda, bu kurallar (örneğin, ilgili tablolar için referans bütünlüğü kısıtlaması) tablolar oluşturulduğunda belirlenir ve veritabanı yapısına dahil edilir. Bunu yapmak için, Tablo Oluştur deyiminin sözdizimine uygun işlenenler dahil edilir, örneğin, Varsayılan (varsayılan değer). Daha fazla çalışmada, fiziksel düzeyde belirlenen kısıtlamayı ihlal etmek veya aşmak imkansızdır.

    Program düzeyinde, sunucuda ve uygulamada iş kuralları uygulanabilir. Ayrıca, bu iş kurallarının fiziksel düzeyde tanımlanması gerekmez. Tetikleyiciler genellikle bir sunucuda iş kurallarını uygulamak için kullanılır. Bu yaklaşımın avantajları, veritabanını yönetmek için hesaplama yükünün tamamen sunucuya düşmesi, bu da uygulama ve ağ üzerindeki yükü azaltması ve kısıtlamaların veritabanına erişen tüm uygulamalar için geçerli olmasıdır. Ancak aynı zamanda veritabanını yönetme esnekliği de azalır. Ayrıca, sunucu tetikleyicileri ve saklı yordamlar için hata ayıklama araçlarının iyi geliştirilmediğini unutmayın.

    Bileşenler ve araçları, bir uygulamadaki iş kurallarını programlamak için kullanılır. Bu yaklaşımın avantajı, iş kurallarını değiştirme kolaylığı ve "sizin" uygulamanızın kurallarını tanımlayabilme yeteneğinde yatmaktadır. Dezavantajı, her uygulamanın veritabanını yönetmek için kendi kurallarını belirleyebilmesi gerçeğiyle ilişkili veritabanı güvenliğindeki azalmadır.

    InterBase sunucusunun tüm veritabanının bilgileri, gdb uzantılı tek bir dosyada saklanır. Bu dosyanın boyutu birimler ve hatta onlarca gigabayt olabilir. Microsoft SOL Server DBMS'nin benzer bir veritabanı boyutuna sahip olduğunu, daha güçlü Oracle ve SyBase DBMS için ise veritabanı boyutunun onlarca ve yüzlerce gigabayta ulaştığını unutmayın.

    Yapısı tablolardan (ayrı veya bağlantılı) oluşan yerel veritabanının aksine, uzak veritabanı şu öğeleri içeren daha karmaşık bir yapıya sahiptir: tablolar, tetikleyiciler, dizinler, kullanıcı işlevleri. kısıtlamalar, saklı yordamlar, etki alanları, görünümler, oluşturucular, istisnalar, ayrıcalıklar.

    Uzak veritabanı yapısının öğelerine ayrıca meta veriler de denir. "Meta" kelimesi "yukarıda" anlamına gelir, yani meta veri, veritabanının yapısını açıklayan verilerdir. InterBase için bir veritabanındaki maksimum tablo sayısı 65.536'dır ve bir tablodaki maksimum sütun sayısı 1000'dir. InterBase tablolarının Paradox yerel veritabanı tablolarından daha az izin verilen sütun (alan) türüne sahip olduğunu unutmayın.

    İhtisas sütunun adlandırılmış açıklamasıdır. Bir etki alanı tanımlandıktan sonra, adı diğer sütunları tanımlamak için kullanılabilir.Bir etki alanının analoğu bir veri türüdür.

    Görüş kayıtları Select deyimi kullanılarak seçilen mantıksal (sanal) bir tablodur. Göz atmanın avantajı, kayıtları bir kez seçtiğinizde, bunları daha sonra Select'i yeniden çalıştırmadan kullanabilmenizdir. Aynı sorguları sık sık çalıştırıyorsanız bu yararlıdır.

    Saklı yordam sunucuda bulunan ve istemci uygulamasından çağrılan bir alt programdır. Bu nesnelerin kullanılması, aşağıdaki nedenlerle veritabanı erişim hızını artırır:

    · istek metni yerine, ağ üzerinden sunucuya saklı yordama kısa bir çağrı gönderilir;

    · saklı yordam, önceden sözdizimi denetimi gerektirmez.

    Tetiklemek veritabanı sunucusunda bulunan ve veritabanı kayıtları değiştirilirken otomatik olarak çağrılan bir prosedürdür, örn. sütunlar değiştirildiğinde veya sütunlar kaldırılıp eklendiğinde. Saklı yordamlardan farklı olarak, tetikleyiciler bir istemci uygulamasından çağrılamaz, onlara parametreler iletemez veya onlardan sonuç alamazsınız.

    Kullanıcı tanımlı fonksiyon Pascal gibi algoritmik bir dilde yazılmış normal bir fonksiyondur. Oluşturulan işlev, dinamik olarak biçimlendirilir DLL'ler, nereden çağrılabilir her zamanki gibi. Bir işlevin çağrıldığından emin olmak için Windows'un uygun kitaplığın yolunu bilmesi gerekir. Bu tür işlevlerin kullanımı, SQL dilinin işlev kümesini genişletir.

    Önbelleğe alınan değişiklik mekanizması istemci bilgisayardaki önbellekte (arabellekte) verilerin yerel bir kopyasının oluşturulması ve verilerdeki tüm değişikliklerin bu kopyada gerçekleştirilmesidir. Yerel bir kopyayı saklamak için özel bir arabellek (önbellek) kullanılır. Yapılan değişiklikler, sunucuda depolanan ana veritabanına aktarılarak onaylanabilir veya iptal edilebilir. Bu mekanizma, işlem mekanizmasına benzer, ancak aksine, tüm değişiklikler ana veritabanına tek bir pakette aktarıldığı için ağ üzerindeki yükü azaltır. Yerel kopyadaki tüm girişlerin değerlerini değiştirme konusunda kilitleri olmadığını unutmayın. Kilitler, sunucuda bulunan ana veritabanı için diğer uygulamalar tarafından ayarlanabilir Önbelleğe alınan değişikliklerin mekanizması, başta Veritabanı, Tablo ve Sorgu (BDE kullanılarak erişildiğinde kullanılır) olmak üzere bileşenlerin uygun olduğu uygulamada uygulanır. araç. Ek olarak, önbelleğe alınan değişikliklerin mekanizması, bu amaca yönelik UpdateSQL bileşeni tarafından desteklenir.İncelenen mekanizmanın ana avantajları, uzak veritabanları için kendini gösterir, ancak yerel veritabanlarıyla çalışırken de kullanılabilir.

    Ayrıcalık veritabanına erişim haklarını temsil eder. Ayrıcalık yönetimi, ayrıcalıkların ayarlanması ve kaldırılmasından oluşur. Bir veritabanı nesnesi (örneğin bir tablo) oluşturduktan sonra, yalnızca oluşturucuya ve SYSDBA adlı sistem yöneticisine erişim izni verilir. Diğer kullanıcıların veritabanına erişmesi için, onlara uygun ayrıcalıkların atanması gerekir. Örneğin InterBase Manager Server programı kullanılarak oluşturulan yeni bir kullanıcının ortaya çıkmasından hemen sonra, bu kullanıcının minimum erişim hakları vardır: yalnızca adını ve parolasını girerek veritabanına girmesine (ona bağlanmasına) izin verilir, ancak veri tabanına girmesine izin verilmez. bu veritabanının tek bir nesnesi onun için kullanılabilir. Veritabanıyla aktif çalışma olasılığını sağlamak için ayrıcalıkları tanımlamanız (yeniden tanımlamanız) gerekir.

    Ayrıcalıklar Grant komutuyla belirlenir. Ayrıcalıklar, tablolara ve görünümlere kullanıcıların erişimini kısıtlamanıza olanak tanır. Bu durumda, "kullanıcı", verilere erişen herhangi bir nesneyi ifade eder. Kullanıcının (uygulamanın) kendisine ek olarak, bu tür nesneler tablolar, görünümler, saklı yordamlar ve tetikleyiciler olabilir. Ayrıcalık aynı anda birkaç kullanıcıya verilirse, adları virgülle ayrılmış olarak listelenir.

    Bu örnekte, aralarında "yavaş" bir diyalog olan basit bir sunucu ve basit bir istemci programı geliştireceğiz. Teknolojiye göre bir müşteri oluşturacağız Windows Formları, ve sunucu Windows hizmeti . Sunucu, hazır bir dizi etiketli yanıta sahip olacak, etiketli istemci isteklerini bekleyecek ve bunlara uygun mesajlarla yanıt verecektir. Bu, bizi daha da karmaşık bir sistem oluşturmaya ayarlayacaktır - daha sonra ele alacağımız veritabanından uzak çizimleri görüntüleme.

    müşteri oluştur

    Birden çok örnekte çalışabilen bir istemci programıyla başlayalım ("http://msdn.microsoft.com/en-us/library/system.net.sockets.tcplistener.accepttcpclient.aspx ")


    Tablo 19.7.
    eleman Mülk Anlam
    Biçim Metin müşteri
    boyut 300; 300
    liste kutusu (İsim) liste kutusu
    Rıhtım Tepe
    Yazı tipi Arial; 12pt
    Öğeler
    1. Merhaba!
    2. Lelik
    3. Naber
    4. Bugün uğrayalım mı?
    5. Güle güle o zaman!
    Seçim modu Bir
    boyut 292; 119
    düğme (İsim) btnGönder
    otomatik boyutlandırma Doğru
    Yazı tipi Arial; 10pt
    konum 96; 127
    boyut 101; 29
    Metin Göndermek
    Metin kutusu (İsim) Metin kutusu
    Rıhtım alt
    konum 0; 162
    çok satırlı Doğru
    kaydırma çubukları Dikey
    boyut 292; 105

    Dinlenmek istenen ayarlar programlı olarak form öğeleri ekleyin.

    Sistemi kullanarak; System.Collections.Generic kullanarak; System.ComponentModel kullanarak; System.Data kullanarak; System.Drawing kullanarak; System.Text kullanarak; System.Windows.Forms kullanarak; // System.IO kullanan ek ad alanları; System.Net'i kullanarak; System.Net.Sockets kullanarak; System.Threading kullanarak; ad alanı SimpleClient ( public kısmi sınıf Form1: Form ( int port = 12000; String hostName = "127.0.0.1";// local TcpClient client = null;// İstemci referansı public Form1() ( InitializeComponent(); // İlkini seç liste öğesi listBox.SelectedIndex = 0; listBox.Focus(); // TextBox'ı temizlemek için içerik menüsü ContextMenuStrip contextMenu = new ContextMenuStrip(); textBox.ContextMenuStrip = contextMenu; ToolStripMenuItem item = new ToolStripMenuItem("Clear"); contextMenu.Items. Add(item); item.MouseDown += new MouseEventHandler(item_MouseDown); ) // İstek gönder ve yanıt al özel geçersiz btnSubmit_Click(nesne gönderen, EventArgs e) ( if (listBox.SelectedIndices.Count == 0) ( MessageBox.Show ("Mesajı seçin"); dönüş; ) deneyin ( // Sunucuya bağlı bir istemci oluşturun client = new TcpClient(hostName, port); // Pano boyutlarını kendimiz ayarlayın (İsteğe bağlı!) client.SendBufferSize = client.ReceiveBufferSize = 1024 ; ) catch ( MessageBox.Show("Sunucu hazır değil!"); geri dönmek; ) // İsteği protokole yazın AddString("Client: " + listBox.SelectedItem.ToString()); // Sunucuya bağlı NetworkStreams oluşturun NetworkStream streamIn = client.GetStream(); NetworkStream streamOut = client.GetStream(); StreamReader okuyucuStream = yeni StreamReader(streamIn); StreamWriter writeStream = yeni StreamWriter(streamOut); // Sunucuya bir istek gönderin writeStream.WriteLine(listBox.SelectedItem.ToString()); yazarStream.Flush(); // Yanıtı oku String receiverData = readerStream.ReadLine(); // AddString("Sunucu: " + alıcıVeri); // Bağlantıyı ve akışları kapatın, sıra önemli değil client.Close(); writeStream.Close(); okuyucuStream.Close(); ) // Çok Satırlı modda TextBox etkinleştirildiğinde bir satır ekleme private void AddString(String line) ( StringBuilder sb = new StringBuilder(textBox.Text); StringWriter sw = new StringWriter(sb); sw.WriteLine(line); textBox .Text = sw.ToString(); ) // Bağlam menüsü yoluyla listeyi temizleme void item_MouseDown(nesne gönderen, MouseEventArgs e) ( textBox.Clear(); listBox.Focus(); ) ) )

    Sunucuya bir bağlantı aldıktan sonra iki iş parçacığı oluşturuyoruz Ağ Akışı ve bunları okuma/yazma kontrolü için uygun kabuklara paketleyin. Sunucu ile değişim protokolde görüntülenir. Metin kutusu. Protokolü temizlemek için dinamik olarak bir içerik menüsü oluşturuldu.

    Sınıf Tcp İstemcisi kodda kullandığımız, üst düzey (ve basitleştirilmiş) bir soket sarmalayıcıdır (sınıf Priz). Daha düşük düzeyli yuva yönetimi (daha ayrıntılı) gerekiyorsa, TcpClient.Client özelliğinde buna bir başvuru depolanır. Ancak bu özellik korunduğu için ( korumalı), o zaman erişim yalnızca türevinden mümkündür Tcp İstemcisi sınıf.

    Şimdi uygulamayı çalıştırırsanız Basit İstemci, o zaman çalışacaktır, ancak sunucuya bir şey göndermeye çalıştığınızda, sunucunun hazır olmadığına dair bir mesaj alacaksınız. Henüz bir sunucu yok, hadi oluşturalım.

    sunucu oluşturma

    Şablona göre sunucu programını resident yapalım Windows hizmeti, bir önceki örnekte yaptığımız gibi interface ile de yapılabilse de asıl olan local bilgisayarda tek bir instance'da başlatılmasıdır. Sunucu programı küresel ağa dahilse, o zaman IP ve bu ağdaki tek bağlantı noktası olmalıdır. Bu nedenle, ağ kullanımı IP küresel ağ için izin almanız gerekir.



    Sistemi kullanarak; System.ComponentModel kullanarak; System.Configuration.Install kullanarak; System.ServiceProcess kullanarak; ad alanı SimpleServer ( // Bir derleme kurarken, yükleyiciyi çağırın ortak kısmi sınıf Installer1: Yükleyici ( özel ServiceInstaller serviceInstaller; özel ServiceProcessInstaller serviceProcessInstaller; public Installer1() ( // Hizmet için ayarlar oluşturun serviceInstaller = new ServiceInstaller(); serviceProcessInstaller = yeni ServiceProcessInstaller(); // Makine ve kullanıcı için hizmet adı serviceInstaller.ServiceName = "SimpleServerServiceName"; serviceInstaller.DisplayName = "SimpleServer"; serviceInstaller.StartType = ServiceStartMode.Manual;// Manüel olarak başlat // Hizmet nasıl başlatılacak. serviceProcessInstaller.Account = ServiceAccount.LocalService; this.serviceProcessInstaller.Password = null; this.serviceProcessInstaller.Username = null; // Geçerli nesne koleksiyonuna ayarları ekle this.Installers.AddRange(new Installer ( serviceInstaller, serviceProcessInstaller )); ) ) )

    Sistemi kullanarak; System.Collections.Generic kullanarak; System.Text kullanarak; // System.IO kullanan ek ad alanları; System.Net'i kullanarak; System.Net.Sockets kullanarak; System.Threading kullanarak; System.ServiceProcess kullanarak; System.Collections kullanarak; namespace SimpleServer ( class Service1: ServiceBase ( TcpListener server = null;// Server link int port = 12000; String hostName = "127.0.0.1";// local IPAddress localAddr; String cevaplar = ("1. Sen kimsin?", "2. Merhaba Lelik!", "3. Hepsinden iyisi!", "4. Tabii ki sonuna kadar", "5. Akşama kadar!" ); // Constructor public Service1() ( localAddr = IPAddress .Parse( hostName);// Başka bir formata dönüştür Konu thread = new Thread(ExecuteLoop); thread.IsBackground = true; thread.Start(); ) private void ExecuteLoop() ( try ( server = new TcpListener(localAddr, port) );/ / Dinleyici oluştur server server.Start();// Start server String data; // sonsuz döngü while (true) ( ​​if (!server.Pending())// İstek kuyruğu boş devam; TcpClient client = server.AcceptTcpClient();// Current client // Pano boyutlarını kendimiz ayarladık (Opsiyonel!) / / Varsayılan olarak, her iki tamponun boyutu 8192 bayta ayarlanmıştır client.SendBufferSize = client.ReceiveBufferSize = 1024; // NetworkStream'i bağlayın ve kolaylık olması için sarın NetworkStream streamIn = client.GetStream(); NetworkStream streamOut = client.GetStream() ; StreamReader readerStream = new StreamReader(streamIn); StreamWriterwriterStream = new StreamWriter(streamOut); // Okuma isteği verisi = readerStream.ReadLine(); // Yanıt gönder int dizini; if (int.TryParse(data.Substring(0,0, data.IndexOf(" .")), out index)) data = cevaplar; else data = data.ToUpper(); writeStream.WriteLine(data); writeStream.Flush(); // Bağlantıyı ve akışları kapatın, sipariş gelmez fark etmez client.Close(); readerStream.Close(); writeStream.Close(); ) ) catch (SocketException) ( ) nihayet ( // Sunucuyu durdurun server.Stop(); ) ) )) )

    Veri göndermek ve yanıt almak için, müşteri uygulaması başka bir sunucunun, uygulamanın soketine bağlantının adresini belirttiği çift yönlü bir soket (veya iki tek yönlü soket) oluşturur. Bağlantı kurulursa (sunucu çalışıyorsa), istemci uygulaması bir ağ akışını sokete bağlar Ağ Akışı ve onun aracılığıyla veri iletimini ve alımını gerçekleştirir.

    Bağlantının diğer tarafındaki sunucu TcpListener sonsuz bir döngüde dinlemek bağlantı kuyruğu müşterilerle Bazı istemci ona bağlıysa ( server.Pending()!=yanlış), daha sonra sunucu, yöntemi kullanarak bu istemciyi alır. KabulTcpClient()- hazır bir dönüş adresi ile alma/gönderme için bir soket oluşturur, çift yönlü bir akış (veya iki tek yönlü) oluşturur, ardından isteği okur ve yanıtı iletir.



    Lütfen, sunucu programımızın çalışması için kodun ayrı bir iş parçacığında paketlenmediğini unutmayın. İplik(yürütme dizisi), ardından hizmetler penceresinde bu program işletim sistemi tarafından başlatılmayacaktır (deneyin!). Bunun nedeni, yöntem kodunda Yürütme Döngüsü() sunucu, istemci istekleri kuyruğunu dinlemek için sonsuz bir döngü kullanır. Bu döngü yürütmenin ana iş parçacığında bırakılırsa ( İplik) uygulama, o zaman basitçe bir döngüde sıkışacak ve kendisini normal şekilde tamamlayamayacaktır. Bu nedenle, döngü ile kodu ayrı bir iş parçacığına (thread) yerleştiririz ve ana uygulama iş parçacığı (sunucu iş parçacığı) ile birlikte kapanacak şekilde arka plan yaparız.

    Önemli Not

    Akış Ağ Akışıçift ​​taraflı sabit uzunluktadır. Yöntem GetStream() sadece client ve server soketleri arasında direkt bağlantı kurar. Ancak gerçek uzunluğu gönderen tarafın mesajına göre belirlenir. Almak / iletmek için bir akış kullanmak mümkündür, ancak o zaman sunucu tarafından gönderilen mesajın uzunluğu, istemciden aldığı mesajın uzunluğunu geçmemelidir (neredeyse gözlerim oturdu!). Bu nedenle, ağ bağlantısının iki düğümü arasında ayrı tek yönlü iletim için her iki tarafta iki akış kullanıyoruz.

    Örnek 3. Bir veritabanından görüntüleri görüntülemek için istemci-sunucu uygulaması

    Önceki basit örnekte, ağ uygulamaları oluşturma ilkelerini (biraz) tanıdık. Şimdi daha karmaşık bir örnek oluşturalım, müşteri resim istediğinde ve sunucu onları depodan alıp müşteriye gönderdiğinde. İÇİNDE Alıştırma 7üç farklı resim deposu ve üç görüntüleyici geliştirdik. İÇİNDE bu örnek veritabanını kullanalım Resimler.my2.mdb hazır çizimlerle ve temelinde oluşturacağız ağ uygulaması(yapmayanlar için Alıştırma 7, veritabanı kataloğa eklenmiştir kaynak/veri).

    İstemciyi oluşturmak

    İstemci için, şu türde bir pencere uygulaması oluşturacağız: WPFİle Kullanıcı arayüzü, kısmen ödünç alındı Örnek 6 Alıştırma 7.


    Sunucu hazır değil, lütfen bekleyin! İletişime geçmeye çalışıyoruz rahatsızlıktan dolayı özür dileriz...

    Sunucunun kullanılamamasıyla ilgili metni içeren bir açılış ekranı görüntülemek için öğeyi uyguladık. görünüm kutusu, başka bir öğenin yerleştirildiği Sınır metin içeriği ile. Böyle bir "bahçe", açılış ekranını pencerenin boyutuyla orantılı olarak büyütmenize izin verecektir. Bununla birlikte, unsurun tanıtılması görünüm kutusu alt öğelerinin ölçeklerini sürekli olarak yeniden hesaplamaya çalıştığı için, pencereyi hareket ettirirken arayüzün yeniden çizilmesini önemli ölçüde yavaşlatmaya başlar. Yalnızca prosedürel kodda yöneteceğimiz arayüz öğelerine adlar verdik.

    Sistemi kullanarak; System.Collections.Generic kullanarak; System.Text kullanarak; System.Windows kullanarak; System.Windows.Controls kullanarak; System.Windows.Data kullanarak; System.Windows.Documents kullanarak; System.Windows.Input kullanarak; System.Windows.Media kullanarak; System.Windows.Media.Animation kullanarak; System.Windows.Media.Imaging kullanarak; System.Windows.Shapes kullanarak; // System.IO kullanan Akış için ek ad alanları; IO = System.IO kullanarak; // System.Windows.Threading kullanarak Path'i adreslemek için takma ad; // DispatcherTimer için // Socket için ek ad alanları //System.Net kullanarak; System.Net.Sockets kullanarak; System.Collections kullanarak; // Liste ad alanı PicturesClientDB ( genel kısmi sınıf Window1: Window ( int port = 12000; String hostName = "127.0.0.1"; // local TcpClient client = null; // İstemci referansı String sendMessage = "!!!GetNames!!!"; / / Liste isteği (pozakovyristy) Karakter ayırıcı = ("#"); // Yanıtı bir ad dizisine dönüştürmek için DispatcherTimer timer; // Timer // Constructor public Window1() ( InitializeComponent(); // Create and zamanlayıcıyı çalıştır timer = new DispatcherTimer(); timer.Tick += new EventHandler(timer_Tick); timer.Interval = TimeSpan.FromSeconds(1); timer.Start(); ) // Sunucuya bir çağrı başlatır void timer_Tick( nesne gönderen, EventArgs e) ( Execute(listBox); ) private void listBox_SelectionChanged(object sender, SelectionChangedEventArgs e) ( Execute((ListBox)sender); ) void Execute(ListBox lst) ( // Listeyi resim adlarıyla doldur dene ( // Sunucu mevcutsa, bir istemci oluştur client = new TcpClient(hostName, port); ) catch ( // Sunucu hazır değil, zamanlayıcıyı başlat ve eğer (Prompt.Visibility != Visibility.Visible) ( Prompt.Visibility = Görünürlük.Görünür; zamanlayıcı.Başlat(); ) geri dönmek; ) switch (sendMessage) ( case "!!!GetNames!!!": // Resim isimlerini al ve listeye bağla lst.ItemsSource = GetNames(); // Listede SelectionChanged'ı çağırmak için ilk öğeyi seç lst.SelectedIndex = 0; lst.Focus(); sendMessage = ""; break; default: // Eğer (Prompt.Visibility == Visibility.Visible) ise ( Prompt.Visibility = Visibility.Hidden; timer.Stop) mesajı gizleyin ve zamanlayıcıyı durdurun (); ) / / Görüntüyü alın ve kullanıcıya bir fırça ile gösterin String name = lst.SelectedValue.ToString(); BitmapImage bi = new BitmapImage(); bi.BeginInit(); // Görüntüyü bi.StreamSource = new MemoryStream (GetPicture(name)); bi.EndInit(); Pictures.picture.ImageSource = bi;// Resmi arka plana geçir Border break; ) ) private String GetNames() ( Dize adları; // Ağ bağlantısı akışları oluştur StreamReader readerStream = new StreamReader(client.GetStream()); StreamWriter writeStream = new StreamWriter(client.GetStream()); // İsteği sunucuya gönder writeStream.WriteLine(sendMessage); yazarStream.Flush(); // Yanıtı oku String receiverData = readerStream.ReadLine(); isimler = alıcıVeri.Split(separator);// Bir dizge dizisine dönüştürün // Bağlantıyı ve akışları kapatın, sıra önemli değil client.Close(); yazar akışı. kapalı(); okuyucuStream.Close(); dönüş isimleri; ) Byte GetPicture(String name) ( // Ağ bağlantısı akışları oluştur NetworkStream readerStream = client.GetStream(); StreamWriter writeStream = new StreamWriter(client.GetStream()); // Sunucuya bir istek gönder writeStream.WriteLine(name) ;writerStream.Flush(); // Yanıtı oku // ReceiveBufferSize - gelen veriler için arabellek boyutu // SendBufferSize - giden veriler için arabellek boyutu Liste liste = yeni Liste (client.ReceiveBufferSize);// Artan kapasite Bayt bayt = yeni Bayt; // Soket tampon boyutu int sayısı = 0; // ((count = readerStream.Read(bytes, 0, bytes.Length)) != 0) for (int i = 0; i) iken gelen veri yığınları< count; i++) list.Add(bytes[i]); // Преобразуем в массив результата bytes = new Byte; list.CopyTo(bytes); // Закрываем соединение и потоки, порядок неважен client.Close(); writerStream.Close(); readerStream.Close(); return bytes; } } // Для привязки к ресурсу class Pictures { // Поле public static ImageBrush picture = new ImageBrush(); static Pictures() { // Дежурный рисунок заставки picture.ImageSource = new BitmapImage(new Uri(@"flower2.jpg", UriKind.Relative)); picture.Stretch = Stretch.Fill; picture.Opacity = 1.0D; } // Привязываемое в интерфейсе свойство public static ImageBrush Picture { get { return picture; } } } }

    Lütfen resimleri görüntülerken geleneksel unsuru terk ettiğimizi unutmayın. resimönceki alıştırmada yaptığımız gibi. Ve bir değişiklik olsun diye, tamamen alışılmadık bir şekilde (Türkçe) hareket ettiler. Şimdi çizimleri bir fırça ile göstereceğiz. Resim Fırçası bir dikdörtgenin arka planında Sınır kendisine bağlı nesne aracılığıyla resimler. Elbette hayatta böyle sapkınlık yapmanız pek olası değildir, ancak bu seçenek bir yerlerde işe yarayabilir.


    Sunucunun yokluğu veya durması gerçeği algılanır algılanmaz açılış ekranı görünecektir. Sunucu bulunduktan sonra açılış ekranı kaybolacaktır. sayesinde bu mekanizma hemen çalışacaktır. sistem zamanlayıcı. Ancak henüz sunucu yok ve yapılması gerekiyor.

    Veritabanı sunucusunu bir hizmet olarak oluşturma
    • takım Dosya/Ekle/Yeni Projeçözüme ekle Ağ Akışı adlı yeni proje ResimlerServerDB tip Windows hizmeti


    Sistemi kullanarak; System.Collections.Generic kullanarak; System.ComponentModel kullanarak; System.Data kullanarak; System.Diagnostics'i kullanarak; System.ServiceProcess kullanarak; System.Text kullanarak; // System.Data.OleDb kullanan ADO.NET için ek ad alanları; System.Data.Common kullanarak; // System.IO kullanan ek ad alanları; System.Net'i kullanarak; System.Net.Sockets kullanarak; System.Threading kullanarak; System.Collections kullanarak; ad alanı PicturesServerDB ( genel kısmi sınıf Service1: ServiceBase ( int port = 12000; String hostName = "127.0.0.1"; // local IPAddress localAddr; TcpListener server = null; // Sunucu referansı String ayırıcı = "#"; // Ayırıcı adlar yanıt dizesinde String connectionString; // DB bağlantı dizesi public Service1() ( // DB bağlantı dizesini App.config dosyasından ConnectionString = System.Configuration.ConfigurationManager. ConnectionStrings["PicturesDB"].ConnectionString alanına alın; / / IP'yi başka bir biçime dönüştür localAddr = IPAddress.Parse(hostName); // Yeni bir dizide çalıştır (thread) Thread thread = yeni Thread(ExecuteLoop); thread.IsBackground = true; thread.Start(); ) özel geçersiz ExecuteLoop() ( try ( server = new TcpListener(localAddr, port);// Bir sunucu-dinleyici oluştur server.Start();// Sunucuyu başlat // (true) iken istemcileri dinlemenin sonsuz döngüsü ( /) / Bağlantı kuyruğunu kontrol edin eğer (!server .Pending())// İstek kuyruğu boş devam edin; TcpClient istemcisi = server.AcceptTcpClient();// Geçerli istemci // Ağ bağlantısı akışları oluştur StreamReader readerStream = new StreamReader(client.GetStream()); NetworkStream streamOut = client.GetStream(); StreamWriter writeStream = yeni StreamWriter(streamOut); // İstemci komutunu oku String receiverData = readerStream.ReadLine(); // Anahtarı (receiverData) tanıyın ve yürütün ( case "!!!GetNames!!!":// Ayırıcı ile ayrılmış adları gönderin Dize adları = GetNames(); yazarStream.WriteLine(adlar); // sarmalayıcı ile kullan writeStream.Flush (); break; default:// Resim gönder Bayt bayt = GetPicture(receiverData); streamOut.Write(bytes, 0, bytes.Length);// Doğrudan streamOut.Flush(); break; ) // Kapat bağlantı ve akışlar, sıra önemsiz client.Close(); okuyucuStream.Close(); writeStream.Close(); ) ) nihayet ( // Sunucuyu durdurun server.Stop(); ) ) // Görüntü adlarını veritabanından alın ve bunları GetNames() istemci dizisine göndermek için tek bir dizede paketleyin ( // ADO altyapısını oluşturun ve yapılandırın . NET OleDbConnection bağlantısı = new OleDbConnection(connectionString); OleDbCommand cmd = new OleDbCommand("Tablom'dan DosyaAdı SEÇ"); cmd.connection = bağlantı; bağla.open(); // Çizim isimlerini al OleDbDataReader okuyucu = cmd.ExecuteReader(CommandBehavior.CloseConnection); // Giden verilerden bir dizi oluşturma StringBuilder sb = new StringBuilder(); foreach (okuyucuda DbDataRecord kaydı)// Reader.Read() okumaya eşdeğer sb.Append(((string)record["DosyaAdı"]).Trim() + ayırıcı); // Buradaki bağlantı, tüm verileri okuduktan sonra DataReader nesnesinin kendisini kapatacaktır // oluşturulduğundaki kurala göre CommandBehavior.CloseConnection // Ayırıcının fazladan son karakterini kaldırın sb.Replace(separator, String.Empty, sb .ToString().LastIndexOf(separator ), separator.Length); dönüş sb.ToString(); ) // İstemci baytına göndermek için veritabanından resmin kendisini alın GetPicture(String name) ( // ADO.NET altyapısını oluşturun ve yapılandırın OleDbConnection conn = new OleDbConnection(); conn.ConnectionString = connectionString; // Oluştur ve komut nesnesini resim adına göre parametrelendirerek yapılandırın OleDbCommand cmd = new OleDbCommand(); cmd.Connection = conn; cmd.CommandType = CommandType.Text; // İsteğe Bağlı! "; cmd.Parameters .Add(new OleDbParameter()); cmd.Parameters.Value = name;// Image name OleDbDataAdapter adapter = new OleDbDataAdapter(cmd); // Görüntüyü veritabanından al DataTable tablosu = new DataTable() ; adapter.Fill(tablo) ;bayt bayt = (bayt)tablo.Satırlar["Resim"]; // Resme bağlan bayt döndürür; ) ) )

    İstemci-sunucu uygulaması derken, veritabanı sunucularının kullanımına dayalı bir bilgi sistemini kastediyoruz (Bölüm 2.1'in sonundaki uzun nota bakın). "İstemci-sunucu" mimarisinde bilgi sisteminin genel gösterimi Şekil 2.3'te gösterilmiştir.

    • İstemci tarafında, zorunlu olarak son kullanıcı arayüzünü destekleyen, raporlar üreten ve diğer uygulamaya özel işlevleri yerine getiren bileşenleri içeren uygulama kodu yürütülür (şimdilik uygulama kodunun nasıl oluşturulduğuyla ilgilenmeyeceğiz).
    • Uygulamanın müşteri tarafı, aslında uygulama için DBMS'nin bireysel temsilcisi olan veritabanı yönetimi yazılımının müşteri tarafı ile etkileşime girer.

    (Burada yine terminolojide eksiklikler var. Genellikle bir firma bir sonraki veritabanı sunucusunu piyasaya süreceğini duyurduğunda üstü kapalı olarak bu ürünün bir de client bileşeninin olduğu anlaşılır. "Veritabanı sunucusunun client kısmı" kombinasyonu görünüyor. biraz garip, ama bu terimi kullanmamız gerekecek.)

    Pirinç. 2.3. Bilgi sisteminin "istemci-sunucu" mimarisinde genel gösterimi

    Uygulamanın istemci tarafı ile veritabanı sunucusunun istemci tarafı arasındaki arabirimin genellikle SQL dili kullanımına dayalı olduğunu unutmayın. Bu nedenle, örneğin veri tabanı sorgularına yönelik formların ön işlenmesi veya sonuç raporların oluşturulması gibi işlevler uygulama kodunda gerçekleştirilir.

    Son olarak, araçları kullanarak veritabanı sunucusunun istemci tarafı Ağ Girişi, veritabanı sunucusuna atıfta bulunur ve ona SQL ifadesinin metnini iletir.

    Burada yapılması gereken iki açıklama daha var.

    1. Tipik olarak, gelişmiş veritabanı sunucuları üreten şirketler, ürünlerinin yalnızca günümüzün standart TCP/IP odaklı ağlarında değil, diğer protokollere (örneğin, SNA veya IPX/SPX) dayalı ağlarda da kullanılabilmesini sağlamaya çalışır. Bu nedenle, DBMS'nin istemci ve sunucu bölümleri arasındaki ağ etkileşimlerini düzenlerken, genellikle standart olmayan araçlar kullanılır. yüksek seviye(örneğin, yazılım soketleri veya uzaktan prosedür çağrıları) ve ağın özelliklerine daha az bağımlı olan işlevsel olarak benzer kendi araçları taşıma protokolleri.
    2. SQL dili tabanlı bir arayüzden bahsettiğimizde, bu dili standartlaştırmaya yönelik muazzam çabalara rağmen, dilin standart özelliklerinin genişletilemeyeceği böyle bir uygulama olmadığını bilmelisiniz. Dil uzantılarının düşüncesiz kullanımı, uygulamanın belirli bir veritabanı sunucusu üreticisine tamamen bağımlı olmasına yol açar.

    Bu konuları kursun dördüncü bölümünde daha ayrıntılı olarak ele alacağız.

    Şimdi veritabanı sunucusu tarafında neler olduğuna bakalım. Hemen hemen tüm şirketlerin ürünlerinde, sunucu istemciden operatörün SQL dilindeki metnini alır.

    • Sunucu alınan ifadeyi derler. Belirli bir derleyici tarafından hangi hedef dilin kullanıldığı üzerinde burada durmayacağız; farklı uygulamalarda kullanılır. Farklı yaklaşımlar(örnekler için 4. bölüme bakın). Ana şey, her durumda, veritabanı katalog tablolarında yer alan bilgilere dayanarak, operatörün prosedürel olmayan gösteriminin, yürütülmesi için bir prosedüre dönüştürülmesidir.
    • Ardından (derleme başarılıysa) ifade yürütülür. Yine, teknik ayrıntılar, uygulamalarda farklılık gösterdiğinden tartışmayacağız. Dikkate almak olası eylemler SQL ifadeleri.
      • Bir işleç, veritabanı nesnelerini tanımlamak (veya oluşturmak) için bir işleç sınıfına atıfta bulunabilir (veritabanı şeması öğeleri veya meta veritabanı nesneleri hakkında konuşmak daha doğru ve doğru olacaktır). Özellikle etki alanları, tablolar, bütünlük kısıtlamaları, tetikleyiciler, kullanıcı ayrıcalıkları, saklı yordamlar tanımlanabilir. Her durumda, veritabanı şeması öğesi oluşturma ifadesi yürütüldüğünde, karşılık gelen bilgiler veritabanı katalog tablolarına (meta veritabanı tablolarına) yerleştirilir. Bütünlük kısıtlamaları genellikle veritabanının metatabanında doğrudan metinsel gösterimde saklanır. Tetikleyicilerde ve saklı yordamlarda tanımlanan eylemler için, yordama ilişkin yürütülebilir kod oluşturulur ve katalog tablolarında saklanır. Bütünlük kısıtlamalarının, tetikleyicilerin ve saklı yordamların bir anlamda sunucu tarafından desteklenen veritabanındaki uygulamayı temsil ettiğini unutmayın; uygulamanın arka ucunun omurgasını oluştururlar (aşağıya bakın).
      • Sorgudan etkilenen tabloların içeriğine dayalı olarak ve muhtemelen veritabanında tutulan dizinleri kullanarak veri seçimi deyimlerini yürütürken, ortaya çıkan veri seti oluşturulur (burada kasıtlı olarak "sonuç tablosu" terimini kullanmayız, çünkü bağlı olarak belirli operatör tipinde sonuç sıralanabilir ve tablolar, yani ilişkiler tanım gereği sırasızdır). DBMS'nin sunucu kısmı, sonucu istemci kısmına gönderir ve son işlem, uygulamanın müşteri kısmında yapılır.
      • Veritabanı içerik değiştirme deyimleri (INSERT, UPDATE, DELETE) yürütülürken, şimdiye kadar tanımlanan bütünlük kısıtlamalarının (hemen kontrol edilenler sınıfına ait olanlar) ihlal edilmeyeceği kontrol edilir, ardından uygun eylem gerçekleştirilir (eşlik eden) ilgili tüm dizinlerin ve günlük değişikliklerinin değiştirilmesi). Daha sonra sunucu, değişikliğin herhangi bir tetikleyicinin tetikleme koşulunu etkileyip etkilemediğini kontrol eder ve böyle bir tetikleyici bulunursa eylem prosedürünü yürütür. Bu prosedür, diğer tetikleyicilerin tetiklenmesine vb. neden olabilecek ek veritabanı değişiklik bildirimlerini içerebilir. Bütünlük kısıtlamalarının uygunluğu kontrol edildiğinde ve tetikleyiciler tetiklendiğinde veritabanı sunucusunda gerçekleştirilen eylemlerin, uygulamanın arka ucunun eylemlerini temsil ettiğini düşünebiliriz.

    Veritabanı şeması değişiklik deyimlerini yürütürken (mevcut tabloların sütunlarını ekleme veya silme, mevcut bir tablonun mevcut bir sütununun veri türünü değiştirme vb.), tetikleyiciler de tetiklenebilir, yani başka bir deyişle, uygulamanın arka ucu idam edilmek

    Genel olarak, bir dosya sunucusu mimarisinde, "kalın" bir istemciye ve çok "ince" bir sunucuya sahibiz, yani neredeyse tüm iş istemci tarafında yapılır ve sunucudan yalnızca yeterli kapasite gerekir. disk kapasitesi(Şekil 2.2).

    Pirinç. 2.2. Dosya sunucusu mimarisinde "kalın" istemci ve "ince" sunucu

    Kısa sonuçlar. Basit, düşük hacimli ve tek kullanıcılı kullanım için tasarlanmış bir dosya sunucusu uygulaması çok hızlı bir şekilde tasarlanabilir, geliştirilebilir ve hata ayıklanabilir. Küçük bir şirketin, örneğin personel kayıtlarını tutması için çoğu zaman, bağımsız bir bilgisayarda çalışan izole bir sisteme sahip olmak yeterlidir. Tabii ki, bu durumda da, verilerin bütünlüğünü güvenli bir şekilde depolamak ve sürdürmek için son kullanıcıların (veya bu durumda varlığı şüpheli olan yöneticilerin) büyük özen göstermesi gerekir. Ancak biraz daha zor vakalar(örneğin, bir grup tarafından yürütülen bir projeyi desteklemek için bir bilgi sistemi düzenlerken), dosya sunucusu mimarileri yetersiz hale gelir.

    eşit olmayan bileşenler bilgi ağı. Bazıları bir tür kaynağa sahiptir, bu nedenle bunlara sunucu denir, diğerleri bu kaynaklara erişir ve bunlara istemci denir. Birbirleriyle nasıl etkileşime girdiklerini ve istemci-sunucu mimarisinin ne olduğunu düşünelim.

    İstemci-sunucu mimarisi

    "İstemci-Sunucu" mimarisi, yapısal bileşenlerin, belirli özel işlevlerin (hizmetlerin) sunucu ve düğüm sağlayıcılarının yanı sıra bunu kullanan istemciler olduğu belirli bir ağa dayalı bir ağdaki yapısal bileşenlerin etkileşimidir. hizmet. Belirli işlevler, belirli görevlerin çözümüne göre genellikle üç gruba ayrılır:

    • veri girişi ve sunum işlevleri, sistemle kullanıcı etkileşimi için tasarlanmıştır;
    • uygulama işlevleri - her birinin kendi seti vardır;
    • kaynak yönetimi işlevleri, dosya sistemini, çeşitli veritabanlarını ve diğer bileşenleri yönetmek için tasarlanmıştır.

    Örneğin, olmayan bir bilgisayar ağ bağlantısı, sunum, uygulama ve kontrol bileşenlerini temsil eder. çeşitli seviyeler. Bu seviyeler, işletim sistemi, uygulama ve hizmet yazılımı ve çeşitli yardımcı programlar olarak kabul edilir. Aynı şekilde, yukarıdaki bileşenlerin tümü ağda mevcuttur. Ana şey, bu bileşenler arasında ağ etkileşimini doğru bir şekilde sağlamaktır.

    İstemci-sunucu mimarisinin çalışma prensibi

    İstemci-sunucu mimarisi, çoğunlukla bilgilerin yalnızca saklanmadığı, aynı zamanda periyodik olarak işlendiği kurumsal veritabanları oluşturmak için kullanılır. çeşitli metodlar. Herhangi bir kurumsal bilgi sisteminin ana unsuru olan veritabanıdır ve bu veritabanının çekirdeği sunucuda bulunur. Böylece verilerin girişi, depolanması, işlenmesi ve değiştirilmesi ile ilgili en karmaşık işlemler sunucu üzerinde gerçekleşir. Bir kullanıcı (istemci) bir veritabanına (sunucuya) eriştiğinde, istek işlenir: veritabanına doğrudan erişilir ve bir yanıt (işleme sonucu) döndürülür. İşleme sonucu, işlemin başarısı veya bir hata hakkında bir ağ mesajıdır. Sunucu bilgisayarlar, aynı dosyaya aynı anda erişen birden çok istemciyi işleyebilir. Ağ üzerinden bu tür çalışmalar, kullandığınız uygulamaların çalışmalarını hızlandırmanızı sağlar.

    İstemci-sunucu mimarisi: teknolojinin uygulanması

    Bu mimari, kullanarak çeşitli kaynaklara erişmek için kullanılır. ağ teknolojileri: veritabanları, posta sunucuları, güvenlik duvarları, proxy sunucuları. İstemci-sunucu uygulamalarının geliştirilmesi, uygulamalarınızın ve bir bütün olarak ağın güvenliğini, güvenilirliğini ve performansını iyileştirmenize olanak tanır. Çoğu zaman, istemci-sunucu uygulamaları iş otomasyonu için kullanılır.

    Modern bir DBMS, en önemlisi yüksek performanslı bir akıllı veritabanı sunucusu olan bir dizi gereksinimi karşılamalıdır. Daha sonra, gelişimindeki ana eğilimleri ele alacağız ve somutlaştırıldıkları belirli mekanizmaları tartışacağız.

    Veritabanı sunucusunun teknik iyileştirme süreci, modern DBMS'nin çoğu kullanıcısı için hala görünmez. Bu nedenle, belirli bir sistemi seçerken, kural olarak, çalışma mekanizmasına gömülü çözümlerin teknik düzeyini veya bu kararların DBMS'nin genel performansı üzerindeki etkisini dikkate almazlar. Bu arada kalitesi, kullanıcı arabirimlerinin zenginliğiyle, geliştirme destek araçlarının çeşitliliğiyle değil, öncelikle veritabanı sunucusunun mimarisine bağlıdır. Daha sonra "istemci-sunucu" teknolojisinin modelleri ele alınacak, veritabanı sunucusunun bu modellerdeki yeri belirlenecek ve veritabanı sunucusunun en önemli mekanizmaları - prosedürler, kurallar (tetikleyiciler), olaylar - ele alınacaktır. kısaca anlatılmıştır. İkincisi, Ingres DBMS'de benimsenen SQL diyalektini kullanan örneklerle gösterilecektir.

    Teknoloji ve istemci-sunucu modelleri.

    "İstemci-sunucu", bir ağdaki bilgisayarlar arasındaki etkileşim modelidir. Kural olarak, bilgisayarlar eşit değildir. Her birinin diğerlerinden farklı, amacı vardır, rolünü oynar. Ağdaki bazı bilgisayarlar, işlemciler, dosya sistemi, posta hizmeti, yazdırma hizmeti, veritabanı gibi bilgi ve bilgi işlem kaynaklarının sahibidir ve bunları yönetir. Diğer bilgisayarlar, öncekinin hizmetlerini kullanarak bu hizmetlere erişme yeteneğine sahiptir. Bunu veya bu kaynağı yöneten bilgisayara genellikle bu kaynağın sunucusu ve onu kullanmak isteyen bilgisayara istemci denir. Belirli bir sunucu, sahip olduğu kaynağın türüne göre belirlenir. Yani, eğer veritabanları bir kaynaksa, o zaman şundan bahsediyoruz: veritabanı sunucusu amacı veri işlemeye ilişkin müşteri taleplerini karşılamak olan; kaynak bir dosya sistemi ise, o zaman biri söz eder dosya sunucusu veya dosya sunucusu vb.

    Bir ağda, aynı bilgisayar hem istemci hem de sunucu olarak çalışabilir. Örneğin, kişisel bilgisayarlar, bir ana bilgisayar ve UNIX çalıştıran bir mini bilgisayar içeren bir bilgi sisteminde, UNIX hem istemcilerden - kişisel bilgisayarlardan gelen isteklere hizmet veren bir veritabanı sunucusu hem de ana bilgisayara istekler gönderen bir istemci olarak hareket edebilir.

    Aynı ilke, programların etkileşimi için de geçerlidir. Bunlardan biri, diğerlerine uygun bir dizi hizmet sağlayarak bazı işlevleri yerine getirirse, böyle bir program bir sunucu görevi görür. Bu hizmetleri kullanan programlara istemci denir. Bu nedenle, ilişkisel bir SQL yönelimli DBMS'nin çekirdeğine genellikle bir veritabanı sunucusu veya SQL sunucusu denir ve veri işleme hizmetleri için ona erişen programa SQL istemcisi denir.

    Başlangıçta, DBMS merkezi bir mimariye sahipti (Şekil 10). İçinde, DBMS'nin kendisi ve veritabanlarıyla çalışan uygulama programları merkezi bir bilgisayarda (ana bilgisayar veya mini bilgisayar) çalışıyordu. Veritabanları da vardı. Terminaller merkezi bilgisayara bağlandı ve kullanıcı iş istasyonları olarak işlev gördü. Veri işleme ile ilgili tüm işlemler, örneğin: kullanıcı girişi için destek, sorguların oluşturulması, optimizasyonu ve yürütülmesi, harici bellek cihazlarıyla değişim vb., performansına katı gereksinimler getiren merkezi bilgisayarda gerçekleştirildi. Birinci nesil VTYS'nin özellikleri, anabilgisayar ve mini bilgisayar sistemlerinin mimarisiyle doğrudan ilişkilidir ve bunların tüm avantaj ve dezavantajlarını yeterince yansıtır. Bununla birlikte, istemci-sunucu mimarisinin fiili standart haline geldiği çok kullanıcılı DBMS'nin mevcut durumuyla daha çok ilgileniyoruz.

    Şekil 10 - Merkezi mimariye sahip sistemler

    Özellikleri hakkında daha net bir fikir için, yapılacak olan "istemci-sunucu" teknolojisinin birkaç modelini dikkate almak gerekir.

    Tasarımın olduğu varsayılırsa Bilgi sistemi(IS) bir "istemci-sunucu" teknolojisine sahip olacak, bu da kendi çerçevesinde uygulanan uygulama programlarının dağıtılacağı anlamına geliyor. Başka bir deyişle, uygulama programının (veya daha basit bir şekilde uygulamanın) işlevlerinden bazıları istemci programında, diğeri ise sunucu programında uygulanacak ve etkileşimleri için bazı protokoller tanımlanacaktır.

    "İstemci-sunucu" teknolojisinin temel ilkesi, bir standardın işlevlerini birbirinden ayırmaktır. etkileşimli uygulama dört farklı gruba ayrılmıştır. Birinci grup, veri girişi ve görüntüleme işlevleridir. İkinci grup, belirli bir konu alanına özgü tamamen uygulamalı işlevleri birleştirir (örneğin, banka sistemi- hesap açma, bir hesaptan diğerine para aktarma vb.). Üçüncü grup, bilgi kaynaklarının (veritabanları, dosya sistemleri vb.) depolanması ve yönetiminin temel işlevlerini içerir. Son olarak, dördüncü grubun işlevleri hizmet işlevleridir (ilk üç grubun işlevleri arasındaki bağlantıların rolünü oynarlar.

    Buna göre, herhangi bir uygulamada aşağıdaki mantıksal bileşenler ayırt edilir:

    İlk grubun işlevlerini uygulayan bileşeni görüntüleyin;

    İkinci grubun işlevlerini destekleyen uygulama bileşeni;

    Üçüncü grupların işlevlerini destekleyen bilgi kaynaklarına erişim bileşeni ve bunların etkileşim yollarına ilişkin anlaşmalar (etkileşim protokolü) tanıtılır ve geliştirilir.

    İstemci-sunucu teknolojisi uygulamalarındaki farklılıklar dört faktör tarafından belirlenir. İlk olarak, bu bileşenlerin her birine ne tür yazılımlar entegre edilmiştir. İkinci olarak, üç grubun tümünün işlevlerini gerçekleştirmek için hangi yazılım mekanizmaları kullanılır? Üçüncüsü, mantıksal bileşenlerin ağdaki bilgisayarlar arasında nasıl dağıtıldığıdır. Dördüncüsü, bileşenleri birbirine bağlamak için hangi mekanizmaların kullanıldığı.

    Modellerde uygulanan dört yaklaşım vardır:

    dosya sunucusu modeli (Dosya Sunucusu - FS);

    Uzak verilere erişim modeli (Uzak Veri Erişimi - RDA);

    veritabanı sunucusu modeli (DataBase Sunucusu - DBS);

    Uygulama sunucusu modeli (Uygulama Sunucusu - AS).

    FS modeli, kişisel bilgisayarların yerel alan ağları için temel oluşturur. Kısa bir süre önce, FoxPRO, Clipper, Clarion, Paradox vb. sistemleri kullanan yerli geliştiriciler arasında son derece popülerdi. Modelin özü basit ve herkes tarafından biliniyor. Ağdaki bilgisayarlardan biri kabul edilir dosya sunucusu ve diğer bilgisayarlara dosya işleme hizmetleri sağlar. Dosya sunucusu bir ağ tarafından yönetilir işletim sistemi(Örneğin, Novell NetWare) ve bilgi kaynaklarına (yani dosyalara) erişim bileşeni rolünü oynar. Ağdaki diğer bilgisayarlarda, sunum bileşeni ile uygulama bileşeninin birleştiği kodlarda bir uygulama çalışmaktadır (Şekil 11). Değişim protokolü, bir uygulamaya bir dosya sunucusundaki dosya sistemine erişim sağlayan bir dizi düşük seviyeli çağrıdır.

    Şekil 11 - Dosya sunucusu modeli

    FS modeli, kişisel DBMS'nin yeteneklerini çok kullanıcılı bir modu destekleme yönünde genişletmek için temel görevi gördü. Bu tür sistemlerde, birden fazla kişisel bilgisayar hem uygulama programını hem de DBMS'nin bir kopyasını çalıştırır ve veritabanları, bir dosya sunucusunda bulunan paylaşılan dosyalarda bulunur. Bir uygulama bir veritabanına eriştiğinde, DBMS dosya sunucusuna bir istek gönderir. Bu istek, istenen verilerin bulunduğu dosyaları belirtir. İsteğe yanıt olarak, dosya sunucusu gerekli veri bloğunu ağ üzerinden gönderir. Onu alan DBMS, veriler üzerinde açıklanan eylemleri gerçekleştirir. uygulama programı.

    Modelin teknolojik dezavantajları arasında yüksek ağ trafiği (birçok dosyanın aktarımı, uygulamanın gerektirdiği), dar bir veri işleme işlemleri yelpazesi ("veriler dosyadır"), verilere erişimi güvence altına almak için yeterli araçların olmaması (koruma yalnızca dosya sistemi) vesaire. Aslında, yukarıdakiler eksiklikler değildir, ancak doğası gereği belirlenen FS modeline özgü sınırlamaların bir sonucudur. FS modeli başka amaçlar için kullanıldığında, örneğin onu bir veritabanı sunucusu modeli olarak yorumlamaya çalıştıklarında yanlış anlamalar ortaya çıkar. FS modelinin istemci-sunucu modelleri hiyerarşisindeki yeri, dosya sunucusu modelinin yeridir ve başka bir şey değildir. Bu nedenle, FS modeline dayalı büyük ölçekli projeler oluşturma girişimleri başarısızlığa mahkumdur. kurumsal sistemler- yakın geçmişte yapılan ve şimdilerde sıklıkla yapılan girişimler.

    Teknolojik olarak daha gelişmiş RDA modeli, bilgi kaynaklarına erişim bileşeninin doğası bakımından FS modelinden önemli ölçüde farklıdır. Bu genellikle SQL Server'dır. RDA modelinde sunum bileşeni ile uygulama bileşeninin kodları birleştirilir ve istemci bilgisayarda çalıştırılır. İkincisi, hem veri girişi hem de görüntüleme işlevlerini ve ayrıca tamamen uygulama işlevlerini destekler. Bilgi kaynaklarına erişim, ya özel bir dilin operatörleri tarafından (örneğin, veritabanları söz konusu olduğunda SQL) ya da özel bir kitaplığın işlevleri çağrılarak (eğer uygun bir uygulama programlama arayüzü varsa - API) sağlanır.

    İstemci, ağ üzerinden uzaktaki bir bilgisayara bilgi kaynaklarına (örneğin, veritabanları) istekler gönderir. DBMS çekirdeği, istekleri işleyen, içlerinde belirtilen eylemleri gerçekleştiren ve sonucu bir veri bloğu olarak biçimlendirilmiş müşteriye geri döndüren üzerinde çalışır (Şekil 12). Aynı zamanda, istemci bilgisayarlarda çalışan programlar, veri manipülasyonlarının başlatıcısı olarak hareket ederken, DBMS çekirdeğine pasif bir rol atanır - isteklere hizmet etme ve verileri işleme.

    Şekil 12 - Uzak verilere erişim modeli

    RDA modeli, hem merkezi mimari sistemlerde hem de dosya sunucusu sistemlerinde bulunan dezavantajları ortadan kaldırır.

    Her şeyden önce, bir sunum bileşeninin ve bir uygulama bileşeninin istemci bilgisayarlara aktarılması, işletim sistemi işlemlerinin toplam sayısını en aza indirerek veritabanı sunucusunun yükünü önemli ölçüde azaltır. Veritabanı sunucusu olağandışı işlevlerinden serbest bırakılır; sunucunun işlemcisi veya işlemcileri tamamen veri, sorgu ve işlem işleme işlemleriyle yüklenir. Bu, terminalleri ortadan kaldırarak ve iş istasyonlarını tamamen ön plan programları tarafından kullanılan kendi yerel bilgi işlem kaynaklarına sahip bilgisayarlarla donatarak mümkün olmuştur. Öte yandan, istemciden sunucuya G/Ç istekleri iletilmediğinden (dosya sunucusu olan sistemlerde olduğu gibi), ancak SQL istekleri olduğundan, ağ yükü keskin bir şekilde azalır, bunların hacmi çok daha azdır.

    RDA modelinin ana avantajı, "istemci-sunucu" arayüzünün SQL dili biçiminde birleştirilmesidir. Aslında, bir uygulama bileşeninin DBMS çekirdeği ile etkileşimi, standartlaştırılmış bir iletişim aracı olmadan imkansızdır. Bir program tarafından çekirdeğe gönderilen isteklerin her ikisi tarafından da anlaşılması gerekir. Bunu yapmak için formüle edilmeleri gerekir. özel dil. Ancak SQL dili, daha önce tartışılan DBMS'de zaten mevcuttur. Bu nedenle, yalnızca verilere erişim aracı olarak değil, aynı zamanda istemci ile sunucu arasındaki iletişim için bir standart olarak kullanılması tavsiye edilir.

    Bu tür bir iletişim, biri diğerinin sorularını yanıtladığında (sorular aynı anda sorulur) birkaç kişinin konuşmasıyla karşılaştırılabilir. Ve bunu o kadar hızlı yapıyor ki, yanıt için bekleme süresi sıfıra yaklaşıyor. Yüksek iletişim hızı, öncelikle, soruyu soran ve yanıtlayanın sorunun özü hakkında ek istişarelere ihtiyaç duymadığı durumlarda, sorunun açık ifade edilmesi nedeniyle elde edilir. Görüşmeciler birkaç kısa, net cümle alışverişinde bulunurlar, hiçbir şeyi açıklığa kavuşturmaları gerekmez.

    Ne yazık ki, RDA modelinin bir dizi dezavantajı yoktur. İlk olarak, SQL sorguları aracılığıyla istemci ve sunucu arasındaki etkileşim, ağı önemli ölçüde yükler. İkinci olarak, RDA modelinde uygulamaların tatmin edici yönetimi, farklı nitelikteki işlevlerin (sunum ve uygulama işlevleri) tek bir programda birleştirilmesi nedeniyle pratik olarak imkansızdır.

    RDA modeliyle birlikte, gelecek vaat eden DBS modeli giderek daha popüler hale geliyor (Şekil 13). İkincisi bazı ülkelerde uygulanmıştır. ilişkisel VTYS(Informix, Ingres, Sybase, Oracle). Mekanizma üzerine kuruludur. saklı yordamlar- SQL sunucu programlama aracı. Yordamlar bir veritabanı sözlüğünde saklanır, birden çok istemci arasında paylaşılır ve SQL sunucusunun çalıştığı aynı makinede yürütülür. Saklı prosedürlerin geliştirildiği dil, dilin prosedürel bir uzantısıdır. SQL sorguları ve her belirli DBMS için benzersizdir.

    Şekil 13 - Veritabanı sunucusu modeli

    DBS modelinde, görünüm bileşeni istemci bilgisayarda çalışırken, uygulama bileşeni bir dizi saklı yordam olarak tasarlanır ve veritabanı sunucu bilgisayarında çalışır. Veri erişim bileşeni, yani DBMS çekirdeği de burada yürütülür. DBS modelinin avantajları açıktır: uygulama işlevlerinin merkezi olarak yönetilmesi olasılığı ve trafiğin azaltılması (SQL sorguları yerine, saklı yordamlara yapılan çağrılar ağ üzerinden gönderilir) ve bir yordamı aralarında bölme olasılığıdır. birkaç uygulama ve bir kez oluşturulan prosedür yürütme planını kullanarak bilgisayar kaynaklarından tasarruf etme. Modelin dezavantajları, C veya Pascal gibi üçüncü nesil dillerle görsel araçlar ve işlevsellik açısından karşılaştırılamayan SQL'in çeşitli prosedürel uzantıları olan saklı yordamları yazmak için kullanılan sınırlı araçları içerir. Kullanımlarının kapsamı belirli bir DBMS ile sınırlıdır; çoğu DBMS, geliştirilen saklı yordamlarda hata ayıklama ve test etme yeteneğinden yoksundur.

    Uygulamada, veritabanı bütünlüğü desteği ve bazı basit uygulama işlevleri saklı yordamlar (DBS modeli) ve daha fazlası tarafından desteklendiğinde genellikle karma modeller kullanılır. karmaşık fonksiyonlar doğrudan istemci bilgisayarda (RDA modeli) çalışan uygulama programında uygulanır. Öyle ya da böyle, modern çok kullanıcılı VTYS'ler, RDA ve DBS modellerine dayalıdır ve yalnızca bir VTYS'nin kullanımını içeren bir IS oluştururken, bu iki modelden biri ya da makul kombinasyonları seçilir.

    Şekil 14.

    Uygulama sunucusu modeli.

    AS modelinde (Şekil 14), istemci bilgisayarda çalışan işlem, her zamanki gibi kullanıcı arabiriminden sorumludur (yani, birinci grubun işlevlerini yerine getirir). Bu süreç, uygulama bileşenine hizmetlerin yürütülmesini talep ederek şu rolü oynar: uygulama istemcisi(Uygulama İstemcisi-AC). Bir uygulama bileşeni, uygulama işlevlerini gerçekleştiren ve uygulama sunucusu olarak adlandırılan bir işlemler grubu olarak uygulanır ( Uygulama Sunucusu - AS). Bilgi kaynakları üzerindeki tüm işlemler, AS'nin bir müşteri rolü oynadığı ilgili bileşen tarafından gerçekleştirilir. Uygulama bileşenlerinden sağlanan kaynaklar çeşitli tipler- veritabanları, kuyruklar, posta hizmetleri ve benzeri.

    RDA ve DBS modelleri, iki katmanlı bir işlev şeması şemasına dayanmaktadır. RDA modelinde, uygulama işlevleri istemci programa atanır; DBS modelinde, uygulamalarının sorumluluğu DBMS çekirdeği tarafından üstlenilir. İlk durumda, uygulama bileşeni sunum bileşeniyle birleştirilir ve ikinci durumda bilgi kaynağı erişim bileşenine entegre edilir. AS modeli, uygulama bileşeninin uygulamanın en önemli yalıtılmış öğesi olarak seçildiği, bunu belirlemek için çok görevli işletim sisteminin evrensel mekanizmalarının kullanıldığı ve diğer iki bileşenle arabirimlerin kullanıldığı üç katmanlı bir işlev ayırma şeması uygular. standartlaştırılmış AS modeli, işlem işleme monitörlerinin temelidir ( İşlem İşlem İzleyicileri - TPM) veya daha basit bir ifadeyle özel bir yazılım türü olarak öne çıkan işlem monitörleridir.

    Sonuç olarak, bir veritabanı sunucusundan bahsederken genellikle hem bilgisayar hem de yazılım - DBMS çekirdeği - kastettiklerini not ediyoruz. "İstemci-Sunucu" mimarisini tanımlarken, veritabanı sunucusu derken bir bilgisayarı kastetmiştik. Ayrıca, veritabanı sunucusu yazılım - DBMS çekirdeği olarak anlaşılacaktır.


    Benzer bilgiler.