Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 13183|Yanıt: 0

[Kaynak] MyISAM, MySQL veritabanı depolama motoru ile InnoDB arasındaki farktır

[Bağlantıyı kopyala]
Yayınlandı 13.04.2020 09:53:49 | | |
MySQL söz konusu olduğunda, MyISAM ve InnoDB'yi anlamak zor olur; bunlar en bilinen ve yaygın kullanılan MySQL depolama motorlarından ikisidir. Bugün size MySQL'de MyISAM ile InnoDB arasındaki farkı anlatacağım...

MyISAM nedir?

MyISAM, MySQL ilişkisel veritabanı yönetim sistemi için varsayılan depolama motorudur (5.5 öncesi)。 Bu MySQL tablo depolama yapısı, eski ISAM kodundan birçok faydalı özelliği genişletir. MySQL'in yeni sürümünde, InnoDB motoru, işlemler, referans bütünlüğü ve daha yüksek eşzamanlılık açısından avantajları nedeniyle MyISAM'ın yerini geniş çapta almaktadır.
Her MyISAM tablosu, sabit diskteki üç dosyaya karşılık gelir. Üç dosyanın da aynı dosya adı vardır, ancak tür amaçlarını belirtmek için farklı uzantılara sahiptirler: .frm dosyası tablonun tanımını taşır, ancak bu dosya MyISAM motorunun bir parçası değil, sunucunun bir parçasıdır; .MYD tablonun verilerini tutar; .MYI ise tablonun indeks dosyasıdır.

InnoDB nedir?

