• بنابراین، تمام معایب فوق از طرح فایل-سرور در معماری سرویس گیرنده-سرور حذف می شوند. فناوری مشتری-سرور

    پیش از این، پایگاه‌های داده محلی در نظر گرفته می‌شدند، زمانی که هم پایگاه داده و هم برنامه‌ای که با آن در تعامل است در یک رایانه قرار دارند. در این بخش برخی از ویژگی‌های کار با پایگاه‌های داده راه دور مورد استفاده در شبکه‌ای که برنامه و پایگاه داده در رایانه‌های مختلف قرار دارند، بررسی می‌شود.

    در اصل، یک پایگاه داده محلی همچنین می تواند برای دسترسی مشترک، یعنی در یک نسخه شبکه، استفاده شود. در این حالت فایل های پایگاه داده و اپلیکیشن کار با آن بر روی سرور شبکه قرار دارند. کاربر اپلیکیشنی را که روی سرور قرار دارد از کامپیوتر خود راه اندازی می کند و یک نسخه از اپلیکیشن برای او راه اندازی می شود. همچنین می توانید برنامه را مستقیماً روی رایانه کاربر نصب کنید، در این صورت برنامه باید مکان پایگاه داده مشترک را که مثلاً از طریق نام مستعار مشخص شده است، بداند. چنین گزینه شبکه ای برای استفاده از پایگاه داده محلی با معماری فایل-سرور مطابقت دارد.

    مزایای معماری شبکه "فایل-سرور" سهولت توسعه و بهره برداری از پایگاه داده و برنامه است. توسعه دهنده در واقع یک پایگاه داده و برنامه محلی ایجاد می کند که سپس به سادگی در نسخه شبکه استفاده می شود. برای سازماندهی کار با پایگاه داده نیازی به نرم افزار اضافی نیست. با این حال، معماری فایل-سرور نیز دارای اشکالات قابل توجهی است. برای کار با داده ها، از روش دسترسی ناوبری استفاده می شود، در حالی که مقادیر زیادی داده در شبکه در گردش است. در نتیجه شبکه بیش از حد بارگذاری می شود که دلیل آن سرعت پایین و عملکرد ضعیف آن هنگام کار با پایگاه داده است. همگام سازی لازم است کاربران فردی، مرتبط با قفل جداول آن دسته از رکوردهایی است که توسط کاربر دیگری ویرایش می شوند. برنامه ها نه تنها داده ها را پردازش می کنند، بلکه خود پایگاه داده را نیز مدیریت می کنند. با توجه به اینکه پایگاه داده از رایانه های مختلف مدیریت می شود، کنترل دسترسی، محرمانه بودن و حفظ یکپارچگی پایگاه با مشکل است.

    به دلیل این کاستی ها، معماری فایل سرور معمولا در شبکه های کوچک استفاده می شود. برای شبکه های با مقدار زیادبرای کاربران، گزینه ترجیحی (و گاهی اوقات تنها گزینه ممکن) معماری «مشتری-سرور» است.در معماری شبکه «مشتری-سرور» پایگاه داده بر روی کامپیوتر سرور شبکه (سرور یا سرور راه دور) قرار دارد و به آن پایگاه داده راه دور نیز می گویند. اپلیکیشنی که با این پایگاه داده کار می کند روی کامپیوتر کاربر قرار دارد. اپلیکیشن کاربر، کلاینت است که به عنوان اپلیکیشن مشتری نیز شناخته می شود. کلاینت و سرور به صورت زیر با هم تعامل دارند. کلاینت درخواستی را به سرور میزبان پایگاه داده تشکیل می دهد و می فرستد. سرور درخواست را اجرا می کند و داده های درخواستی را به مشتری برمی گرداند. بنابراین، در معماری مشتری-سرور، مشتری یک درخواست ارسال می کند و تنها داده هایی را دریافت می کند که واقعاً به آنها نیاز دارد. تمام پردازش درخواست ها در سرور راه دور انجام می شود. از مزایای چنین معماری می توان به عوامل زیر اشاره کرد. برای کار با داده ها از روش دسترسی رابطه ای استفاده می شود که بار روی شبکه را کاهش می دهد. برنامه ها مستقیماً پایگاه داده را مدیریت نمی کنند، فقط سرور درگیر مدیریت است. در این راستا می توان از درجه بالایی از حفاظت از داده ها اطمینان حاصل کرد. هیچ کد مدیریت پایگاه داده در برنامه وجود ندارد، بنابراین برنامه ها ساده می شوند.

    توجه داشته باشید که نه تنها یک کامپیوتر سرور نامیده می شود، بلکه برنامه خاصی است که پایگاه داده را مدیریت می کند. از آنجایی که سازماندهی تبادل داده بین مشتری و سرور بر اساس زبان SQLبه چنین برنامه ای سرور SQL و پایگاه داده نیز پایگاه داده SQL گفته می شود. در معنای گسترده کلمه، سرور به عنوان یک کامپیوتر، یک برنامه و خود پایگاه داده درک می شود. سرورهای SQL، DBMS های صنعتی هستند، مانند InterBase، Oracle و غیره. هر کدام از سرورها دارای مزایا و ویژگی های مربوط به خود هستند، به عنوان مثال، با ساختار پایگاه داده و پیاده سازی زبان SQL که باید در هنگام توسعه یک برنامه در نظر گرفته شود. علاوه بر این، ما سرور را به عنوان یک برنامه (به عنوان مثال سرور SQL) درک خواهیم کرد و پایگاه داده نصب شده بر روی رایانه سرور، پایگاه داده راه دور نامیده می شود.

    هنگام کار در معماری مشتری-سرور، یک برنامه کاربردی باید:

    · برقراری ارتباط با سرور و خاتمه آن؛

    · فرم و ارسال درخواست به سرور، دریافت نتایج درخواست از آن؛

    · پردازش داده های دریافتی

    با این حال، پردازش داده ها اینطور نیست تفاوت های اساسیدر مقایسه با پردازش داده ها در پایگاه های داده محلی.

    یک پایگاه داده راه دور، مانند یک پایگاه داده محلی، مجموعه ای از جداول مرتبط با یکدیگر است. با این حال، داده‌های این جداول معمولاً در یک قرار می‌گیرند فایل مشترک. همانطور که در مورد یک پایگاه داده محلی، جداول یک پایگاه داده راه دور می توانند ارتباطات (روابط)، محدودیت هایی داشته باشند یکپارچگی ارجاعی، محدودیت در مقادیر ستون و غیره. برای پایگاه داده های راه دور، یک فیلد ستون نامیده می شود. برای مدیریت پایگاه داده، سرور از موارد زیر استفاده می کند:

    · محرک ها؛

    · ژنراتورها؛

    · رویه های ذخیره شده؛

    · توابع تعریف شده توسط کاربر؛

    · مکانیزم تراکنش؛

    · مکانیسم تغییرات حافظه پنهان؛

    بسیاری از عناصر ذکر شده توسط ویژگی های زبان ارائه می شوند. SQL Server، که در مقایسه با نسخه محلی دارای ویژگی های قابل توجهی است که در ادامه به آن پرداخته شده است.

    سیستم دلفی توسعه برنامه های کاربردی را برای سرورهای مختلف فراهم می کند و ابزارهای مناسب را برای این امر فراهم می کند. توجه داشته باشید که بسیاری از اصول و ابزارهای توسعه برنامه که قبلا توضیح داده شد برای کار با پایگاه های داده محلی برای کار با پایگاه های داده راه دور نیز اعمال می شود. به طور خاص از اجزایی مانند DataSource، DatasetsTable، ADOTable، SQLTable، IBTable، Query، ADOQuery، SQLQuery، DBGrid grid و غیره برای توسعه اپلیکیشن استفاده می شود.

    برای پیاده سازی یک روش رابطه ای برای دسترسی به پایگاه داده راه دور با استفاده از BDE، فقط باید از ابزارهای زبان SQL استفاده کنید. بنابراین، مانند Query، StoredProc، UpdateSQL باید به عنوان کامپوننت انتخاب شوند. علاوه بر این، روش های خاص برای روش دسترسی ناوبری را نمی توان در مجموعه داده استفاده کرد.

    به یاد بیاورید که اگر هنگام اجرای پرس و جوی تغییر دهنده پایگاه داده با استفاده از مولفه Query به مجموعه داده های به دست آمده نیازی نباشد، بهتر است این کوئری با استفاده از روش ExecSQL اجرا شود. همچنان می توانید از برنامه هایی مانند Database Desktop و SQL Explorer برای کار با جداول و پرس و جوها استفاده کنید.

    ابزارهای دلفی که برای کار با پایگاه داده های راه دور طراحی شده اند را می توان به دو نوع ابزار و کامپوننت تقسیم کرد.

    این ابزارها شامل برنامه‌ها و بسته‌های ویژه‌ای هستند که نگهداری از پایگاه داده را خارج از برنامه‌های کاربردی توسعه‌یافته ارائه می‌کنند. از جمله:

    · InterBase Server Manager - برنامه مدیریت راه اندازی سرور InterBase.

    · IBConsole - کنسول سرور InterBase.

    · SQL Monitor برنامه ای برای ردیابی ترتیب اجرای کوئری های SQL به پایگاه های داده راه دور است.

    اجزا برای ایجاد برنامه هایی طراحی شده اند که عملیات را با پایگاه داده راه دور انجام می دهند. ما مهمترین آنها را لیست می کنیم:

    · پایگاه داده (اتصال پایگاه داده)؛

    · جلسه (جلسه فعلی با پایگاه داده)؛

    · StoredProc (تماس رویه ذخیره شده)؛

    · UpdateSQL (اصلاح یک مجموعه داده بر اساس پرس و جوی SQL).

    · DCOMConnection (اتصال DCOM)؛

    · اجزای صفحه ADO، dbExpress، Interbase پالت اجزا.

    توجه داشته باشید که بسیاری از کامپوننت های نام برده شده، به عنوان مثال، Database، Session، UpdateSQL نیز هنگام کار با پایگاه های داده محلی استفاده می شوند. بنابراین، مؤلفه پایگاه داده به شما امکان می دهد مکانیسم تراکنش را با روش ناوبری برای دسترسی به داده ها با استفاده از مکانیسم BDE پیاده سازی کنید. با این حال، این مؤلفه ها اغلب هنگام کار با پایگاه داده های راه دور استفاده می شوند. برخی از مؤلفه ها، به عنوان مثال، مجموعه داده های سرویس گیرنده ClientDataSet و اتصال به سرور DCOMConnection، برای کار در معماری سه لایه (سه لایه) "مشتری-سرور" ("نازک" مشتری) طراحی شده اند و برای ساخت یک سرور برنامه استفاده می شوند.

    عملیات انجام شده با پایگاه داده های راه دور، هم با استفاده از ابزار و هم به صورت برنامه نویسی، بر اساس زبان SQL است. به عنوان مثال، هنگام ایجاد جدول با استفاده از برنامه IBConsole، باید پرس و جوی SQL (دستورالعمل) Create Table را تایپ و اجرا کنید. اگر ایجاد جدول با استفاده از مکانیزم BDE از برنامه کاربر انجام شود، برای این منظور از مجموعه داده Query استفاده می شود که همان پرس و جو را انجام می دهد. تفاوت اصلی نحوه اجرای پرس و جو SQL در پایگاه داده راه دور است.

    بنابراین، برای پایگاه داده های راه دور، تفاوت بین ابزارهای مورد استفاده در برنامه و ابزارها بسیار کمتر از پایگاه داده های محلی است.

    سرور بین پایههمه سرورها اصول سازماندهی و مدیریت داده مشابهی دارند. به عنوان مثال، کار با سرور InterBase 6.x را در نظر بگیرید که برای_Delphi "بومی" است. همراه با دلفی دو بخش از سرور InterBase 6.x ارائه می شود: سرور و مشتری. بخش سرور InterBase یک نسخه محلی از سرور InterBase است و برای اشکال‌زدایی برنامه‌هایی که برای کار با پایگاه‌های داده از راه دور طراحی شده‌اند استفاده می‌شود و به آنها اجازه می‌دهد در همان رایانه در یک نسخه شبکه بررسی شوند. پس از رفع اشکال در رایانه محلی، برنامه را می توان بدون تغییر به رایانه های شبکه منتقل کرد که برای این کار باید:

    · پایگاه داده را در سرور کپی کنید.

    · پارامترهای اتصال جدید را برای برنامه با یک پایگاه داده راه دور تنظیم کنید.

    شما می توانید پایگاه داده را با استفاده از برنامه هایی مانند Windows Explorer. بخش سرویس گیرنده برای دسترسی برنامه به یک پایگاه داده راه دور مورد نیاز است. هنگام توسعه پایگاه های داده و برنامه های کاربردی با استفاده از نسخه محلی سرور InterBase، باید به خاطر داشته باشید که تعدادی محدودیت دارد و ممکن است به عنوان مثال، مکانیسم رویداد سرور یا عملکردهای تعریف شده توسط کاربر را پشتیبانی نکند. نسخه کامل سرور InterBase به طور جداگانه از دلفی خریداری و نصب می شود.همانطور که گفته شد کار با پایگاه داده راه دور بر اساس قابلیت های زبان SQL است که عملیات مناسب را ارائه می دهد. هدف و قابلیت های زبان SQL برای پایگاه های داده راه دور اساساً با هدف و قابلیت های این زبان برای پایگاه های داده محلی مطابقت دارد.

    قوانین تجارت. همانطور که اشاره شد، قوانین کسب و کار مکانیزم های مدیریت پایگاه داده هستند و برای حفظ پایگاه داده در یک حالت ثابت طراحی شده اند. علاوه بر این، آنها برای اجرای محدودیت های پایگاه داده، و همچنین برای انجام تعدادی از اقدامات دیگر، به عنوان مثال، جمع آوری آمار عملیات پایگاه داده مورد نیاز هستند.

    قوانین تجاری را می توان در سطوح فیزیکی و نرم افزاری پیاده سازی کرد. در حالت اول، این قوانین (به عنوان مثال، محدودیت یکپارچگی ارجاعی برای جداول مرتبط) هنگام ایجاد جداول تنظیم می شوند و در ساختار پایگاه داده گنجانده می شوند. برای انجام این کار، عملوندهای مناسب در دستور عبارت Create Table، به عنوان مثال، Default (مقدار پیش فرض) قرار می گیرند. در کارهای بعدی، نقض یا دور زدن محدودیت تعیین شده در سطح فیزیکی غیرممکن است.

    در سطح برنامه نویسی، قوانین تجاری را می توان در سرور و در برنامه پیاده سازی کرد. علاوه بر این، این قوانین تجاری نباید در لایه فیزیکی تعریف شوند. تریگرها معمولاً برای پیاده سازی قوانین تجاری در سرور استفاده می شوند. مزایای این روش این است که بار محاسباتی برای مدیریت پایگاه داده به طور کامل بر روی سرور قرار می گیرد که باعث کاهش بار روی برنامه و شبکه می شود و محدودیت ها برای همه برنامه هایی که به پایگاه داده دسترسی دارند اعمال می شود. با این حال، در عین حال، انعطاف پذیری مدیریت پایگاه داده کاهش می یابد. علاوه بر این، به خاطر داشته باشید که ابزارهای اشکال زدایی برای محرک های سرور و رویه های ذخیره شده به خوبی توسعه داده نشده اند.

    کامپوننت ها و ابزارهای آنها برای برنامه ریزی قوانین تجاری در یک برنامه کاربردی استفاده می شود. مزیت این رویکرد در سهولت تغییر قوانین تجاری و توانایی تعریف قوانین برنامه "شما" نهفته است. نقطه ضعف آن کاهش امنیت پایگاه داده است که با این واقعیت همراه است که هر برنامه می تواند قوانین خود را برای مدیریت پایگاه داده تعیین کند.

    اطلاعات کل پایگاه داده سرور InterBase در یک فایل با پسوند gdb ذخیره می شود. حجم این فایل می تواند واحد و حتی ده ها گیگابایت باشد. توجه داشته باشید که Microsoft SOL Server DBMS دارای اندازه پایگاه داده مشابهی است، در حالی که برای DBMS های قدرتمندتر Oracle و SyBase، حجم پایگاه داده به ده ها و صدها گیگابایت می رسد.

    برخلاف پایگاه داده محلی، که ساختار آن از جداول (جدا یا مرتبط) تشکیل شده است، پایگاه داده راه دور دارای ساختار پیچیده تری است که شامل عناصر زیر است: جداول، محرک ها، شاخص ها، توابع کاربر. محدودیت ها، رویه های ذخیره شده، دامنه ها، نماها، تولیدکنندگان، استثناها، امتیازات.

    عناصر ساختار یک پایگاه داده راه دور نیز ابرداده نامیده می شوند. کلمه "meta" به معنای "بالا" است، یعنی ابرداده داده ای است که ساختار پایگاه داده را توصیف می کند. برای InterBase، حداکثر تعداد جداول در یک پایگاه داده 65536 و حداکثر تعداد ستون ها در یک جدول 1000 است. توجه داشته باشید که جداول InterBase دارای انواع ستون (فیلد) مجاز کمتری نسبت به جداول پایگاه داده محلی Paradox هستند.

    دامنه شرح نامگذاری شده ستون است. هنگامی که یک دامنه تعریف شد، نام آن می تواند برای توصیف ستون های دیگر استفاده شود. آنالوگ یک دامنه یک نوع داده است.

    چشم انداز یک جدول منطقی (مجازی) است که رکوردهای آن با استفاده از عبارت Select انتخاب می شوند. مزیت مرور این است که پس از انتخاب رکوردها، می توانید بعداً بدون اجرای مجدد Select از آنها استفاده کنید. اگر به طور مکرر پرس و جوهای مشابهی را اجرا کنید، این مفید است.

    رویه ذخیره شده یک برنامه فرعی است که روی سرور قرار دارد و از برنامه مشتری فراخوانی می شود. استفاده از این اشیاء به دلایل زیر سرعت دسترسی به پایگاه داده را افزایش می دهد:

    · به جای متن درخواست، یک تماس کوتاه با رویه ذخیره شده از طریق شبکه به سرور ارسال می شود.

    · یک رویه ذخیره شده به بررسی نحوی قبلی نیاز ندارد.

    ماشه رویه ای است که در سرور پایگاه داده قرار دارد و هنگام تغییر رکوردهای پایگاه داده به طور خودکار فراخوانی می شود. وقتی ستون ها تغییر می کنند یا وقتی ستون ها حذف و اضافه می شوند. برخلاف رویه‌های ذخیره‌شده، تریگرها را نمی‌توان از یک برنامه کلاینت فراخوانی کرد، همچنین نمی‌توان پارامترهایی را به آن‌ها ارسال کرد یا از آن‌ها نتایج دریافت کرد.

    عملکرد تعریف شده توسط کاربر یک تابع منظم است که در یک زبان الگوریتمی مانند پاسکال نوشته شده است. تابع ایجاد شده به صورت پویا فرمت شده است DLL ها، از کجا می توان تماس گرفت به روش معمول. برای اطمینان از فراخوانی یک تابع، ویندوز باید مسیر کتابخانه مناسب را بداند. استفاده از چنین توابعی مجموعه ای از توابع زبان SQL را گسترش می دهد.

    مکانیسم تغییرات حافظه پنهان این است که یک کپی محلی از داده ها در حافظه پنهان (بافر) در رایانه مشتری ایجاد می شود و تمام تغییرات داده ها در این کپی انجام می شود. یک بافر خاص (کش) برای ذخیره یک کپی محلی استفاده می شود. تغییرات ایجاد شده را می توان با انتقال آنها به پایگاه داده اصلی ذخیره شده در سرور تأیید یا دور انداخت. این مکانیسم شبیه مکانیزم تراکنش است، اما بر خلاف آن، بار روی شبکه را کاهش می دهد، زیرا تمام تغییرات در یک بسته به پایگاه داده اصلی منتقل می شود. به خاطر داشته باشید که تمام ورودی‌های کپی محلی قفلی برای تغییر مقادیر خود ندارند. قفل ها را می توان توسط برنامه های کاربردی دیگر برای پایگاه داده اصلی واقع در سرور تنظیم کرد.مکانیسم تغییرات کش شده در برنامه پیاده سازی می شود که برای آن اجزاء، در درجه اول Database، Table و Query (که در هنگام دسترسی با استفاده از BDE استفاده می شود) ابزار مناسب را دارند. علاوه بر این، مکانیسم تغییرات کش شده توسط کامپوننت UpdateSQL که برای این منظور در نظر گرفته شده است پشتیبانی می شود.مزایای اصلی مکانیسم مورد بررسی برای پایگاه داده های راه دور آشکار می شود، اما می توان از آن در هنگام کار با پایگاه های داده محلی نیز استفاده کرد.

    امتیاز حق دسترسی به پایگاه داده را نشان می دهد. مدیریت امتیاز شامل تنظیم و حذف امتیازات است. پس از ایجاد یک شی پایگاه داده (مثلاً یک جدول)، دسترسی به آن فقط برای سازنده و مدیر سیستم به نام SYSDBA مجاز است. برای دسترسی به پایگاه داده برای سایر کاربران، باید امتیازات مناسب به آنها اختصاص داده شود. بلافاصله پس از ظهور یک کاربر جدید، ایجاد شده، به عنوان مثال، با استفاده از برنامه InterBase Manager Server، این کاربر دارای حداقل حقوق دسترسی است: او فقط مجاز است با وارد کردن نام و رمز عبور خود به پایگاه داده (اتصال به آن) وارد شود، اما حتی یک شی از این پایگاه داده در دسترس او نیست. برای اطمینان از امکان کار فعال با پایگاه داده، باید امتیازات را تعریف کنید (تعریف مجدد کنید).

    امتیازات توسط دستورالعمل Grant تعیین می شوند. امتیازات به شما امکان می دهد دسترسی کاربران به جداول و نماها را محدود کنید. در این حالت، «کاربر» به هر شی اطلاق می شود که به داده ها دسترسی داشته باشد. علاوه بر خود کاربر (برنامه)، چنین اشیایی می توانند جداول، نماها، رویه های ذخیره شده و تریگرها باشند. اگر این امتیاز به طور همزمان به چندین کاربر اعطا شود، نام آنها با کاما از هم جدا شده است.

    در این مثال، ما یک سرور ساده و یک برنامه کلاینت ساده را توسعه خواهیم داد که یک گفتگوی "آهسته" بین آنها برقرار است. ما یک مشتری با توجه به تکنولوژی ایجاد خواهیم کرد فرم های ویندوز، و سرور است سرویس ویندوز . سرور مجموعه‌ای از پاسخ‌های برچسب‌گذاری‌شده را آماده خواهد داشت، منتظر درخواست‌های برچسب‌گذاری‌شده مشتری می‌ماند و با پیام‌های مناسب به آنها پاسخ می‌دهد. این ما را برای ایجاد یک سیستم حتی پیچیده تر تنظیم می کند - مشاهده نقشه های از راه دور از پایگاه داده، که بعداً به آن خواهیم پرداخت.

    یک مشتری ایجاد کنید

    بیایید با یک برنامه مشتری شروع کنیم که می تواند در چندین نمونه اجرا شود ("http://msdn.microsoft.com/en-us/library/system.net.sockets.tcplistener.accepttcpclient.aspx")


    جدول 19.7.
    عنصر ویژگی معنی
    فرم متن مشتری
    اندازه 300; 300
    کادر فهرست (نام) کادر فهرست
    بارانداز بالا
    فونت آریال; 12 امتیاز
    موارد
    1. سلام!
    2. للیک
    3. چه خبر
    4. آیا امروز پایکوبی کنیم؟
    5. پس خداحافظ!
    SelectionMode یکی
    اندازه 292; 119
    دکمه (نام) btnارسال کنید
    اندازه اتوماتیک درست است، واقعی
    فونت آریال; 10 امتیاز
    محل 96; 127
    اندازه 101; 29
    متن ارسال
    جعبه متن (نام) جعبه متن
    بارانداز پایین
    محل 0; 162
    چند خطی درست است، واقعی
    نوارهای پیمایش عمودی
    اندازه 292; 105

    باقی مانده تنظیمات مورد نظرعناصر فرم را به صورت برنامه ای اضافه کنید.

    با استفاده از سیستم؛ با استفاده از System.Collections.Generic. با استفاده از System.ComponentModel. با استفاده از System.Data؛ با استفاده از System.Drawing. با استفاده از System.Text. با استفاده از System.Windows.Forms. // فضای نام اضافی با استفاده از System.IO; با استفاده از System.Net؛ با استفاده از System.Net.Sockets. با استفاده از System.Threading; فضای نام SimpleClient ( کلاس جزئی عمومی Form1: Form ( پورت int = 12000; String hostName = "127.0.0.1";// local TcpClient client = null;// Client مرجع public Form1() ( InitializeComponent(); // اولین عنصر از لیست B.Conoxt. منوی ext برای پاک کردن TextBox ContextMenuStrip contextMenu = new ContextMenuStrip()؛ textBox.ContextMenuStrip = contextMenu؛ ToolStripMenuItem item = new ToolStripMenuItem("Clear")؛ contextMenu.Items.Add(item)؛ + item.ContextMenuStrip = contextMenu. دریافت پاسخ خصوصی void btnSubmit_Click(فرستنده شی، EventArgs e) (اگر (listBox.SelectedIndices.Count == 0) (MessageBox.Show("انتخاب یک پیام"); بازگشت؛ ) سعی کنید ( // ایجاد یک کلاینت متصل به سرویس گیرنده سرور = جدید TcpClientS.Client. fferSize = client.ReceiveBufferSize = 1024; ) catch ( MessageBox.Show("سرور آماده نیست!"); برگشت؛ ) // درخواست را در پروتکل AddString بنویسید("Client: " + listBox.SelectedItem.ToString()); // ایجاد NetworkStream های متصل به سرور NetworkStream streamIn = client.GetStream(); NetworkStream streamOut = client.GetStream(); StreamReader readerStream = StreamReader جدید(streamIn); StreamWriter writerStream = StreamWriter جدید(streamOut); // ارسال درخواست به سرور writerStream.WriteLine(listBox.SelectedItem.ToString()); writerStream.Flush(); // خواندن پاسخ String receiverData = readerStream.ReadLine(); // پاسخ به پروتکل را بنویسید AddString("Server: " + receiverData); // اتصال و استریم ها را ببندید، سفارش مهم نیست client.Close(); writerStream.Close(); readerStream.Close(); ) // افزودن یک خط زمانی که TextBox در حالت چند خطی فعال است، خلأ خصوصی AddString(String line) ( StringBuilder sb = new StringBuilder(textBox.Text)؛ StringWriter sw = New StringWriter(sb); sw.WriteLine(line); textBox.Text. _MouseDown(فرستنده شی، MouseEventArgs e) ( textBox.Clear(); listBox.Focus (); ) )

    پس از دریافت اتصال به سرور، دو موضوع ایجاد می کنیم NetworkStreamو آنها را در پوسته هایی قرار دهید که برای کنترل خواندن/نوشتن راحت هستند. تبادل با سرور در پروتکل نمایش داده می شود جعبه متن. برای پاک کردن پروتکل به صورت پویا یک منوی زمینه ایجاد کرد.

    کلاس TcpClient، که در کد استفاده کردیم، یک سوکت لفاف (کلاس) سطح بالا (و ساده شده) است. سوکت). اگر مدیریت سوکت سطح پایین بیشتری (جزئیات بیشتر) مورد نیاز باشد، ارجاع به آن در ویژگی TcpClient.Client ذخیره می شود. اما از آنجایی که این دارایی محافظت شده است ( حفاظت شده، پس دسترسی به آن فقط از مشتق از امکان پذیر است TcpClientکلاس

    اگر اکنون برنامه را اجرا می کنید SimpleClient، سپس کار می کند، اما وقتی می خواهید چیزی را به سرور ارسال کنید، پیامی دریافت می کنید که سرور آماده نیست. هنوز هیچ سروری وجود ندارد، بیایید آن را ایجاد کنیم.

    ایجاد سرور

    بیایید برنامه سرور را طبق قالب مقیم کنیم سرویس ویندوز، همانطور که در مثال قبلی انجام دادیم، اگرچه می توان آن را با رابط نیز انجام داد، اما نکته اصلی این است که باید در یک نمونه در رایانه محلی راه اندازی شود. اگر برنامه سرور در شبکه جهانی گنجانده شده است، با IPو باید تنها پورت آن شبکه باشد. بنابراین، استفاده از شبکه IPبرای شبکه جهانی باید مجوز دریافت کنید.



    با استفاده از سیستم؛ با استفاده از System.ComponentModel. با استفاده از System.Configuration.Install. با استفاده از System.ServiceProcess. فضای نام SimpleServer ( // هنگام نصب یک اسمبلی، نصب کننده را فراخوانی کنید کلاس عمومی جزئی Installer1: Installer ( ServiceInstaller private serviceInstaller; private ServiceProcessInstaller serviceProcessInstaller; public Installer1() ( // ایجاد تنظیمات برای Service serviceInstaller = new ServiceInstaller(); me = "SimpleServ erServiceName"؛ serviceInstaller.DisplayName = "SimpleServer"؛ serviceInstaller.StartType = ServiceStartMode.Manual;// شروع به صورت دستی // نحوه شروع سرویس Range(new Installer ( serviceInstaller, serviceProcessInstaller));

    با استفاده از سیستم؛ با استفاده از System.Collections.Generic. با استفاده از System.Text. // فضای نام اضافی با استفاده از System.IO; با استفاده از System.Net؛ با استفاده از System.Net.Sockets. با استفاده از System.Threading; با استفاده از System.ServiceProcess. با استفاده از System.Collections. فضای نام SimpleServer ( کلاس Service1: ServiceBase ( سرور TcpListener = null;// پیوند به پورت int سرور = 12000; String hostName = "127.0.0.1";// آدرس IP محلی localAddr; پاسخ های رشته = ( "1. بهترین شما کی هستید؟"، "2. بهترین ها!"، "2. بهترین ها!"، "2. "سلام! . تا غروب!" ) ؛ // Constructor public Service1 () ( localAddr = IPaddress.Parse(hostName);// تبدیل به فرمت دیگری Thread thread = new Thread(ExecuteLoop); Thread.IsBackground = true; thread.Start(Start)new server(); پورت);// سرور شنونده ایجاد کنید.Start();// داده های رشته سرور را شروع کنید؛ // چرخه بی پایان while (true) (اگر (!server.Pending())// صف درخواست خالی است ادامه دهید؛ TcpClient client = server.AcceptTcpClient();// Current Clipboard // اندازه کلیپ بوردها را خودمان تنظیم کنیم (اختیاری!) // به طور پیش فرض، هر دو بافر بر روی 8192 بافر تنظیم شده اند. // NetworkStream را وصل کنید و برای راحتی آن را در پوسته غوطه ور کنید. ارسال پاسخ int index؛ if (int.TryParse(data.Substring(0, data.IndexOf("."))، out index)) data = پاسخ ها؛ other data = data. ToUpper(); writerStream.WriteLine(data); writerStream.Flush(); // Close connection and streamer.Stree. lost(); ) ) catch (SocketException) ( ) در نهایت ( // Stop server.Stop(); )))))

    برای ارسال داده و دریافت پاسخ، برنامه مشترییک سوکت دو طرفه (یا دو سوکت یک طرفه) ایجاد می کند که در آن آدرس اتصال به سوکت یک سرور، برنامه دیگر را مشخص می کند. اگر اتصال برقرار شود (سرور در حال اجرا است)، برنامه مشتری یک جریان شبکه را به سوکت متصل می کند NetworkStreamو از طریق آن انتقال و دریافت داده ها را انجام می دهد.

    سرور در طرف دیگر اتصال TcpListenerگوش دادن در یک حلقه بی پایان صف اتصالبا مشتریان اگر مشتری به آن وصل شد ( server.Pending()!=false، سپس سرور با استفاده از روش این کلاینت را بازیابی می کند AcceptTcpClient()- یک سوکت برای دریافت / ارسال با آدرس برگشت آماده ایجاد می کند، یک جریان دو طرفه (یا دو تک جهته) ایجاد می کند، سپس درخواست را می خواند و پاسخ را ارسال می کند.



    لطفا توجه داشته باشید که اگر کد کار برنامه سرور ما در یک موضوع جداگانه بسته بندی نشده است نخ(رشته اجرا)، سپس در پنجره خدمات این برنامه توسط سیستم عامل راه اندازی نمی شود (امتحان کنید!). دلیل آن این است که در کد متد ExecuteLoop()سرور از یک حلقه بی نهایت برای گوش دادن به صف درخواست های مشتری استفاده می کند. اگر این حلقه در رشته اصلی اجرا باقی بماند ( نخ) برنامه، سپس به سادگی در یک حلقه گیر می کند و نمی تواند به طور معمول خود را تکمیل کند. بنابراین، کد را با حلقه در یک رشته (نخ) جداگانه قرار می دهیم و آن را پس زمینه می کنیم تا با نخ برنامه اصلی (نخ سرور) به هم ببندد.

    یادداشت مهم

    جریان NetworkStreamطول ثابت دو طرفه است. روش GetStream()فقط یک ارتباط مستقیم بین سوکت های کلاینت و سرور برقرار می کند. اما طول واقعی آن توسط پیام طرف ارسال کننده تعیین می شود. می توان از یک جریان برای دریافت / ارسال استفاده کرد، اما پس از آن طول پیام ارسال شده توسط سرور نباید از طول پیام دریافتی توسط مشتری از مشتری بیشتر شود (تقریباً چشمانم را بیرون زدم!). بنابراین از دو جریان در هر طرف برای انتقال تک جهتی مجزا بین دو گره اتصال شبکه استفاده می کنیم.

    مثال 3. برنامه کلاینت-سرور برای مشاهده تصاویر از پایگاه داده

    در مثال ساده قبلی با اصول ایجاد اپلیکیشن های شبکه (کمی) آشنا شدیم. و اکنون بیایید یک مثال پیچیده تر بسازیم، زمانی که مشتری تصاویر را درخواست می کند و سرور آنها را از ذخیره سازی بازیابی می کند و برای مشتری ارسال می کند. که در تمرین 7ما سه مخزن تصویر مختلف و سه بیننده ایجاد کرده‌ایم. که در این مثالبیایید از پایگاه داده استفاده کنیم Pictures.my2.mdbبا نقشه های آماده و بر اساس آن ایجاد خواهیم کرد برنامه شبکه(برای کسانی که این کار را نکردند تمرین 7، پایگاه داده در کاتالوگ پیوست شده است داده ی منبع).

    ساخت مشتری

    برای مشتری، ما یک برنامه پنجره از نوع می سازیم WPFبا رابط کاربری، بخشی از آن وام گرفته شده است مثال 6 تمرین 7.


    سرور آماده نیست، لطفا صبر کنید! ما در حال تلاش برای برقراری ارتباط هستیم متاسفم برای ناراحتی ...

    برای نمایش یک صفحه نمایش با متنی در مورد در دسترس نبودن سرور، عنصر را اعمال کردیم جعبه نمایش، که عنصر دیگری در آن قرار داده شده بود مرزبا محتوای متنی چنین "باغ" به شما این امکان را می دهد که صفحه نمایش را متناسب با اندازه پنجره افزایش دهید. با این حال، معرفی عنصر جعبه نمایشهنگام جابجایی پنجره شروع به کاهش قابل توجهی از ترسیم مجدد رابط می کند، زیرا سعی می کند دائماً مقیاس عناصر فرزند خود را مجدداً محاسبه کند. ما نام‌ها را فقط به آن دسته از عناصر رابط اختصاص دادیم که می‌خواهیم آن‌ها را در کد رویه‌ای مدیریت کنیم.

    با استفاده از سیستم؛ با استفاده از System.Collections.Generic. با استفاده از System.Text. با استفاده از System.Windows. با استفاده از System.Windows.Controls. با استفاده از System.Windows.Data. با استفاده از System.Windows.Documents. با استفاده از System.Windows.Input. با استفاده از System.Windows.Media. با استفاده از System.Windows.Media.Animation. با استفاده از System.Windows.Media.Imaging. با استفاده از System.Windows.Shapes. // فضای نام اضافی برای Stream با استفاده از System.IO; با استفاده از IO = System.IO; // نام مستعار برای آدرس دادن به Path با استفاده از System.Windows.Threading. // برای DispatcherTimer // فضای نام اضافی برای Socket //استفاده از System.Net; با استفاده از System.Net.Sockets. با استفاده از System.Collections. // لیست فضای نام PicturesClientDB ( کلاس جزئی عمومی Window1: Window ( پورت int = 12000; String hostName = "127.0.0.1"؛ // محلی TcpClient Client = null; // مرجع مشتری String sendMessage = "!!!GetNames!!!"; آرایه ای از نام ها تایمر DispatcherTimer؛ // Timer // Constructor public Window1() ( InitializeComponent(); // ایجاد و شروع تایمر = new DispatcherTimer(); timer.Tick += new EventHandler(timer_Tick); timer.Interval = TimeSpands.From; سرور void timer_Tick(object sender, EventArgs e) ( Execute(listBox); ) void private listBox_SelectionChanged(object send er, SelectionChangedEventArgs e) ( Execute((ListBox)sender); ) void Execute(ListBox = اگر سرور جدید موجود است، سرور را ایجاد کنید (// با نام سرویس گیرنده موجود است) (/// pClient(HostName, port); ) catch ( // سرور آماده نیست، تایمر را شروع کنید و اگر (Prompt.Visibility != Visibility.Visible) خارج شوید ( Prompt.Visibility = Visibility.Visible; timer.Start(); ) برگشت؛ ) سوئیچ (sendMessage) ( مورد "!!!GetNames!!!": // نام تصویر را دریافت و به لیست متصل کنید t.Visibility == Visibility.Visible) ( Prompt. Visibility = Visibility.Hidden; timer.Stop(); ) // تصویر را دریافت کرده و با قلم قلمو به کاربر نمایش دهید. StreamSource = MemoryStream جدید(GetPicture(name))؛ bi.EndInit(); Pictures.picture.ImageSource = bi;// ارسال تصویر به پس زمینه Border break; ) ) Private String GetNames() ( نام های رشته ها; // ایجاد اتصال شبکه جریانی StreamReamreaderecl. riter writerStream = new StreamWriter(client.GetStream()); // ارسال درخواست به سرور writerStream.WriteLine(sendMessage); writerStream.Flush(); // خواندن پاسخ String receiverData = readerStream.ReadLine(); names = receiverData.Split(separator);// تبدیل به یک آرایه رشته‌ای // بستن اتصال و جریان‌ها، سفارش بی‌اهمیت است client.Close(); writerStream. بستن()؛ readerStream.Close(); بازگشت نام ها؛ ) بایت GetPicture(نام رشته) ( // ایجاد جریانی از اتصالات شبکه NetworkStream readerStream = client.GetStream(); StreamWriter writerStream = new StreamWriter(client.GetStream()); // ارسال یک درخواست به سرور writerStream.WritelurU//name ReaderStream.WritelurStream اندازه - اندازه بافر برای داده های ورودی // SendBufferSize - اندازه بافر برای لیست داده های خروجی فهرست = فهرست جدید (client.ReceiveBufferSize);// ظرفیت افزایشی بایت بایت = بایت جدید; // اندازه بافر سوکت int count = 0; // تکه‌هایی از داده‌های ورودی while ((count = readerStream.Read(bytes, 0, bytes. Length)) != 0) برای (int i = 0; i< 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; } } } }

    لطفا توجه داشته باشید که هنگام نمایش تصاویر، عنصر سنتی را کنار گذاشتیم تصویرهمانطور که در تمرین قبلی انجام دادیم. و برای تغییر، کاملاً غیر متعارف (به زبان ترکی) عمل کردند. حالا نقشه ها را با قلم مو نمایش می دهیم ImageBrushدر پس زمینه یک مستطیل مرزاز طریق جسم متصل به آن تصاویر. البته، در زندگی بعید است که مجبور شوید چنین انحرافی داشته باشید، اما این گزینه می تواند در جایی مفید باشد.


    به محض اینکه واقعیت عدم وجود یا توقف سرور تشخیص داده شود، صفحه نمایش اسپلش ظاهر می شود. و پس از یافتن سرور، صفحه نمایش ناپدید می شود. این مکانیسم بلافاصله به لطف تایمر سیستم. با این حال، هنوز هیچ سروری وجود ندارد و باید ساخته شود.

    ساخت سرور پایگاه داده به عنوان یک سرویس
    • تیم فایل/افزودن/پروژه جدیدبه محلول اضافه کنید NetworkStreamپروژه جدید به نام PicturesServerDBنوع سرویس ویندوز


    با استفاده از سیستم؛ با استفاده از System.Collections.Generic. با استفاده از System.ComponentModel. با استفاده از System.Data؛ با استفاده از System.Diagnostics. با استفاده از System.ServiceProcess. با استفاده از System.Text. // فضای نام اضافی برای ADO.NET با استفاده از System.Data.OleDb. با استفاده از System.Data.Common. // فضای نام اضافی با استفاده از System.IO; با استفاده از System.Net؛ با استفاده از System.Net.Sockets. با استفاده از System.Threading; با استفاده از System.Collections. فضای نام PicturesServerDB ( کلاس جزئی عمومی Service1: ServiceBase ( پورت int = 12000; String hostName = "127.0.0.1" (// رشته اتصال پایگاه داده را از فایل App.config استخراج کنید connectionString = System. Configuration.ConfigurationManager.ConnectionStrings["PicturesDB"].ConnectionString؛ // تبدیل IP به فرمت دیگری localAddr = IPaddress.Parse(hostName). حلقه)؛ thread.IsBackground = true؛ thread.Start(); ) void خصوصی ExecuteLoop() ( سعی کنید (سرور = جدید TcpListener(localAddr، پورت);// ایجاد سرور-سرور سرور.Start();// سرور را شروع کنید // حلقه بی پایان گوش دادن به کلاینت ها) (Pue/End Check Connection) (Pue/End! صف درخواست خالی است ادامه دهید. TcpClient client = server.AcceptTcpClient();// Current Client // ایجاد جریان های اتصال شبکه StreamReader readerStream = new StreamReader(client.GetStream()); NetworkStream streamOut = client.GetStream(); StreamWriter writerStream = StreamWriter جدید(streamOut); // خواندن دستور کلاینت String receiverData = readerStream.ReadLine(); // Recognize and execute switch (receiverData) ( case "!!!GetNames!!!":// ارسال نام های جدا شده با جداکننده String names = GetNames(); writerStream.WriteLine(names); // استفاده از طریق wrapper writerStream.Flush(); break; default bytes(reriteW) دریافت تصویر bytes, 0, bytes.Length);// مستقیماً از streamOut.Flush(); break;) استفاده کنید // اتصال و استریم ها را ببندید، ترتیب مهم نیست client.Close(); readerStream.Close(); writerStream.Close(); ) ) در نهایت ( // Stop server.Stop(); ) ) // نام تصاویر را از پایگاه داده بازیابی کنید و آنها را در یک رشته بسته بندی کنید تا به رشته مشتری GetNames() ارسال کنید ( // زیرساخت ADO را ایجاد و پیکربندی کنید. NET OleDbConnection conn = OleDbConnection جدید (connectionString); OleDbCommand cmd = new OleDbCommand("SELECT FileName FROM MyTable"); cmd.connection = conn; conn.open(); // بازیابی نام طراحی OleDbDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection); // تشکیل رشته ای از داده های خروجی StringBuilder sb = new StringBuilder(); foreach (DbDataRecord رکورد در Reader)// معادل خواندن reader.Read() sb.Append(((string)record["FileName"]).Trim() + separator); ( بازگشت sb.ToString(); ) // خود عکس را از پایگاه داده بازیابی کنید تا به بایت مشتری ارسال شود GetPicture(نام رشته) ( // زیرساخت ADO.NET را ایجاد و پیکربندی کنید OleDbConnection conn = new OleDbConnection(); .Connection = conn; cmd.CommandType = CommandType.Text؛ // اختیاری، تنظیم شده به طور پیش فرض cmd.CommandText = "انتخاب تصویر از MyTable WHERE FileName=?"; cmd.Parameters.Add(new OleDbParameter());; آداپتور OleDbDataAdapter = جدید OleDbDataAdapter(cmd)؛ // بازیابی تصویر از پایگاه داده جدول DataTable = new DataTable();

    منظور ما از یک برنامه مشتری-سرور یک سیستم اطلاعاتی مبتنی بر استفاده از سرورهای پایگاه داده است (به یادداشت طولانی در پایان بخش 2.1 مراجعه کنید). نمایش کلی سیستم اطلاعاتی در معماری "مشتری-سرور" در شکل 2.3 نشان داده شده است.

    • در سمت سرویس گیرنده، کد برنامه اجرا می شود که لزوماً شامل اجزایی است که از رابط کاربر نهایی پشتیبانی می کند، گزارش تولید می کند و سایر عملکردهای خاص برنامه را انجام می دهد (در حال حاضر، ما علاقه ای به نحوه ساخت کد برنامه نخواهیم داشت).
    • سمت کلاینت برنامه با سمت کلاینت نرم افزار مدیریت پایگاه داده تعامل دارد که در واقع نماینده منفرد DBMS برای برنامه است.

    (در اینجا باز هم کمبود اصطلاحات وجود دارد. معمولاً وقتی شرکتی انتشار سرور پایگاه داده بعدی را اعلام می کند، به طور ضمنی فهمیده می شود که یک جزء کلاینت نیز در این محصول وجود دارد. ترکیب «سمت مشتری سرور پایگاه داده» کمی عجیب به نظر می رسد، اما مجبور به استفاده از این عبارت خواهیم بود).

    برنج. 2.3. نمایش کلی سیستم اطلاعاتی در معماری "مشتری-سرور".

    توجه داشته باشید که رابط بین سمت مشتری برنامه و سمت سرویس گیرنده سرور پایگاه داده معمولا بر اساس استفاده از زبان SQL است. بنابراین، عملکردهایی مانند، برای مثال، پیش پردازش فرم های در نظر گرفته شده برای پرس و جوهای پایگاه داده، یا تولید گزارش های حاصل در کد برنامه انجام می شود.

    در نهایت، سمت مشتری از سرور پایگاه داده، با استفاده از ابزار دسترسی شبکه، به سرور پایگاه داده اشاره می کند و متن دستور SQL را برای آن ارسال می کند.

    در اینجا دو نکته دیگر نیز قابل ذکر است.

    1. به طور معمول، شرکت‌هایی که سرورهای پایگاه داده پیشرفته تولید می‌کنند، تلاش می‌کنند تا اطمینان حاصل کنند که محصولاتشان نه تنها در شبکه‌های استاندارد TCP/IP محور امروزی، بلکه در شبکه‌های مبتنی بر پروتکل‌های دیگر (به عنوان مثال، SNA یا IPX / SPX) قابل استفاده هستند. بنابراین، هنگام سازماندهی تعاملات شبکه بین بخش های سرویس گیرنده و سرور DBMS، اغلب از ابزارهای غیر استاندارد استفاده می شود. سطح بالا(به عنوان مثال، سوکت های نرم افزار یا تماس های رویه از راه دور)، و ابزارهای عملکردی مشابه خودشان که کمتر به ویژگی های شبکه وابسته هستند. پروتکل های حمل و نقل.
    2. هنگامی که ما در مورد یک رابط مبتنی بر زبان SQL صحبت می کنیم، باید توجه داشته باشید که علیرغم تلاش های فراوان برای استانداردسازی این زبان، چنین پیاده سازی وجود ندارد که در آن ویژگی های استاندارد زبان گسترش نیابد. استفاده بی رویه از پسوندهای زبان منجر به وابستگی کامل برنامه به سازنده سرور پایگاه داده خاص می شود.

    در قسمت چهارم دوره با جزئیات بیشتر به این موضوعات خواهیم پرداخت.

    حال بیایید ببینیم در سمت سرور پایگاه داده چه اتفاقی می افتد. در محصولات تقریباً همه شرکت ها، سرور متن اپراتور را به زبان SQL از مشتری دریافت می کند.

    • سرور عبارت دریافتی را کامپایل می کند. ما در اینجا در مورد اینکه کدام زبان مقصد توسط یک کامپایلر خاص استفاده می شود صحبت نمی کنیم. در پیاده سازی های مختلف استفاده می شود. رویکردهای مختلف(برای مثال قسمت 4 را ببینید). نکته اصلی این است که در هر صورت، بر اساس اطلاعات موجود در جداول کاتالوگ پایگاه داده، نمایش غیر رویه ای اپراتور به رویه ای برای اجرای آن تبدیل می شود.
    • سپس (در صورت موفقیت آمیز بودن کامپایل) دستور اجرا می شود. باز هم، ما جزئیات فنی را مورد بحث قرار نخواهیم داد زیرا آنها در پیاده سازی متفاوت هستند. در نظر گرفتن اقدامات ممکنعبارات SQL
      • یک اپراتور ممکن است برای تعریف (یا ایجاد) اشیاء پایگاه داده به دسته ای از عملگرها مراجعه کند (در مورد عناصر طرح پایگاه داده یا اشیاء پایگاه داده فراداده صحبت دقیق تر و صحیح تر خواهد بود). به طور خاص، دامنه ها، جداول، محدودیت های یکپارچگی، محرک ها، امتیازات کاربر، رویه های ذخیره شده را می توان تعریف کرد. در هر صورت، زمانی که دستور ایجاد عنصر طرحواره پایگاه داده اجرا می شود، اطلاعات مربوطه در جداول کاتالوگ پایگاه داده (در جداول ابرداده پایگاه) قرار می گیرد. محدودیت های یکپارچگی معمولاً در متاباز پایگاه داده مستقیماً در نمایش متنی ذخیره می شوند. برای اقدامات تعریف شده در تریگرها و رویه های ذخیره شده، کد اجرایی رویه ای تولید و در جداول کاتالوگ ذخیره می شود. توجه داشته باشید که محدودیت‌های یکپارچگی، محرک‌ها و رویه‌های ذخیره‌شده، به یک معنا، نماینده برنامه در پایگاه‌داده‌ای هستند که توسط سرور پشتیبانی می‌شود. آنها ستون فقرات پشتیبان برنامه را تشکیل می دهند (به زیر مراجعه کنید).
      • هنگام اجرای عملگرهای انتخاب داده، بر اساس محتویات جداول تحت تأثیر پرس و جو و احتمالاً با استفاده از نمایه های نگهداری شده در پایگاه داده، مجموعه داده های حاصل تشکیل می شود (در اینجا عمداً از عبارت "جدول نتیجه" استفاده نمی کنیم، زیرا بسته به نوع خاص عملگر، می توان نتیجه را مرتب کرد و جداول، یعنی بر اساس روابط، مرتب شده اند). قسمت سرور DBMS نتیجه را به قسمت مشتری ارسال می کند و پردازش نهایی در قسمت مشتری برنامه انجام می شود.
      • هنگام اجرای دستورات تغییر محتوای پایگاه داده (INSERT، UPDATE، DELETE)، بررسی می شود که محدودیت های یکپارچگی تعریف شده تا آن نقطه (آنهایی که متعلق به کلاس بررسی فوری هستند) نقض نشوند، پس از آن اقدام مناسب انجام می شود (همراه با اصلاح تمام نمایه های مربوطه و ثبت تغییرات). در مرحله بعد، سرور بررسی می کند که آیا این تغییر بر شرایط شلیک هر تریگر تأثیر می گذارد یا خیر، و اگر چنین ماشه ای یافت شود، روال عمل خود را اجرا می کند. این روش ممکن است شامل دستورات دیگری برای اصلاح پایگاه داده باشد که ممکن است باعث شلیک سایر محرک ها و غیره شود. می‌توانیم در نظر بگیریم که اقداماتی که بر روی سرور پایگاه داده هنگام بررسی رضایت از محدودیت‌های یکپارچگی و هنگام فعال شدن تریگرها انجام می‌شوند، نشان‌دهنده اقدامات بک‌اند برنامه هستند.

    هنگام اجرای دستورات تغییر طرح پایگاه داده (اضافه کردن یا حذف ستون های جداول موجود، تغییر نوع داده ستون موجود از جدول موجود و غیره)، تریگرها نیز می توانند فعال شوند، به عبارت دیگر، پشتیبان برنامه را می توان اجرا کرد.

    به طور کلی در معماری فایل سرور ما یک کلاینت ضخیم و یک سرور بسیار نازک داریم به این معنا که تقریباً تمام کارها در سمت کلاینت انجام می شود و فقط ظرفیت کافی از سرور مورد نیاز است. ذخیره سازی دیسک(شکل 2.2).

    برنج. 2.2. کلاینت «ضخیم» و سرور «نازک» در معماری فایل-سرور

    نتیجه گیری مختصرساده، کم حجم و برای استفاده یک کاربر طراحی شده است، یک برنامه سرور فایل را می توان خیلی سریع طراحی، توسعه و اشکال زدایی کرد. اغلب اوقات برای یک شرکت کوچک برای حفظ، به عنوان مثال، سوابق پرسنل، کافی است یک سیستم ایزوله در حال اجرا بر روی یک رایانه شخصی مستقل باشد. البته در این مورد نیز دقت زیادی از جانب کاربران نهایی (یا مدیرانی که حضور آنها در این مورد مشکوک است) برای ذخیره ایمن و حفظ یکپارچگی داده ها لازم است. با این حال، در کمی بیشتر موارد دشوار(به عنوان مثال، هنگام سازماندهی یک سیستم اطلاعاتی برای پشتیبانی از پروژه ای که توسط یک گروه انجام می شود)، معماری فایل-سرور ناکافی می شود.

    اجزای نابرابر هستند شبکه اطلاعات. برخی صاحب نوعی منبع هستند، بنابراین سرور نامیده می شوند، برخی دیگر به این منابع دسترسی دارند و کلاینت نامیده می شوند. بیایید در نظر بگیریم که آنها چگونه با یکدیگر تعامل دارند و معماری مشتری-سرور چیست.

    معماری سرویس گیرنده-سرور

    معماری «کلاینت-سرور» تعامل اجزای ساختاری در یک شبکه مبتنی بر شبکه معین معین است که در آن اجزای ساختاری سرور و گره‌ها ارائه‌دهنده عملکردهای تخصصی خاص (سرویس‌ها) و همچنین مشتریانی هستند که از این سرویس استفاده می‌کنند. توابع خاص معمولاً بر اساس حل وظایف خاص به سه گروه تقسیم می شوند:

    • توابع ورود و ارائه داده ها برای تعامل کاربر با سیستم در نظر گرفته شده است.
    • توابع برنامه - هر یک مجموعه خاص خود را دارد.
    • توابع مدیریت منابع برای مدیریت سیستم فایل، پایگاه داده های مختلف و سایر اجزا طراحی شده اند.

    به عنوان مثال، یک کامپیوتر بدون اتصال شبکهمولفه های ارائه، برنامه و کنترل را نشان می دهد سطوح مختلف. چنین سطوحی سیستم عامل، نرم افزار کاربردی و خدماتی و ابزارهای مختلف در نظر گرفته می شوند. به همین ترتیب تمام اجزای فوق در شبکه وجود دارند. نکته اصلی این است که به درستی از تعامل شبکه بین این اجزا اطمینان حاصل شود.

    اصل عملکرد معماری مشتری-سرور

    معماری سرویس گیرنده-سرور اغلب برای ایجاد پایگاه های داده شرکتی استفاده می شود که در آن اطلاعات نه تنها ذخیره می شود، بلکه به صورت دوره ای نیز پردازش می شود. روش های مختلف. این پایگاه داده است که عنصر اصلی هر سیستم اطلاعاتی شرکتی است و هسته این پایگاه داده بر روی سرور قرار دارد. بنابراین، پیچیده ترین عملیات مربوط به ورودی، ذخیره سازی، پردازش و اصلاح داده ها در سرور انجام می شود. هنگامی که یک کاربر (کارفرما) به یک پایگاه داده (سرور) دسترسی پیدا می کند، درخواست پردازش می شود: پایگاه داده مستقیماً قابل دسترسی است و یک پاسخ (نتیجه پردازش) برگردانده می شود. نتیجه پردازش یک پیام شبکه در مورد موفقیت عملیات یا یک خطا است. کامپیوترهای سرور می توانند چندین کلاینت را که همزمان به یک فایل دسترسی دارند، مدیریت کنند. چنین کارهایی از طریق شبکه به شما امکان می دهد سرعت کار برنامه هایی که استفاده می کنید را افزایش دهید.

    معماری مشتری-سرور: کاربرد فناوری

    این معماری برای دسترسی به منابع مختلف استفاده می شود فناوری های شبکه: پایگاه های داده، سرورهای پست الکترونیکی، فایروال ها، سرورهای پروکسی. توسعه برنامه های کاربردی سرویس گیرنده-سرور به شما امکان می دهد امنیت، قابلیت اطمینان و عملکرد برنامه های کاربردی خود و شبکه را به طور کلی بهبود بخشید. اغلب، برنامه های کاربردی سرویس گیرنده-سرور برای اتوماسیون کسب و کار استفاده می شود.

    یک DBMS مدرن باید تعدادی از الزامات را برآورده کند که مهمترین آنها یک سرور پایگاه داده هوشمند با کارایی بالا است. در مرحله بعد، روندهای اصلی در توسعه آن را در نظر خواهیم گرفت و مکانیسم های خاصی را که در آنها تجسم یافته اند مورد بحث قرار خواهیم داد.

    روند بهبود فنی سرور پایگاه داده هنوز برای اکثر کاربران DBMS مدرن نامرئی است. بنابراین، هنگام انتخاب یک سیستم خاص، آنها، به عنوان یک قاعده، سطح فنی راه حل های تعبیه شده در مکانیسم عملکرد آن یا تأثیر این تصمیمات بر عملکرد کلی DBMS را در نظر نمی گیرند. در همین حال، کیفیت آن نه با غنای رابط های کاربری، نه با انواع ابزارهای پشتیبانی توسعه تعیین می شود، بلکه در درجه اول به معماری سرور پایگاه داده بستگی دارد. در ادامه، مدل‌های فناوری «مشتری-سرور» در نظر گرفته می‌شود، جایگاه سرور پایگاه داده در این مدل‌ها مشخص می‌شود و مهم‌ترین مکانیسم‌های سرور پایگاه داده - رویه‌ها، قوانین (محرک‌ها)، رویدادها - به اختصار توضیح داده می‌شود. مورد دوم با مثال هایی نشان داده می شود که از گویش SQL استفاده شده در DBMS Ingres استفاده می کنند.

    فناوری و مدل های مشتری-سرور.

    "Client-server" مدلی از تعامل بین رایانه های موجود در یک شبکه است. به عنوان یک قاعده، کامپیوترها برابر نیستند. هر یک از آنها هدف خاص خود را دارد، متفاوت از دیگران، نقش خود را ایفا می کند. برخی از کامپیوترهای موجود در شبکه اطلاعات و منابع محاسباتی مانند پردازنده‌ها، سیستم فایل، سرویس پست، سرویس چاپ، پایگاه داده را در اختیار دارند و مدیریت می‌کنند. سایر رایانه ها با استفاده از خدمات قبلی توانایی دسترسی به این خدمات را دارند. رایانه ای که این یا آن منبع را مدیریت می کند معمولاً سرور این منبع و رایانه ای که می خواهد از آن استفاده کند کلاینت نامیده می شود. یک سرور خاص بر اساس نوع منبعی که دارد تعیین می شود. بنابراین، اگر پایگاه های داده یک منبع هستند، پس ما در مورد آن صحبت می کنیم سرور پایگاه داده، که هدف آن ارائه درخواست های مشتری مربوط به پردازش داده است. اگر منبع یک سیستم فایل باشد، آنگاه از آن صحبت می شود سرور فایل، یا سرور فایل و غیره

    در یک شبکه، همان رایانه می‌تواند هم به عنوان مشتری و هم به عنوان سرور عمل کند. به عنوان مثال، در یک سیستم اطلاعاتی که شامل رایانه‌های شخصی، رایانه مرکزی و مینی رایانه‌ای است که یونیکس را اجرا می‌کند، دومی می‌تواند هم به‌عنوان سرور پایگاه داده عمل کند، هم به درخواست‌های مشتریان - رایانه‌های شخصی سرویس‌دهی کند و هم به‌عنوان مشتری، درخواست‌ها را به رایانه اصلی ارسال کند.

    همین اصل در مورد تعامل برنامه ها نیز صدق می کند. اگر یکی از آنها عملکردهایی را انجام دهد و مجموعه مناسبی از خدمات را به دیگران ارائه دهد، چنین برنامه ای به عنوان یک سرور عمل می کند. برنامه هایی که از این خدمات استفاده می کنند کلاینت نامیده می شوند. بنابراین، هسته یک DBMS مبتنی بر SQL رابطه ای اغلب سرور پایگاه داده یا سرور SQL نامیده می شود و برنامه ای که برای خدمات پردازش داده به آن دسترسی دارد، کلاینت SQL نامیده می شود.

    در ابتدا، DBMS یک معماری متمرکز داشت (شکل 10). در آن، خود DBMS و برنامه‌های کاربردی که با پایگاه‌های داده کار می‌کردند، روی یک کامپیوتر مرکزی (کامپیوتر اصلی یا مینی کامپیوتر) کار می‌کردند. بانک های اطلاعاتی هم وجود داشت. پایانه ها به کامپیوتر مرکزی متصل می شدند و به عنوان ایستگاه های کاری کاربر عمل می کردند. کلیه فرآیندهای مربوط به پردازش داده ها مانند: پشتیبانی از ورودی کاربر، تشکیل، بهینه سازی و اجرای کوئری ها، تبادل با دستگاه های حافظه خارجی و ... بر روی رایانه مرکزی انجام می شد که الزامات سختی را بر عملکرد آن تحمیل می کرد. ویژگی‌های DBMS نسل اول مستقیماً با معماری سیستم‌های مین‌فریم و مینی رایانه‌ها مرتبط است و به اندازه کافی تمام مزایا و معایب آنها را منعکس می‌کند. با این حال، ما بیشتر به وضعیت فعلی DBMS چند کاربره علاقه مندیم، که معماری سرویس گیرنده-سرور به استاندارد واقعی تبدیل شده است.

    شکل 10 - سیستم هایی با معماری متمرکز

    برای درک واضح تر از ویژگی های آن، لازم است چندین مدل از فناوری "مشتری-سرور" در نظر گرفته شود که انجام خواهد شد.

    اگر فرض شود که طرح سیستم اطلاعات(IS) یک فناوری "مشتری-سرور" خواهد داشت، به این معنی که برنامه های کاربردی اجرا شده در چارچوب آن توزیع می شود. به عبارت دیگر، برخی از توابع برنامه کاربردی (یا به عبارت ساده تر، برنامه) در برنامه مشتری، دیگری در برنامه سرور پیاده سازی می شود و پروتکلی برای تعامل آنها تعریف می شود.

    اصل اساسی فناوری "مشتری-سرور" جداسازی عملکردهای یک استاندارد است برنامه تعاملیبه چهار گروه مجزا گروه اول توابع ورودی و نمایش داده ها هستند. گروه دوم توابع صرفا کاربردی را ترکیب می کند که مختص یک حوزه موضوعی خاص هستند (مثلاً برای سیستم بانکی- افتتاح حساب، انتقال پول از یک حساب به حساب دیگر و غیره). گروه سوم شامل کارکردهای اساسی ذخیره سازی و مدیریت منابع اطلاعاتی (پایگاه های اطلاعاتی، سیستم های فایل و غیره) است. در نهایت، کارکردهای گروه چهارم، توابع خدماتی هستند (ایفای نقش پیوند بین عملکردهای سه گروه اول).

    مطابق با این، اجزای منطقی زیر در هر برنامه متمایز می شوند:

    مشاهده مؤلفه ای که توابع گروه اول را اجرا می کند.

    مؤلفه برنامه ای که از عملکردهای گروه دوم پشتیبانی می کند.

    یک جزء دسترسی به منابع اطلاعاتی که از عملکرد گروه‌های سوم پشتیبانی می‌کند، و همچنین توافق‌نامه‌هایی را درباره نحوه تعامل آنها معرفی و اصلاح می‌کند (پروتکل تعامل).

    تفاوت در پیاده سازی فناوری مشتری-سرور توسط چهار عامل تعیین می شود. ابتدا، چه نوع نرم افزاری در هر یک از این اجزاء یکپارچه شده است. دوم اینکه از چه مکانیزم های نرم افزاری برای اجرای عملکرد هر سه گروه استفاده می شود. سوم، چگونگی توزیع اجزای منطقی در بین کامپیوترهای موجود در شبکه. چهارم اینکه از چه مکانیزم هایی برای اتصال اجزا به یکدیگر استفاده می شود.

    چهار رویکرد در مدل ها پیاده سازی شده است:

    مدل سرور فایل (File Server - FS)؛

    مدل دسترسی به داده های راه دور (Remote Data Access - RDA)؛

    مدل سرور پایگاه داده (سرور پایگاه داده - DBS)؛

    مدل سرور برنامه (Application Server - AS).

    مدل FS پایه ای برای شبکه های محلی کامپیوترهای شخصی است. چندی پیش، در میان توسعه دهندگان داخلی با استفاده از سیستم هایی مانند FoxPRO، Clipper، Clarion، Paradox و غیره بسیار محبوب بود. ماهیت مدل ساده و برای همه شناخته شده است. یکی از کامپیوترهای موجود در شبکه در نظر گرفته می شود سرور فایلو خدمات پردازش فایل را به رایانه های دیگر ارائه می دهد. سرور فایل توسط یک شبکه مدیریت می شود سیستم عامل(مثلا، Novell NetWare) و نقش یک جزء دسترسی به منابع اطلاعاتی (یعنی فایل ها) را ایفا می کند. در رایانه های دیگر در شبکه، برنامه ای در حال اجرا است که در کدهای آن مؤلفه ارائه و مؤلفه برنامه با هم ترکیب شده اند (شکل 11). پروتکل تبادل مجموعه ای از تماس های سطح پایین است که دسترسی یک برنامه کاربردی را به سیستم فایل در یک سرور فایل فراهم می کند.

    شکل 11 - مدل سرور فایل

    مدل FS به عنوان پایه ای برای گسترش قابلیت های DBMS شخصی در جهت پشتیبانی از حالت چند کاربره عمل کرد. در چنین سیستم‌هایی، چندین رایانه شخصی هم برنامه کاربردی و هم یک کپی از DBMS را اجرا می‌کنند و پایگاه‌های داده در فایل‌های به اشتراک گذاشته شده در یک سرور فایل قرار دارند. هنگامی که یک برنامه کاربردی به پایگاه داده دسترسی پیدا می کند، DBMS درخواستی را به سرور فایل ارسال می کند. این درخواست فایل هایی را مشخص می کند که داده های درخواستی در آن قرار دارند. در پاسخ به درخواست، سرور فایل بلوک مورد نیاز داده را از طریق شبکه ارسال می کند. DBMS پس از دریافت آن، اقداماتی را که در آن اعلام شده بود، روی داده ها انجام می دهد برنامه کاربردی.

    معایب تکنولوژیکی مدل شامل ترافیک بالای شبکه (انتقال بسیاری از فایل ها، مورد نیاز برنامه) محدوده محدودی از عملیات دستکاری داده ها ("داده ها فایل هستند")، فقدان ابزار کافی برای ایمن سازی دسترسی به داده ها (حفاظت فقط در سطح است. سیستم فایل) و غیره. در واقع، موارد فوق کاستی نیست، بلکه نتیجه محدودیت های ذاتی مدل FS است که توسط ماهیت آن تعیین می شود. سوء تفاهم زمانی رخ می دهد که از مدل FS برای اهداف دیگری استفاده می شود، به عنوان مثال، آنها سعی می کنند آن را به عنوان یک مدل سرور پایگاه داده تفسیر کنند. جای مدل FS در سلسله مراتب مدل های کلاینت-سرور، جای مدل فایل سرور است و نه بیشتر. به همین دلیل است که تلاش برای ایجاد پروژه های بزرگ بر اساس مدل FS محکوم به شکست است. سیستم های شرکتی- تلاش هایی که در گذشته اخیر انجام شده و اغلب در حال حاضر انجام می شود.

    مدل RDA از نظر فن آوری پیشرفته تر به طور قابل توجهی با مدل FS در ماهیت جزء دسترسی به منابع اطلاعاتی متفاوت است. این معمولا SQL Server است. در مدل RDA، کدهای مؤلفه ارائه و مؤلفه برنامه ترکیب شده و بر روی رایانه مشتری اجرا می شود. دومی هم از عملکردهای ورود و نمایش داده و هم از عملکردهای صرفاً کاربردی پشتیبانی می کند. دسترسی به منابع اطلاعاتی یا توسط اپراتورهای یک زبان خاص (به عنوان مثال، SQL در مورد پایگاه داده) یا با فراخوانی توابع یک کتابخانه خاص (در صورت وجود رابط برنامه نویسی برنامه کاربردی مناسب - API) فراهم می شود.

    مشتری درخواست ها را به منابع اطلاعاتی (به عنوان مثال، پایگاه های داده) از طریق شبکه به یک کامپیوتر راه دور ارسال می کند. هسته DBMS بر روی آن کار می کند، که درخواست ها را پردازش می کند، اقدامات تجویز شده در آنها را انجام می دهد و نتیجه را به عنوان یک بلوک داده قالب بندی شده به مشتری برمی گرداند (شکل 12). در همان زمان، برنامه های در حال اجرا بر روی رایانه های مشتری به عنوان آغازگر دستکاری داده ها عمل می کنند، در حالی که هسته DBMS یک نقش منفعل - خدمات دهی به درخواست ها و پردازش داده ها را به خود اختصاص می دهد.

    شکل 12 - مدل دسترسی به داده های راه دور

    مدل RDA معایب ذاتی سیستم های معماری متمرکز و سیستم های سرور فایل را حذف می کند.

    اول از همه، انتقال یک مؤلفه ارائه و یک مؤلفه برنامه به رایانه های مشتری به طور قابل توجهی سرور پایگاه داده را تخلیه می کند و تعداد کل فرآیندهای سیستم عامل را به حداقل می رساند. سرور پایگاه داده از عملکردهای غیرمعمول خود رها می شود. پردازنده یا پردازنده های سرور به طور کامل با داده ها، پرس و جو و عملیات پردازش تراکنش بارگذاری می شود. این امر با حذف پایانه‌ها و تجهیز ایستگاه‌های کاری به رایانه‌هایی که منابع محاسباتی محلی خود را دارند و به طور کامل توسط برنامه‌های پیش‌زمینه استفاده می‌شوند، ممکن می‌شود. از طرف دیگر، بار شبکه به شدت کاهش می‌یابد، زیرا درخواست‌های I/O از مشتری به سرور منتقل نمی‌شوند (مانند سیستم‌های دارای سرور فایل)، اما درخواست‌های SQL حجم آنها بسیار کمتر است.

    مزیت اصلی مدل RDA یکسان سازی رابط "مشتری-سرور" در قالب زبان SQL است. در واقع، تعامل یک جزء برنامه با هسته DBMS بدون یک وسیله ارتباطی استاندارد غیرممکن است. درخواست های ارسال شده توسط یک برنامه به هسته باید توسط هر دو درک شود. برای انجام این کار، آنها باید فرموله شوند زبان خاص. اما زبان SQL از قبل در DBMS وجود دارد که قبلاً در مورد آن صحبت شده است. بنابراین، توصیه می شود از آن نه تنها به عنوان وسیله ای برای دسترسی به داده ها، بلکه به عنوان استانداردی برای ارتباط بین مشتری و سرور استفاده کنید.

    چنین ارتباطی را می توان با گفتگوی چند نفر مقایسه کرد، زمانی که یکی به سؤالات دیگران پاسخ می دهد (سوالات به طور همزمان پرسیده می شوند). و آنقدر سریع این کار را انجام می دهد که زمان انتظار برای پاسخ به صفر نزدیک می شود. سرعت بالای ارتباط در درجه اول به دلیل بیان واضح سؤال به دست می آید، زمانی که سؤال کننده و پاسخ دهنده نیازی به مشاوره اضافی در مورد اصل موضوع ندارند. مصاحبه کنندگان چند عبارت کوتاه و بدون ابهام رد و بدل می کنند، آنها نیازی به توضیح چیزی ندارند.

    متأسفانه، مدل RDA بدون تعدادی از اشکالات نیست. اول، تعامل بین مشتری و سرور از طریق پرس و جوهای SQL به طور قابل توجهی شبکه را بارگذاری می کند. ثانیا، مدیریت رضایت بخش برنامه های کاربردی در مدل RDA به دلیل ترکیب توابع با ماهیت های مختلف (عملکردهای ارائه و برنامه) در یک برنامه عملا غیرممکن است.

    همراه با مدل RDA، مدل امیدوار کننده DBS به طور فزاینده ای محبوب می شود (شکل 13). مورد اخیر در برخی اجرا شده است DBMS رابطه ای(Informix، Ingres، Sybase، Oracle). بر اساس مکانیسم است رویه های ذخیره شده- ابزار برنامه نویسی سرور SQL. رویه ها در یک دیکشنری پایگاه داده ذخیره می شوند، بین چندین کلاینت به اشتراک گذاشته می شوند و در همان ماشینی که سرور SQL در حال اجراست اجرا می شوند. زبانی که رویه‌های ذخیره‌شده در آن توسعه می‌یابند، توسعه رویه‌ای زبان است پرس و جوهای SQLو برای هر DBMS خاص منحصر به فرد است.

    شکل 13 - مدل سرور پایگاه داده

    در مدل DBS، کامپوننت view بر روی کامپیوتر مشتری اجرا می شود، در حالی که جزء برنامه به عنوان مجموعه ای از رویه های ذخیره شده طراحی شده و بر روی کامپیوتر سرور پایگاه داده کار می کند. جزء دسترسی به داده، یعنی هسته DBMS نیز در آنجا اجرا می شود. مزایای مدل DBS آشکار است: توانایی مدیریت مرکزی توابع برنامه، کاهش ترافیک (به جای پرس و جوهای SQL، فراخوان ها به رویه های ذخیره شده از طریق شبکه ارسال می شوند)، و توانایی تقسیم یک رویه بین چندین برنامه، و صرفه جویی در منابع رایانه با استفاده از یک برنامه اجرای رویه که یک بار ایجاد شده است. معایب این مدل شامل ابزارهای محدودی است که برای نوشتن رویه‌های ذخیره‌شده استفاده می‌شود، که پسوندهای رویه‌ای مختلف SQL هستند که از نظر ابزار بصری و عملکرد با زبان‌های نسل سوم مانند C یا Pascal قابل مقایسه نیستند. دامنه استفاده از آنها محدود به یک DBMS خاص است؛ اکثر DBMS ها فاقد قابلیت اشکال زدایی و آزمایش رویه های ذخیره شده توسعه یافته هستند.

    در عمل، زمانی که از یکپارچگی پایگاه داده و برخی توابع کاربردی ساده توسط رویه های ذخیره شده (مدل DBS) پشتیبانی می شود، اغلب از مدل های ترکیبی استفاده می شود. توابع پیچیدهمستقیماً در برنامه کاربردی که بر روی رایانه مشتری اجرا می شود (مدل RDA) پیاده سازی می شوند. به هر شکلی، DBMS های چند کاربره مدرن مبتنی بر مدل های RDA و DBS هستند و هنگام ایجاد یک IS که فقط از یک DBMS استفاده می کند، یکی از این دو مدل یا ترکیب معقول آنها انتخاب می شود.

    شکل 14.

    مدل سرور برنامه

    در مدل AS (شکل 14)، فرآیند در حال اجرا بر روی کامپیوتر مشتری، طبق معمول، مسئول رابط کاربری است (یعنی عملکردهای گروه اول را انجام می دهد). با درخواست اجرای سرویس ها به مولفه برنامه، این فرآیند نقش ایفا می کند مشتری برنامه(برنامه کاربردی Client-AC). یک جزء برنامه به عنوان گروهی از فرآیندها اجرا می شود که عملکردهای برنامه کاربردی را انجام می دهند و سرور برنامه نامیده می شود. Application Server - AS). تمام عملیات بر روی منابع اطلاعاتی توسط جزء مربوطه انجام می شود که در رابطه با آن AS نقش مشتری را ایفا می کند. منابع موجود از اجزای برنامه انواع مختلف- پایگاه داده ها، صف ها، خدمات پستیو غیره.

    مدل‌های RDA و DBS بر اساس طرح تقسیم توابع دو لایه هستند. در مدل RDA، توابع برنامه به برنامه کلاینت اختصاص داده می شود؛ در مدل DBS، مسئولیت اجرای آنها بر عهده هسته DBMS است. در حالت اول، مؤلفه برنامه با مؤلفه ارائه ادغام می شود و در حالت دوم، در مؤلفه دسترسی به منابع اطلاعاتی ادغام می شود. مدل AS یک طرح جداسازی تابع سه لایه را اجرا می کند، که در آن جزء برنامه به عنوان مهمترین عنصر جدا شده از برنامه مشخص می شود، مکانیسم های جهانی سیستم عامل چندوظیفه ای برای تعیین آن استفاده می شود و رابط ها با دو جزء دیگر استاندارد می شوند. مدل AS پایه ای برای مانیتورهای پردازش تراکنش است ( مانیتورهای پردازش تراکنش - TPM)، یا به عبارت ساده تر، مانیتورهای تراکنش، که به عنوان نوع خاصی از نرم افزار برجسته می شوند.

    در خاتمه، متذکر می شویم که، اغلب، وقتی در مورد سرور پایگاه داده صحبت می شود، منظور آنها یک کامپیوتر و نرم افزار است - هسته DBMS. هنگام توصیف معماری "Client-Server"، منظور ما از سرور پایگاه داده یک رایانه بود. علاوه بر این، سرور پایگاه داده به عنوان یک نرم افزار درک می شود - هسته DBMS.


    اطلاعات مشابه