Saklı yordamlar php / mysql dünyada bir no-go?

10 Cevap php

Ben another question of mine için alınan bir cevap bölümünü alıntı yapıyorum:

In the PHP/MySQL world I would say stored procedures are no-go

Ben bilmek istiyorum: bu kadar mı? Neden? Neden değil?

[Değiştir] aklımda belirli bir ihtiyaç olmadan genel bir soru olarak bu anlama [/ edit]

10 Cevap

Ben geliştirmek ve büyük bir PHP / MySQL uygulama korumak. Burada saklanan prosedürleri ile benim deneyim.

Zamanla bizim uygulama çok karmaşık büyüdü. Ve php tarafında tüm mantığı ile, bazı işlemler 100 üzerinden kısa Sorgu ile veritabanını sorgulamak istiyorum.

MySQL performans hala kabul edilebilir, ama büyük değildi o kadar hızlıdır.

Biz karmaşık operasyonlar için saklanan prosedürleri için bazı mantık taşımak için yazılımın en son sürümü karar.

Nedeniyle biz PHP ve MySQL arasında ileri ve geri veri göndermek zorunda olmadığını aslında önemli bir performans kazancı elde yaptım.

PL / SQL modern bir dil değil ve hata ayıklama zor olduğunu burada diğer posterleri ile katılıyorum.

Bottom Line: procedure belirli durumlar için harika bir araçtır. Ama ben iyi bir nedeniniz olmadıkça bunları kullanarak tavsiye etmem. Basit uygulamalar için, saklanan prosedürler güçlük değer değildir.

MySQL ile saklı yordamları kullanırken, sık sık PHP mysqli arayüzü ve değil normal mysql arabirimi kullanmak gerekecektir.

Bunun nedeni, saklı prosedürler genellikle 1'den fazla sonuç kümesi döndürür olmasından kaynaklanmaktadır. Eğer varsa, mysql API idare edemez ve hata alırsınız.

Mysqli arayüzü, bu birden çok sonuç kümesi işleme fonksiyonları vardır, örneğin mysqli_more_results ve mysqli_next_result gibi fonksiyonlar.

Eğer saklı yordam tüm set herhangi bir sonuç dönerseniz saklı yordam 1 sonuç her gerçek yürütme için ayarlayın ve sonra 1 ek bir oluşturur gibi, o zaman döndü kasıtlı olarak, bu API'leri kullanmak için sonuç gerektiğini aklınızda tutun saklı yordam.

Eğer onları düşünün yapar aklında belirli bir ihtiyaç var mı? Saklı yordamlar insanlar bunları kullanmak istemiyorum bu yüzden genellikle bulunuyor, çok daha az taşınabilir "düz" SQL daha vardır. Ayrıca, PL / SQL adil bir pay yazılı olan, ben kod yazma usul yolu karmaşıklık ekler ve sadece çok modern ve test edilemez olduğunu söylemeliyim. Onlar optimize etmek gerekir, bazı özel durumlarda kullanışlı olabilir, ama kesinlikle iki kere düşünmek istiyorum. Jeff vardır similar opinions.

O zaman% 99, sizin en büyük darboğaz olan veritabanına yük ekler çünkü ben genellikle uzak saklı yordamlar uzak kalmak. Yeni bir php sunucusu ekleyerek MySQL db çoğaltmak hale göre bir şey değildir.

Bu öznel bir sorudur.

Ben şahsen PHP içinde tüm hesaplamaları içerir ve sadece gerçekten bir tablo olarak MySQL kullanabilirsiniz.

Ama, bunu devam edin ve bunu, sonra tüm yollarla depolanmış prosedürleri kullanın daha kolay olduğunu hissediyorum.

Ben "İyi bir neden olmadan onları kullanmak etmeyin" derdi, "saklı prosedürler no-go" demezdim.

MySQL saklanan prosedürler sadece uygulamanızı zorlaştırıyor onları korumak, özellikle korkunç bir sözdizimi (Oracle ve MSSQL de oldukça korkunç) var.

Bunu yapmak için gerçek bir (ölçülebilir) bir nedeniniz varsa, aksi takdirde yok, bir saklı yordamı kullanın etmeyin. O zaten benim görüşüm.

Mysql ile saklanan prosedürleri fobi (mysqls saklanan prosedürleri büyük ölçüde eksiktir Postgresql ve hatta MSSQL göre) kısmen ezici bir çoğunlukla güçlü olmak değil, belki var.

Artı: Onlar kolay birden fazla dilden onunla arabirim olun.

Biri "using stored procedures is bad because its not portable to different databases" bu tabii onlar da onlar mysql kullanılarak gerektiğini düşünüyorum söyleyerek anlamına gelir, onlar veritabanlarını geçmek olasıdır düşünüyorum anlamına belirtiyor eğer.

Bu Orm'un bu gün kullanmak için popüler, ama ben şahsen ORM bir BadThing olduğunu düşünüyorum (Question:82882)

Ben saklı yordamları kullanarak size daha sonra bir sproc save_user ($ attr oluşturabilir, aynı verileri güncelleştirmek veya eklemek için aynı SQL kod yığın kullanmak nerede herhangi gibi, bazı uygulamalarda soyutlama sunabilir düşünüyorum ..... ) yerine tüm yere kendini tekrar.

Sözdizimi tüylü ve senin MSSQL ve Oracle SPROCs kullanılır, eğer Fustrate olabilir farklılıklar vardır anlaştılar.

Ayrıca saklanan prosedürleri sürüm 5.0 önce Mysql desteklenmiyor olduğunu farkında olmalıdır. http://dev.mysql.com/doc/refman/5.0/en/stored-routines.html Ayrıca, saklı prosedürler uygulanması biraz garip olmak eğiliminde. MySQL 5.1 Ben MySQL ile saklanan prosedürleri daha fazla kullanımını görmek vahşi kırpma başlıyor Şimdi.

Ben saklanan prosedürleri sınırlı kullanımı yapmak ve iyi çalışıyor. Ben onların e-comm sitesinde çalışan, benim şirketleri müşterilerinden biri için kurşun dev duyuyorum. İstemci bir stok sistemi vardır, biz onların sisteminde saklanan bir dizi prosedürün uygulanmasını ve onunla iletişim kurmak için bir API inşa. Bu soyut kendi veritabanına bize izin verdi ve onlar saklanan prosedürleri mantığı olabilir. Basit ama çok iyi iş gereksinimi bir araya geldi.