InnoDB, MySQL için bir başka depolama motorudur ve MySQL AB tarafından yayımlanan yeni standart sürümü tüm ikili kurulum paketlerinde yer almaktadır.5.5 sonrası varsayılan depolama motoru olarak。 Diğer depolama motorlarına göre avantajları, ACID uyumlu işlemleri (PostgreSQL'e benzer) ve parametre bütünlüğünü (yani yabancı anahtarları desteklemek) desteklemektir.

Oracle Corporation, Ekim 2005'te Innobase'i satın aldı. Innobase, çift kimlik doğrulama yetkilendirmesi kullanır. GNU kullanılarak dağıtılır ve InnoDB'yi ticari yazılıma entegre etmek isteyen diğer grupların da lisans almasına olanak tanır.

En popüler depolama motorları MyISAM ve InnoDB'dir. MyISAM ile InnoDB arasındaki temel farklar performans ve işlem kontrolüdür. MyISAM, erken dönem ISAM'ın (Indeksli Sıralı Erişim Yöntemi, ISAM MySQL 5.0'dan sonra desteklenmemektedir) genişletilmiş bir uygulamasıdır; ISAM, okuma sıklığının yazma frekansından çok daha yüksek olduğu durumlar için tasarlanmıştır, bu nedenle ISAM ve sonraki MyISAM destekleri dikkate almaz, TPM hariç tutulur, işlem kayıtlarına ihtiyaç yoktur, ISAM sorgu verimliliği yüksektir ve bellek tüketimi çok küçüktür.
MyISAM bu avantajları devralırken, zamanla uyumlu çok sayıda faydalı yeni özellik ve ilgili araç ile devam eder. Örneğin, eşzamanlılık kontrolü göz önünde bulundurulduğunda, tablo seviyesinde kilitler sağlanır ve MyISAM kendisi hata toleransını desteklemese de, myisamchk üzerinden hatalardan sonra iyileşmek için kullanılabilir. MyISAM her tablo için kendi bağımsız depolama dosyalarını (MYD veri dosyası ve MYI indeks dosyası) kullandığından, yedekleme ve geri yükleme çok pratik (kopya üzerine yazma yeterlidir) ve ayrıca çevrimiçi kurtarmayı destekliyor. Diğer depolama motorlarına kıyasla, MyISAM tabloları kontrol etmek ve onarmak için çoğu araca sahiptir. MyISAM tabloları sıkıştırılabilir ve tam metin aramasını destekler. İşlem açısından güvenli değiller ve yabancı anahtarları desteklemiyorlar, bu yüzden uygulamanız işlem gerektirmiyorsa ve sadece temel CRUD işlemlerini yönetiyorsa, MyISAM en doğru yoldur.
InnoDB, yüksek eşdeğerli okuma ve yazma durumları için tasarlanmıştır; MVCC (Çok Versiyonlu Eşdeğerlilik Kontrolü) ve satır seviyesinde kilitler kullanarak ACID-uyumlu işlem desteği sağlar. InnoDB, yabancı anahtar referans bütünlüğünü destekler ve hata kurtarma yeteneklerine sahiptir. Ayrıca, InnoDB'nin performansı aslında oldukça iyidir, özellikle büyük miktarda veri işlenirken, resmi terimlerle: InnoDB'nin CPU verimliliği diğer disk tabanlı ilişkisel veritabanı depolama motorlarıyla karşılaştırılamazdır. Ancak, InnoDB'nin yedekleme ve kurtarma işlemi biraz daha sorunludur, ancak 4.1 veya daha sonraki sürümde sağlanan Mulit-tablespace desteğini kullanmıyorsanız, çünkü MyISAM'ın aksine, InnoDB'nin veri dosyaları her tabloya bağımsız olarak karşılık gelmez. Bunun yerine, paylaşılan tablo alanı kullanılır ve basit kopya üzerine yazma yöntemi onun için uygun değildir; MYSQL durdurulduktan sonra veri geri yüklenmelidir. Tablo başına tablo alanları kullanmak, her tabloyu ayrı bir tablo alanı dosyasına karşılık getirir, durum çok daha basittir. BDB tipleriyle aynı özelliklere sahiptir ve yabancı anahtarları da destekler. InnoDB tabloları hızlı ve BDB'den daha zengin özelliklere sahiptir, bu yüzden işlem açısından güvenli bir depolama motoruna ihtiyacınız varsa tavsiye edilir.

Genel olarak, işlem desteği gerekiyorsa ve yüksek eşzamanlı okuma ve yazma sıklığına sahipse InnoDB iyi bir seçimdir. BDB, eşzamanlı okuma ve yazma sıklığı yüksek değilse değerlendirilebilir, ancak BDB artık MySQL 5.1 ve sonraki sürümlerde desteklenmeyecektir. Bu seçenek artık yok

Varsayılan olarak, InnoDB işlemleri açıktır (otomatik commit = 0 ayarlanır), bu da her kayıt eklendiğinde InnoDB tablosunun bunu ayrı bir işlem olarak ele alacağı anlamına gelir. Yani 10.000 kayıt ekleyip işlemi kapatmazsak, InnoDB tür tablosu bunu 10.000 işlem olarak ele alır ve bu anda toplam ekleme süresi çok fazladır, bu zaman önce işlemi kapatıp sonra eklememiz gerekir, böylece hız çok hızlı olur. Heap ve BDB (Berkeley DB) için ise, nispeten konuşursak, penetrasyon oranı önceki ikisi kadar iyi değildir, ancak bazı durumlarda, Heap depolama motoru hâlâ çok uygulanabilir; verileri bellekte saklar ve disk I/O beklediği için son derece hızlıdır. Ancak bu bir bellek depolama motoru olduğu için, yapılan değişiklikler sunucu yeniden başladıktan sonra kaybolur. Heap, MySQL'in ilk işlem amaçlı güvenli depolama motoru olduğu için BDB'yi test için kullanmak için harika bir yer. Berkeley DB veritabanı kütüphanesi temelinde inşa edildiği için işlem açısından da güvenlidir, ancak BDB açıkça InnoDB kadar popüler değildir, çünkü MySQL'deki işlemleri destekleyen depolama motorlarının çoğu MVCC veya satır seviyesinde kilitli depolama motorları ararken, BDB sadece Sayfa seviyesinde Kilit'i destekler.

InnoDB motoru

InnoDB, geri dönüşleri destekleyen ve büyük miktarda veri işlenirken yüksek performanslı hizmetler sunmak üzere tasarlanmış işlemsel bir depolama motorudur; ayrıca çalışma zamanında veri ve indeksleri tamponlamak için bellekte tampon havuzları oluşturur.

InnoDB motoru avantajları:

1. İşlem işleme ve ACID işlem özelliklerini destekliyor;

2. SQL standardının dört izolasyon seviyesi gerçekleştirilir;

3. Sıra seviyesinde kilit ve yabancı anahtar kısıtlamalarını destekler;

4. Veri kurtarma için işlem kayıtlarını kullanabilirsiniz.

5. Kilit seviyesi sıra kilitidir; bu yüksek eşzamanlılıkla sık tablo değiştirme için uygundur ve yüksek eşzamanlılık MyISAM'den daha iyidir. Dezavantajı ise sistem tüketiminin büyük olmasıdır.

6. Indeks sadece kendini önbellemekle kalmaz, aynı zamanda MyISAM'dan daha fazla bellek gerektiren verileri de önbellekler.

InnoDB motorunun dezavantajları:

Tablodaki satır sayısını kaydetmediği için, COUNT istatistikleri kullanılarak tüm tablo taranır.

MyISAM motoru

MyISAM, MySQL 5.5.5'ten önceki varsayılan motordur ve hızlı okuma için tasarlanmıştır.

MyISAM Motor Avantajları:

1. Yüksek performanslı okuma;

2. Tablodaki satır sayısını kaydettiği için, COUNT istatistikleri kullanıldığında tüm tablo taranmaz;

MyISAM motorunun dezavantajları:

1. Kilit seviyesi masa kilididir ve saat kilidinin avantajı, üst tavan küçük ve kilidin hızlı olmasıdır; Dezavantajları ise kilidin granülerliğinin büyük olması, kilit impulsunun yüksek olasılığı ve aynı zamanlılık kapasitesinin düşük olmasıdır; bu da sorgu tabanlı hizmetler için uygundur.

2. Bu motor işlemleri veya yabancı anahtarları desteklemez.

3. INSERT ve UPDATE işlemlerinin tüm tabloyu kilitlemesi gerekir;

4. Tablodaki satır sayısını saklar, böylece TABLODAN COUNT(*) SEÇTIĞInde, tüm tabloyu taramadan sadece kaydedilen değerleri doğrudan okuması yeterlidir.

Uygulanabilir senaryolar

MyISAM şu amaçlar için uygundur: (1) çok sayıda sayım hesaplaması yapmak; (2) Nadir yerleştirme ve çok sık sorgulamalar; (3) İş yok.

InnoDB şu amaçlar için uygundur: (1) yüksek güvenilirlik gereksinimleri veya işlemler; (2) Tablo güncellemeleri ve sorgulamalar oldukça sık olur ve tablo kilitlenme olasılığı nispeten yüksektir.

Tablo karşılaştırması

ÖzelliklerMyISAMYığınBDBInnoDB
İşlemlerDesteklenmiyorDesteklenmiyorBirine  destek olmakBirine  destek olmak
Kilit granülerliğiMasa kilidiMasa kilidiSayfa Kilidi (sayfa, 8KB)Kilit
depolamaBölünmüş dosyalarAnıdaHer tablo için bir dosyaTablo Alanı
İzolasyon seviyesideğildeğilTaahhüt OkumaHepsi
Taşınabilir formatolmakYokdeğilolmak
Alıntı tamlığıdeğildeğildeğilolmak
Veri birincil anahtarıdeğildeğilolmakolmak
MySQL veri kayıtlarını önbellek ederdeğilEvetEvetEvet
Kullanılabilir -likTam sürümTam sürümMySQL-MaxTam sürüm


Detaylarda bazı farklılıklar


1. InnoDB, MySQL 5.6'dan (deneysel) beri desteklenen TAM METIN tipindeki indeksleri desteklemez.

2. InnoDB, tablodaki belirli satır sayısını kaydetmez; yani tablodan select count() çalıştırılırken, InnoDB tüm tabloyu taramak için kaç satır olduğunu hesaplamak zorundadır, ancak MyISAM sadece kaydedilen satır sayısını okumak zorunda kalır. Count() ifadesi bir where koşulu içerdiğinde, işlem her iki tablo için de aynıdır.

3. AUTO_INCREMENT türdeki alanlar için InnoDB yalnızca o alandan oluşan bir indeks içermelidir, ancak MyISAM tablosunda diğer alanlarla ortak bir indeks oluşturabilirsiniz.

4. DELETE FROM tablosunda InnoDB tabloyu yeniden oluşturmaz, satır satır silecektir.

5. MASTER TABLOSUNDAN YÜKLEME işlemi InnoDB için çalışmaz, çözüm önce InnoDB tablosunu MyISAM tablosuna değiştirmek, veriyi içe aktarmak, ardından InnoDB tablosuna çevirmektir, ancak ek InnoDB özellikleri (örneğin yabancı anahtarlar) kullanan tabloya uygulanamaz.

6. Ayrıca, InnoDB tablosunun satır kilidi mutlak değildir; MySQL SQL bir ifade çalıştırırken taranacak aralığı belirleyemezse, InnoDB tablosu da tüm tabloyu kilitler.

7. InnoDB tam metin indekslemeyi desteklemezken, MyISAM destekler. Tam metin indeksleme, char, varchar ve metindeki her kelimenin ters sırayla bir indeks oluşturulmasını ifade eder (durdurma kelimeleri hariç). MyISAM'ın tam metin indeksi aslında işe yaramaz, çünkü Çince kelime segmentasyonunu desteklemez ve kelime segmentasyonundan sonra kullanıcı tarafından veri tablosuna yazılmak zorunda, 4'ten az Çince karakteri olan kelimeler ise durdurma kelimeleri gibi göz ardı edilir.





Önceki:Deneysel soruları bir derle getirin
Önümüzdeki:SQL statement to Varchar type
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com