BEYAZMASTER adlı üyeden alıntı
Üstadım gene çok komplike bilgiler paylaşmışsınız, tekrar çok teşekkür ederim.Söylediklerinizi değerlendiremiyorum zira kullandığınız terimlerin nelere karşılık geldiğini dahi bilmiyorum şu anda...
Önce onları öğrenmem gerek değerlendirme yapabilmem için...
Zamanla öğrenmeye çalışacağım...
Tercihim belki öğrendikten sonra da değişmeyebilir ama konuya tam hakim olmak için öğrenmek gerek...
Sizce 50.000 işletme için çoğu char (255 karakter altındaki) 250 sütunluk 1'er kayıt satırının toplamı büyük bir veri midir?
Tümünü 1 tek veri tabanında bulundurmak uygun mudur?
Veri merkezi (hostingi kasdediyorsunuz sanırım) ve domain/ler aynı firmada bulunuyor ise...
Kesinlikle büyük veri değildir.
Çözüm için yapılacak listeyi yazmıştım.
1 - Mevcut bir DB'ni export, import edip, tüm tablolara discriminator eklemen.
import ettikten sonra (oracle syntax yazıyorum) ;
alter table_name add discriminator varchar2(50 char);
alter table_name add deleted numner(1) default 0;
2 - php ile yazıyorsun sanırım cron/scheduler job kullanmak gerek.
Örnek bir kütüphane : https://github.com/lavary/crunz
3 - Bu kütüphane ile her saat başı çalışacak bir process yazacaksın.
Her saat başı Cron expression : 0 0 0/1 1/1 * ? *
Ref for cron expression : http://www.cronmaker.com/
Yada Kütüphanedeki kod olarak aynı kullanım : her saat 'in 10. dakikasında çalış gibi
00:10
01:10
02:10
gibi.
// ...
$task = $schedule->run(PHP_BINARY . 'collect-data-from-distributed-dbs-to-common-db.php');
$task
->hourlyAt('10');
// ...
Buradaki işi yapmayı kolaylaştırmak için common db'de bir tane tablo oluşturup, 10 tane veri tabanının bilgilerini tutun.
//oracle syntax'ıdır. siz mysql syntax ile yazarsınız.
create table dist_city_dbs {
city_name varchar2(50 char) not null unique,
db_conn_info varchar(255 char) not null
}
Örnek -> 'ANKARA', 'server=217.10.12.231;uid=ankara_db;pwd=ank_123_db12e;database=ankara'
collect-data-from-distributed-dbs-to-common-db.php -> dosyası içerisinde db lere bağlanıp, veri çekip, ortam db ye yazma işi yapacaksınız.
//pseudo kod
//select city_name, db_conn_info from dist_city_dbs order by city_name asc -> dist_city_dbs tablosundaki veriyi çekin
//tablodan gelen veriyi loop içerisinde dönün.
loop içinde sırasıyla;
- common db'deki verir çekilecek tabloya update işlemi yapılır.
update common-db.table_name set deleted = 0 where discriminator = city_name;
- db_conn_info değeri ile uzaktaki "ANKARA" şehri DB'sine bağlan
- select * from table_name order by ID asc; //ID değeri string ise create_date asc gibi bir alan kullanın
- uzaktaki şehir db bağlantısını kapat
- gelen veriyi common-db'deki aynı tabloya insert edilecek. discriminator değer olarak city_name set edilmeli.
- common-db bağlantısını kapat
Tüm işlem bu kadar.. Bu hali ile de geliştirilecek ve hataya açık bir yönü var.
Ama ilk adımı atın sonrası zaten hata ile karşılaşıldıkça çözülür.