Mysql-ის ფედერაციული ცხრილი :)
რა შთამბეჭდავი სახელია, Mysql-ის ფედერაციული ცხრილი 🙂
(Mysql Federated Tables)
მისი არსი მოიცავს ძალზედ მარტივს. ჩვენ საშუალება გვეძლება რომელიმე კონკრეტული ცხრილი პარალელურ რეჟიმში ვამუშაოთ სხვა, მეორე სერვერზე როგორც კოპიო. ანუ თუ ჩვენ რაიმე ქმედით sql-ს გავუშვებთ მთავარ ცხრილზე იგივე ქმედება შესრულდება მასზე მიმაგრებულ მეორე ჰოსტზე არსებულ ცხრილზე (insert, delete, update, truncate).
ვთქვათ გვაქვს mysql-ის 2 ჰოსტი 192.168.1.100 (host1) და 192.168.1.101 (host2),
სადაც მაგალითისთვის host1-ზე გვაქვს ბაზა testDB1 ცხრილი test_table-ით და testDB2 ბაზა ცხრილით federated_table.
გვაქვს რა… პრინციპში ჯერ დავიწყოთ 🙂
პირველ რიგში ჩვენთვის ძირითად 192.168.1.101 სერვერზე mysql-ში უნდა გავააქტიუროთ FEDERATED ოფცია.
გავაჩეროთ Mysql-ის პროცესი, გავხსნათ my.cnf ან my.conf ან my.ini(win32 პლატფორმა), ვიპოვოთ
1 | skip-federated |
და შევცვალოთ
1 | federated |
-ით.
თუ ვერ ვიპოვეთ იგი შეგვიძლია
1 | [mysqld] |
-ის შემდეგ გავწეროთ შემდეგნაირად
1 2 | [mysqld] federated |
დავსტარტოთ Mysql და გავაგრძელოთ.
პირველ სერვერზე (192.168.1.100) შევქმნათ ცხრილი test_table, რომელიც სტრუქტურულად იდენტური იქნება შემდგომში შექმნილი ძირითადი federated_table-ისა.
1 2 3 4 5 6 7 8 9 | -- host1 testDB1 CREATE TABLE test_table ( id INT(20) NOT NULL AUTO_INCREMENT, name VARCHAR(32) NOT NULL DEFAULT '', other INT(20) NOT NULL DEFAULT '0', PRIMARY KEY (id) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; |
მეორე 192.168.1.101 სერვერზე შევქმნათ ცხრილი, რომელიც იქნება ძირითადი ცხრილი და რომლის კოპიო უნდა მოხდეს პირველ სერვერზე test_table-ში.
1 2 3 4 5 6 7 8 9 10 | --host2 testDB2 CREATE TABLE federated_table ( id INT(20) NOT NULL AUTO_INCREMENT, name VARCHAR(32) NOT NULL DEFAULT '', other INT(20) NOT NULL DEFAULT '0', PRIMARY KEY (id) ) ENGINE=FEDERATED DEFAULT CHARSET=latin1 CONNECTION='mysql://user:pass@remote_host:3306/testDB1/test_table'; |
აუცილებელია ორივე ცხრილის ძირითადი სტრუქტურა იყოს იდენტური.
შედეგი შეგიძლიათ თავადაც ნახოთ – federated_table-ზე Insert-ისას იგივე ჩანაწერი გაჩნდება test_table-შიც. ზუსტად მსგავს შედეგს მივიღებთ ცხრილიდან ჩანაწერის delete-ს, update-ს და truncate-ს დროსაც.
კონექციის მაგალითები –
1 2 3 | CONNECTION='mysql://username:password@hostname:port/database/tablename' CONNECTION='mysql://username@hostname/database/tablename' CONNECTION='mysql://username:password@hostname/database/tablename' |
გაითვალისწინეთ, რომ ვინაიდან ცხრილის შექმნისას პაროლი მითითებულია დაუშიფრავად შესაძლოა მისი ნახვა შეძლოს ნებისმიერმა მოხმარებელმა
მაგალითად
1 | SHOW CREATE TABLE federated_table |
წარმატებულ “ფედერირებას” გისურვებთ 😉
January 4th, 2011 at 5:56 pm
საინტერესოა 🙂
ისე, მეორე ბაზას თუ პრობლემა შეექმნა, რა ხდება? ან ვთქვათ კავშირია ნელი ხანდახან და ძირითად ცხრილში დიდი რაოდენობის ჩანაწერებს ვსვამთ. ელოდება მანამ მეორე ბაზაში არ ჩაისმება?
თუ არ აინტერესებს საერთოდ მეორემდე მივა თუ არა ინფორმაცია?
January 4th, 2011 at 6:28 pm
@Samurai Girl
წესით არა, რადგან როგორც ტეტირებისას მახსოვს, საერთოდ არაწარმატებული კონექციისასაც კი არ გიჟდებოდა და.ა.შ. უბრალოდ არ აკეთებდა ჩანაწერებს მეორე ცხრილში და მორჩა.
September 7th, 2011 at 11:08 am
გამარჯობათ,
დამაინტერედა თქვენ საიტზე (http://www.about.ge/lorem/) ლორემ იპსუმ დოლორ სიტ ამეტ ტექსტის გენერატორის ქართული ვერსია.
ეს თქვენი შექმნილია?
როგორ მუშაობს და თუ თუ არის ანალუგიური მზა სკრიპტები?
September 7th, 2011 at 11:13 am
გამარჯობა გიორგი,
იდეა აღებული არის http://ka.lipsum.com-დან.
სკრიპტი ჩემი შექმნილია და საკმაოდ მარტივია. პრინციპში დასრულებულიც არ არის…
ბაზიდან, რომელშიც შეტანილია ქართული სიტყვების მარაგი ალბათობით იღებს გარკვეულ ოდენობას და გვაძლევს როგორც დიდ ტექსტს.
რთული არ არის. 🙂
September 7th, 2011 at 11:30 am
არის გადმოსაწერად სკრიპტი ამ საიტზე?
ვნახე ლორემ იპსუმ-ის ფლეშის კლასები http://almiruncommonlib.riaforge.org/
AS3-სთვის
September 7th, 2011 at 11:34 am
არა სკრიპტი გადმოსაწერად არ დევს.
October 14th, 2011 at 6:18 pm
MySQL -ის რეპლიკაცია გაცილებთი უკეთესი და გაცილებით საინტერესო რამეა ვიდრე “ფედერირება” ცხრილების… 🙂
October 15th, 2011 at 11:07 am
მაგასაც განვიხილავ როგორც კი ცოტა დრო გამოჩნდება 🙂
November 25th, 2012 at 2:36 am
ფედერაცია კოპირება არ არის ალექს.