Saklanan prosedürleri MySQL

7 Cevap php

Ben tavsiye gerekir benzersiz bir sorunu var.

SQL Server ile asp.net uygulamaları yazıyorum geri son 10 yıldır biter. Bu süre içinde, ben de bazı PHP uygulamalar yazılı, ama çok değil.

Ben PHP benim asp.net uygulamalar bazı taşıma için gidiyorum ve bir konunun biraz içine çalıştırmak. Asp.net dünyada, genellikle herhangi bir veri tabanları erişirken, görünüm veya saklı yordamları kullanarak bunu yapmanın tercih edilen yol olduğu anlaşılmaktadır.

Bazı PHP / MySQL kitap okuma oldum ve ben mysql saklanan prosedürleri kullanarak tavsiye olmadığı izlenimini almak başlıyorum. Ben tavsiye bu kelimeyi kullanarak tereddüt, ama ben almak hemen kesilmesi bulunuyor.

Yani, ben arıyorum tavsiye temelde, doğru ya da yanlış mıyım?

PHP geliştiricileri tüm saklanan prosedürleri kullanıyor musunuz? Ya da kaçındı bir şeydir?

Şimdiden teşekkürler.

7 Cevap

Whether to use Stored Procedures or not is more of a religious or political discussion at a bar than not.
What needs to be done is clearly define your application layers and not step over those boundaries. Stored procedures have several advantages and disadvantages over doing queries outside of the database.

Avantaj 1: Saklı yordamlar modüler vardır. Bu bir bakım açısından iyi bir şeydir. Sorgu sorun uygulamanızda ortaya çıktığında, büyük olasılıkla bu GUI kod birçok çizgiler içinde gömülü gömülü bir sorgu daha bir saklı yordam gidermek için çok daha kolay olduğunu kabul ediyorum.

Avantaj 2: Saklı yordamlar ayarlanabilir vardır. Lütfen arayüzü için veritabanı iş kolu prosedürleri sahip olarak, bir sorgunun performansını artırmak için GUI kaynak kodunu değiştirmek için ihtiyacı ortadan kaldırır. Katılmak yöntemleri açısından, farklı tablolar, vb - - ön uç arayüzü şeffaf değişiklikler saklı prosedürleri yapılabilir.

Avantaj 3: istemci tarafında Saklı yordamlar soyut veya ayrı ayrı sunucu tarafı fonksiyonları. Bu GUI kodu aracılığıyla sorgu oluşturmak için daha bir yordamı çağırmak için bir GUI uygulaması kodlamak için çok daha kolaydır.

Avantajı 4: Saklı prosedürleri genellikle veritabanı geliştiriciler / yöneticileri tarafından yazılmıştır. Bu rolleri tutan kişiler genellikle daha verimli sorgular ve SQL cümleleri yazma deneyimlidir. Bu uygulamanın işlevsel ve grafik sunum parçaları becerilerini kullanmak için GUI uygulama geliştiricileri boşaltır. Onlar en uygun oldukları görevleri yerine insanları varsa, o zaman sonuçta daha iyi bir genel uygulama üretecek.

Tüm bu göz önüne çeşitli dezavantajları vardır.

Disadvantage 1: Applications that involve extensive business logic and processing could place an excessive load on the server if the logic was implemented entirely in stored procedures. Examples of this type of processing include data transfers, data traversals, data transformations and intensive computational operations. You should move this type of processing to business process or data access logic components, which are a more scalable resource than your database server.

Disadvantage 2: Do not put all of your business logic into stored procedures. Maintenance and the agility of your application becomes an issue when you must modify business logic in Sp language. For example, ISV applications that support multiple RDBMS should not need to maintain separate stored procedures for each system.

Disadvantage 3: Writing and maintaining stored procedures is most often a specialized skill set that not all developers possess. This situation may introduce bottlenecks in the project development schedule.

Herhalde bazı avantajları ve dezavantajları, yorum yapmaktan çekinmeyin kaçırmış.

MySQL sürümünde 5 kadar saklanan prosedürleri alamadım çünkü aynı zamanda olabilir. Eğer hazır deyim ederseniz sorun olmalı ... sadece inline SQL kullanmayın

Birkaç yıl önce bir PHP / MySQL proje için saklı yordam kod adil bir miktar (~ 3K hat) yazma sona erdi. Benim durumumda:

  • MySQL saklanan prosedürleri muhtemelen size performans-bilge yardım edecek değildir.
  • MySQLi ile hazırlanan tablolar üzerinden SP'ler yürütülüyor baş ağrılarına neden olabilir.
  • Dışarı soyut ortak etmek zor olabilir desen-Kendimi kendime ben sevdim daha tekrarlayarak bulundu.
  • MySQL sürümüne ve yapılandırmasına bağlı olarak, SP'ler oluşturmak için SUPER ayrıcalıklarına gerekebilir.

Saklı prosedürleri kullanır kod port ediyorsanız, onları tutmak için kolay olabilir. PHP ve MySQL ile bunları kullanmak kesinlikle mümkün ve ben şahsen tam olarak, inadvisable demezdim. Ben sadece muhtemelen sıfırdan yeni bir PHP proje başlangıç ​​olsaydı onları yeniden kullanmak için tercih etmem.

Saklı prosedürler - genellikle - çaba tam bir atıktır.

Şüphe, aslında performansını ölçmek. Sık sık saklanan prosedürleri hiçbir tanınabilir yararına karmaşıklığı eklemek olduğunu göreceksiniz. Siz SP adlı hiçbir performans artışını olabilir.

Bazıları çok "Önemli" olduğunu düşünüyorum. Bu aslında oldukça kelime oyunu ya da tartışmanın daha performansını ölçmek için önemlidir.

Birçok (en?) Webapps enjeksiyon açıklarını / etc dikkat çekmek için bir veritabanı soyutlama katmanı kullanın.

If you want one for your own app, take a look at PDO. Here is a big tutorial about how to use it: http://www.devshed.com/c/a/PHP/Using-PDO-Objects-in-PHP-5/

Genel olarak, ben çok sevmediğim işlemleri saklanır çünkü:

  1. Bu olmamalı iş mantığı kayma çok kolaydır.
  2. Saklanan prosedürler güncellemeleri gerektiren uygulama güncellemeleri bir önceki sürüme dönmek zorunda, özellikle, senkronize bir acıdır.

Herhangi bir veritabanı manipülasyon için, ben http://www.doctrine-project.org gibi bir PHP ORM çerçeve veya CakePHP gibi ORM içeren bir çerçeve ile gidiş tavsiye. Sen daha kolay SQL Server ve MySQL arasındaki geçiş için güçlü olmak bir avantaj olacak.

İşte MySQL saklanan prosedürleri dengeli ve bilinçli bir yazıdır: http://www.linuxjournal.com/article/9652?page=0,0

Önemli boyutta herhangi bir veritabanı ve uygulama bir "zaman kaybı" ya da "korumak için sert" veya "gerçek bir yarar sağlama" olarak yandan dışarı onları kapatmak için çok akıllıca olacaktır.