PHP, Python, çoklu RDBMS ile Ruby uygulaması

4 Cevap php

Ben eski olmaktan çok uzağım, ancak ben orada bütün bu SQL üreten veritabanı soyutlama katmanları ve tüm bu Orms görünce eski moda hissetmeye başlarsınız. Ben onlara ihtiyacını anlamak, ancak bunların kullanımı normalde ait olmayan yerlere yayılır.

Ben sıkıca SQL nesil veritabanı soyutlama katmanları kullanarak Oracle gibi gerçekten pahalı veritabanlarında atmak, özellikle çoklu veritabanı motorları çalıştırmak gerekir veritabanı uygulamaları yazma doğru yol olduğuna inanıyoruz. Ve bu daha az ya da küresel, sadece bir kaç dil için geçerli değildir değildir.

Sadece basit bir örnek, sorgu sayfalama ve ekleme kullanarak: Oracle birini kullanırken FIRST_ROWS kullanımı ve ipuçları (uygun) APPEND olabilir. Ben mantıklı procedure / Paketleri veritabanı sürü koyarak söz gelişmiş örneklere olabilir gidiyor. Ve bu her RDBMS için farklıdır.

Birçok RDBMS'e yaygın olarak kullanılan özelliklerin yalnızca sınırlı bir dizi kullanarak bir o pahalı ve gelişmiş veritabanı motorları teklifi zorunda olanaklarını istismar değil.

Nasıl birden fazla veritabanı motorları çalıştırmak gerektiğini PHP, Python, Ruby vb uygulamaları geliştirmek yapın: Böylece geri sorunun kalbine alma?

Ben özellikle tek bir RDBMS üzerinde çalışan için yazılmış sorguları kullanabilirsiniz / ayrı işitme nasıl özellikle ilgileniyorum. Oracle, DB2 ve SQL Server ve bunların her biri için bu RDBMS sunduğu tüm özelliklerinden yararlanmak için ayrı bir SQL deyimini yazmak: Eğer 3 RDBMS üzerinde çalışması gerektiğini bir açıklama var demek. Bunu nasıl yapabilirim?

Bir kenara, bu icar, ne bu yolu yürürken size görüşüm? Senin deneyim değdi mi? Neden? Neden değil?

4 Cevap

Bir pasta yemek ve buna sahip, aşağıdaki seçeneklerden birini seçemezsiniz.

  • Sen ve nadir durumlarda size en düşük ortak payda sopa ve saklı yordamlar veya herhangi bir özel uzantıları veritabanı kullanmayan bir el yapımı sorgu için bir ihtiyaç (örneğin performans nedeniyle) olabilir zaman zaman veritabanı soyutlama katmanı kullanın sunduğu. Bu durumda farklı bir RDBMS üzerinde uygulama dağıtımı önemsiz olmalıdır.
  • Pahalı RDBMS tam güç kullanın, ancak uygulama kolayca taşınabilir olmayacağını dikkate almak. Ihtiyaç duyulduğunda zaman taşıma ve bakım önemli çaba harcamak zorunda kalacaklar. Tabii ki tek bir modül ya da sınıftaki tüm farklılıkları özetleyen bir iyi katmanlı tasarımı, bu konuda size yardımcı olacaktır.

Başka bir deyişle bu uygulama birden RDBMS'lerinde dağıtmış ve bilinçli bir seçim yapmak olacak nasıl muhtemel olduğunu düşünmelisiniz.

Çeşitli RDBMS'lerinde bir çan ve ıslık kaldıraç istiyorsanız, kesinlikle bunu yapabilirsiniz. Sadece standart OO İlkeleri geçerlidir. Sizin sebat katman sağlamak için gereken API ne tür anlamaya.

Sen izomorf sebat adaptör sınıfları bir dizi yazı bitireceğiz. (Veri yüklemek ve saklamak için adaptör yöntemlerini çağırarak edilecektir), model kodu açısından bakıldığında, bu sınıflar aynıdır. Iyi bir test kapsama Yazma kolay olmalı ve iyi testler hayat çok daha kolay hale getirecek. Sebat adaptörleri tarafından sağlanan ne kadar soyutlama karar trickiest parçası olduğunu, ve büyük ölçüde uygulamaya özeldir.

Bu sorun değer olup olmadığını gelince: duruma göre değişir. Eğer daha önce hiç yapmadım eğer iyi bir egzersizdir. Aslında hedef veritabanları nelerdir emin bilmiyorum eğer erken olabilir.

İyi bir strateji başlatmak için iki sebat adaptörleri uygulamak olabilir. Diyelim ki en yaygın arka uç MySQL olacak bekliyoruz diyelim. MySQL için ayarlanmış bir adaptör uygulamak. Seçtiğiniz veritabanı soyutlama kütüphanesini kullanır, ve sadece standart ve yaygın olarak kullanılan SQL özelliklerini kullanan bir saniye uygulayın. Şimdi (her şey seçtiğiniz soyutlama kütüphanesi tarafından desteklenen) arka uçları bir ton destek var, artı mySQL desteği ayarlı ettik. Eğer o Oracle optimize edilmiş bir adaptör sağlamak istiyorsanız karar verirseniz, size rahatca bunu uygulamaya ve uygulama değiştirilebilen veritabanını geri uçlarını desteklemek olduğunu bileceksiniz.

Bir platform için yazılmış kod herhangi bir değişiklik olmadan diğer her işe olsaydı harika olurdu, ama bu genellikle durum böyle değildir ve muhtemelen olmayacak. Ne mevcut çerçeveler yapmak hakkında tüm herkes olabilir olduğunu.

Modern ORMs bile daha fazla "eski moda", ama ODBC bu sorunu gidermez?