İlişkisel mantıkla ilgili değilseniz, gerçekten hızlı okuma hızı istiyorsanız ve bir RDBMS ile çalışmaya hazırsanız, önyargılı olarak MySQL demeye teşebbüs ederim. Neden ???
MyISAM depolama motoru, daha iyi performans için tablonun fiziksel yapısının artırılmasına olanak tanıyan bir seçeneğe sahiptir. Bu seçenek nedir? ALTER TABLE seçeneği ROW_FORMAT.
Örneğin, MySQL Veritabanı Tasarımı ve Ayarlama kitabı 72,73. Sayfalarda ROW_FORMAT = FIXED kullanılmasını önerir. Bu, tüm VARCHAR alanlarını dahili olarak CHAR'a dönüştürecektir. MyISAM tablosunu büyütür, ancak buna karşı yürütülen SELECT'ler çok daha hızlı olur. Ben şahsen bunu kanıtlayabilirim. Bir zamanlar 1.9GB'lık bir masa vardı. Biçimi ALTER TABLE ile değiştirdim tblname ROW_FORMAT = FIXED. Masa 3,7GB oldu. SELECT'lerin buna karşı hızı, başka bir şey geliştirmeden veya değiştirmeden% 20-25 daha hızlıydı.
Veriler içeren bir MyISAM tablonuz zaten varsa ne olur? MyISAM tablosunda bulunan verilere dayanarak önerilen sütun tanımları için metrikler alabilirsiniz. Hangi metrikler bu metrikleri sunar?
SELECT * FROM tblname PROCEDURE ANALYSE();
PROSEDÜR ANALİZİ () Bu veriler gösterilmez. Her sütunun değerini okuyacak ve sütun tanımlarını önerecektir. Örneğin, değerleri 1-4 olan bir tür sütununuz varsa, bu 4 değerin ENUM'unu kullanarak önerilebilir. Daha sonra aynı miktarda yer kapladıkları için (1 bayt) TINYINT veya CHAR (1) kullanmayı seçebilirsiniz.
Dikkate alınması gereken başka bir şey var: NoSQL DB kullanmayı düşündüğünüzden, MyISAM'ı NoSQL tarzında kullanmayı hiç düşündünüz mü? Bu oldukça mümkün. Bahsettiğim aynı kitabın 175. sayfasında ilişkisel bagaj olmadan bir tablo okumak için HANDLER yapılarının kullanılması önerilmektedir . Aslında, sayfa 175 bu örneği vermektedir:
CREATE TABLE customer_mileage_details
(
customer_id INT NOT NULL,
ff_number CHAR(10) NOT NULL,
transaction_date DATE NOT NULL,
mileage SMALLINT NOT NULL,
INSERT(customer_id),
INSERT (ff_number,transaction_date)
) ENGINE = MYISAM;
Bu tablo milyonlarca satır içeriyor. Aşağıdaki gereksinimleri içeren bir veri analizi uygulaması oluşturmanız gerektiğini varsayalım:
- Bilgi bloklarını olabildiğince çabuk alması gerekir.
- Kullanıcı girdisine veya diğer faktörlere bağlı olarak, büyük olasılıkla tabloda "atlama" olacaktır.
- Eşzamanlılık veya diğer veri bütünlüğü sorunlarıyla ilgilenmez.
- Çapraz uygulama tablasının kilitlenmesi gerekli değildir.
Bu komutlar tablodan hızlı ve kirli okumalara izin verir:
HANDLER customer_mileage_details OPEN;
HANDLER customer_mileage_details READ ff_number FIRST WHERE ff_number=('aaetm-4441');
HANDLER customer_mileage_details READ NEXT LIMT 10;
HANDLER customer_mileage_details CLOSE;
Umarım bu düşünce için yiyecek verir. Lütfen içine bakın.
UYARI
Bu yazıyı yazmamla ilgili çok ironik olan şey, HANDLER'in Percona Server ikili dosyalarında kullanılması ve kullanımının güncel olmadığını düşünmesi hakkında daha önce bir yazı yazmamdı . Bu eski görevden bu yana, HANDLER yapılarını destekleyen bir şey yazacağımı hiç düşünmemiştim. Şimdi düzeltilmiş duruyorum.