Ne farklar MySQL İşlemleri kullanarak eğer dikkate almak zorunda mı?

4 Cevap php

Geçenlerde, onlar daha hızlı koşmak kodu yardımcı ve birisi sadece benim sayfa ve tam sayfa yenileniyor ise yük değildir, örneğin (tam sayfa yüklendiğinde önce yürütme MySQL kod önlemek gibi benim uygulamada işlemler kullanmak gerektiği söylendi Hiçbir MySQL aramalar başlayacak ve sunucu üzerindeki yükü azaltır.)

Ben işlemlere sitemde geçmek istedim, merak ediyorum, ne kadar zor bu olacağını ve ne gibi değişiklikler yapmak zorunda kalacak?

Herhangi bir fark olsaydı da, ben, mysql_* karşıt olarak PDO kullanarak ediyorum?

4 Cevap

İşlemler, web uygulamalarında, genel olarak Atomicity ve Isolation için kullanılır.


They don't "prevent MySQL code from executing before a whole page has loaded" : MySQL queries are still executed when you call mysql_query (or any equivalent using PDO or mysqli_*). But they will all be "cancelled" if you do not commit the transaction.

Onlar da "run code quicker" yardım ile yapmak için bu kadar yok; bazen bu etkiye sahip olsa bile, bu açıkça sorguları bir grup için bir hareket kullanmak istemiyorsanız (resulting in only one transaction), MySQL örtülü her sorgu için bir işlem kullanacağız çünkü sadece bulunuyor (resulting in several transactions, which might put some additionnal load on the DB server)

Notlar:

  • InnoDB gibi - Tabii, bu işlemleri destekleyen bir DB motoru kullanıyor.
  • "hızlı" noktası, ben bunu birkaç kez gördüm; Eğer bu yola gitmek istiyorsanız, daha hızlı ne olduğunu bilmek, profil zorunda anlamına gelir (ya da belki de sunucu üzerinde yük meselesi oldu - ama ben daha ASİT fazla hız gerekli özel durumlarda, oldu özel durum!)


Using PDO, mysql_*, or mysqli_* shouldn't make much of a difference, here -- even if it's recommended not to use mysql_* (old, and doesn't support some features of MySQL >= 4.1, such as prepared statements).

Bir RDBMS'yi kullandığınızda Aslında, işlemleri already kullanıyorsunuz. Eğer explicit işlemler başladığınızda hakkında ve bitiş konum sürece Ancak, dolaylı olarak ayrı bir işlem başlatmak ve bitirmek için her SQL deyimi izin veriyorsun. Bu aynı zamanda "otomatik tamamlama" denir.

İşlemler birden çok SQL deyimleri tarafından değişikliklerin mantıksal setleri yapmak için iyi bir araçtır, bu nedenle taahhüt veya geri alma bir birim gibi değişiklikler bütün seti, ve değişikliklerin tutarlı bir durumda veritabanı terk sağlayabilirsiniz. İşlemler öncelikle performansını artırmak için amaçlanmamıştır.

Herhangi bir işlem başlatmak ve bitirmek için küçük bir havai var. Her deyim için yük üstlenmeden, yüksek hacimli değişiklikler için örtülü hareketleri kullanırsanız bu büyütülür. Ayrı bir işlem örtülü, bir toplu veri yükünü gerçekleştirmek için her INSERT INSERT tabloların binlerce çalıştırmak Örneğin bu anlamlı olur. Diğer durumlarda, işlemler kullanarak değil, karşı işlemleri kullanmanın performans avantajı özellikle bir "pay-nothing" mimarisi vardır PHP gibi bir dil, saçmadır.

İşlemler ASİT, sizin "kodu daha hızlı" yapmak değil sağlamak.

Eğer bir şey, onlar yavaş yapacağız. Ben böyle bir sonuca varmadan önce işlemleri üzerinde daha fazla araştırma yapmanızı öneririm.

Ben MySQL işlem hızının farkında değilim ama SQLite'ta genellikle daha hızlı işlemler kullanmak için, ben inanıyorum ancak MySQL onlar sizi yavaşlatır gerektiğini söyledi.

Yapmanız gereken değişikliklerle ilgili, iyi ... Neredeyse yok:

BEGIN TRANSACTION
$result = [execution of several queries]
if $result fails -> ROLLBACK, else COMMIT

Ben de size mysqli'nin veya MySQL üzerinde PDO kullanmanızı öneririz.