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

این موتور ذخیره سازی برای سناریوهایی مناسب است که شما قصد داشته باشید داده هایی رو بین چند سرور یا چند دیتابیس به اشتراک بگذارید .

برای مثال شما یک جدول در دیتابیس شماره یک بنام tbl1 دارید که بر روی سرور شماره 1 قرار دارد ، حال میخواهید اطلاعات این تیبل رو با تیبل tbl1  موجود بر روی سرور شماره 2 sync کنید ، خب در این سناریو شما میتونید تیبلی که میخواهید اطلاعاتش رو از تیبل دیگه بگیره رو بصورت federated ایجاد کنید تا بصورت مجازی برای شما داده های اون یکی تیبل رو نمایش بده . در این صورت بر اساس کانکشنی که قبلا تعریف کردید ، موقع فراخوانی داده های تیبل فدریت شده ، مای اس کیو ال بر اساس همون کانکشن میره داده های جدیل رو از سرور دوم میخونه و در تیبل فدریت شده بصورت مجازی به شما نمایش میده بصورتی که شما تصور میکنید این داده ها در همین سرور وجود دارند و شما انگار وثتی دارید به این تیبل محلی تون کوئری میدید ، در واقع انگار به همون تیبلی که در راه دور هست کوئری میدید و اینطوری به داده های راه دور دسترسی خواهید داشت.

 

این آموزش تکمیل خواهد شد ...

 

مراحل ایجاد یک تیبل federated روی کامپیوتر لوکال و اتصال آن به یک سرور دیگر و تیبلی دیگر جهت سینک کردن داده ها :

1 - تعریف سرور : 

CREATE SERVER server_name FOREIGN DATA WRAPPER wrapper_name OPTIONS (option [, option] ...)

مثال : 

CREATE SERVER zanjanServer FOREIGN DATA WRAPPER mysql OPTIONS (USER 'root', HOST '217.218.100.101', PORT 3306, DATABASE 'testdb');

 

2 - ایجاد تیبل روی کامپیور سرور(remote) که محل فیزیکی ذخیره سازی داده هاست و داده ها بصورت فیزیکی در واقع روی آن قرار دارند :

 

CREATE TABLE test_table 
( id INT(20) AUTO_INCREMENT, name VARCHAR(32) DEFAULT '') 
ENGINE=MyISAM 
DEFAULT CHARSET=utf8mb4;

 

 

3 - ایجاد تیبل مجازی یا FEDERATED TABLE : 

CREATE TABLE test_table (
    id     INT(20) AUTO_INCREMENT,
    name   VARCHAR(32) DEFAULT ''
)
ENGINE=FEDERATED
DEFAULT CHARSET=utf8mb4
CONNECTION='zanjanServeer/test_table';

 

تمام شد .

حالا برای اینکه داده های داخل تیبل روی سرور راه دور رو بخونید کافیه برای تیبل لوکال کوئری SELECT رو بنویسید .

خود مای اس کیو ال میره و داده های داخل تیبل روی کامپیوتر سرور رو بر میداره و میاره به شما نشون میده .

نکته : هیچ داده ای روی کامپیوتر لوکال شما ذخیره نمیشه و این تیبل صرفا نقش یه پل ارتباطی رو داره و داده بر روی دیتابیس کامپیوتر سرور ذخیره سازی و مدیریت می شوند و شما هم هر کوئری رو که به تیبل FEDERATED بفرستید اینم پاس میده به مای اس کیو ال روی سرور و کوئری اون سمت هندل میشه و داده های در سمت سرور بروزرسانی میشن و ما نتیجه رو در سمت کلایت روی تیبل مجازی خودمون میبینیم.

 

امیدوارم بدردتون خورده باشه

البته خیلی از موارد عملیاتی مربوط به FEDERATED TABLE ها میمونن که انشالله سر یه فرصت دیگه خدمتتون شرح میدم

 

آرزوی موفقیت براتون دارم

ارادتمند مهدی حسامی