Destekle iletişim

E-postayla, genellikle iki gün içinde yanıt veririz.

Google reCAPTCHA, kötüye kullanıma karşı bu gönderimi denetler; bu sırada veriler Google'a aktarılır. Komut dosyası yalnızca bu form açıldığında yüklenir.

← Tüm yazılar

Önbellek ters yönde ölçeklendiğinde

Bu hizmetin önbellek klasöründe dört küçük dosya duruyor. En büyüğü 35 bayt. Hepsi birlikte üç sayaç numarası tutuyor ve istisnasız her sayaç isteğinde okunuyor.

Bu dosyalar, sayım yolu veritabanına dört soru sormak zorunda kalmasın diye var; veritabanı bu sorulara neredeyse her zaman “hayır” yanıtını veriyor. Bu sayaç, sahibinin kendi ziyaretlerini hariç tutuyor mu? Dışarı giden tıklamaları izliyor mu? Site içindeki gezinme yollarını izliyor mu? Kendini yeniden yüklüyor mu? Sayaçların %99'undan fazlasında her yanıt hayır; yanıtın evet olduğu birkaç numarayı tutan bir dosyaya bakmak, dört indeksli sorgudan daha ucuz.

Daha ucuz. Ama aynı zamanda tersine dönebilen türden bir ucuzluk.

2 10 100 1.000 10.000 100.000 etkin 2.218 sayacın tamamı: 0,43 ms dosya: 3 numarada 0,02 ms, 100.000'de 21,4 ms tek indeksli sorgu: her boyutta 0,16 ms

Ne ölçüldü

Aynı soru — “bu sayaç listede mi?” — altı liste boyutunda, iki yoldan soruldu. Dosya yolu: dosyayı oku, JSON'u çöz, numarayı ara. Veritabanı yolu: indeksli bir sütun üzerinde önceden hazırlanmış tek bir sorgu. Her biri iki bin tekrar, beş tur; medyan alındı.

Bugünkü boyutta dosya sekiz kat önde: 0,1630 milisaniyeye karşı 0,0202 milisaniye. Bin numarada ikisi başa baş. On binde dosya on iki kat, yüz binde ise 135 kat daha pahalı, çünkü o noktada her hitte okunup ayrıştırılması gereken 578 kilobaytlık bir dosya söz konusu.

Veritabanı çizgisi yerinden kıpırdamıyor. İki satırda 0,16 milisaniye, yüz bin satırda da 0,16 milisaniye: indeks tam da bunun için var ve o çizginin sıkıcı görünüşünün ardında ne kadar emek saklı olduğunu unutmak kolay.

Rahatsız edici kısım

Kesişme noktası 100 ile 1.000 numara arasında bir yerde. Bu hizmette son otuz günde etkin olan 2.218 sayaç var.

Yani hariç tutma özelliği başarılı olsaydı — sayacı olan herkes “kendi ziyaretlerimi sayma” seçeneğini açsaydı — dosya 2.218 numara içerir, 11 kilobayt yer kaplar ve hit başına 0,02 yerine 0,43 milisaniyeye mal olurdu. Dünkü 18.423 hitle bu, toplamı üç saniye tutacak bir sorgudan kaçınmak için günde sekiz saniyelik iş demek.

Bu optimizasyon, özellik en az kullanıldığında en hızlı. Yavaş bir sorgunun yaptığı gibi yük arttıkça yavaş yavaş kötüleşmiyor. Benimsendikçe kötüleşiyor; kimsenin izlemediği tek eksen de bu, çünkü benimsenmenin artması iyi haber sayılır.

Neden hâlâ duruyor

Çünkü bugün doğru ve biri bunun ne zaman doğru olmaktan çıkacağını yazıya geçirdiği sürece “bugün doğru” olmak bir şeyin gerekçesi olabilir.

Üç dosyada üç numara. Sayım yolunun hızlı olması gereken tek şey olduğu bir makinede, alternatifinden sekiz kat ucuz. Onu şimdi geride bıraktığı sorguyla değiştirmek, bir varsayımla gerekçelendirilmiş daha kötü bir sistem olurdu.

Gereken şey yeniden yazmak değil, bir eşik alarmı. Dosya zaten, bir ayarı değiştiren kod tarafından veritabanından yazılıyor — listenin birkaç yüz kaydı aştığını fark edip bunu söylemenin doğal yeri de orası. Belgelenmiş bir tavanı olan önbellek bir karardır. Tavanı olmayan önbellek ise kimsenin kabul etmediği bir bahistir.

Genel tablo

Bu, dosyada önbelleklemeye karşı bir argüman değil. Bir önbelleğin hangi yönde ölçeklendiğini bilmekten yana bir argüman.

Önbelleklerin çoğu yük altında daha iyi hâle gelir: daha çok istek, daha çok isabet, daha iyi oran. Bu ise öbür türden. İstek başına maliyeti tuttuğu veri miktarına bağlı ve tuttuğu şey, hizmetin teşvik etmeye çalıştığı şeyle birlikte büyüyor. Her okuma, şu anda sayılan ziyaretçiyle hiçbir ilgisi olmayan 2.215 kayıt dâhil, her kaydın bedelini ödüyor.

Bellekte ya da bir dosyada tutulan her arama tablosuna sorulacak soru “ne kadar hızlı” değil, “onu ne büyütüyor ve o şey iyi gittiğinde ne oluyor” sorusudur. Yanıt “yavaşlıyor” ise boyut sınırı, daha kurulduğu gün, koda, dosyayı yazan kısmın hemen yanına yazılmalıdır.

Reklam