Bir dosyada sık erişilen veri saklamak yerine MySQL

9 Cevap php

Ben bir PHP içerik yönetim sistemi üzerinde çalışıyorum ve, test, sistemin MySQL tabloları epeyce hemen her sayfada sorgulanan ancak çok nadiren yazılır fark etmişsinizdir. Ne ben merak ediyorum bu site trafiği arttıkça veritabanı üzerinde ağır tartmak başlar ve nasıl çözebilir / Bunu önlemek olacaktır?

Benim ilk düşünce dosyaları (PHP serileştirme kullanılarak) daha fazla statik bazı verileri depolamak başlamak için ama bu aslında sunucu yükünü azaltır mı vardı? Ne endişeleniyorum ben sadece dosya sistemi veritabanından yüksek yük transfer olurdu ki!

Biri daha iyi yaklaşım ipucu ver, bu harika olurdu olsaydı. Veri hacmi kendisi büyük bir etkiye sahiptir durumda, ben aşağıda saklamak olacak bazı verilerin ayrıntılı ettik:

  • (ISO ülke kodu dahil) Ülkeler tam liste
  • Yeri seçenekleri (cilt, yönetici e-posta, destek URL'leri vb)
  • (Izinleri dahil) Grupları

9 Cevap

Sen güçlü bir sunucu üzerinde ve hızlı bir bağlantıda bir veritabanından tablo okuma yerel makine üzerinde diskten okuma daha hızlı olması muhtemel olduğunu hatırlamak zorunda. Veritabanı bellekte bu küçük, düzenli olarak erişilen tabloların tamamını önbelleğe alır.

Dosya sisteminde aynı özelliğe kendiniz uygulayarak, orada sadece küçük olası hız kadar olduğunu, ancak karışıklık için büyük bir şans o kadar ve yavaş olun.

Bu veritabanını kullanarak sopa muhtemelen en iyisidir.

  1. (Mysql yavaş sorgu günlük kullanarak) sorguları optimize ve işlevini açıklar.

  2. Tablolar gerçekten nadiren yazılır Eğer yerel MySQL önbelleğe kullanabilirsiniz. Sadece my.conf mysql önbelleğe almayı etkinleştirmek, size kodunu değiştirmek için hiçbir şey yok.

  3. Smarty (smarty.net) gibi şablon motoru kullanarak deneyin. Bu oldukça iyi çalışıyor o kendi tamponlama sistemi vardır ve gerçekten sunucu yükünü azaltacaktır.

  4. Ayrıca Memcache kullanabilirsiniz, ama sadece gerçekten yüksek yük web siteleri ile kullanarak gerçekten değer. (Ben Smarty yeterli olacağını düşünüyorum.)

Veritabanları yerel dosya sisteminden daha büyük veri hacimlerini işleme de çok daha iyi.

Aslında bir sunucu yük sorununuz kadar, sunucu yükünü azaltmak için sitenizi optimize endişe etmeyin. :-)

Bu tablolardaki kayıtları epeyce milyonlarca bekliyoruz sürece (ülke ve kullanıcılar) belirtilen tablolar normal olarak doğrudan MySQL ile bellekte önbelleğe alınır.

Bu tablolar bellekte sığmaz durumda, bu tür memcached gibi bir genel amaçlı dağıtılmış hafıza önbellek sistemi, düşünebilirsiniz.

Veritabanı düzgün endeksli ise, veritabanından verileri sorgulamak için çok daha hızlı olacaktır. Bunu hızlandırmak istiyorsanız, memcached veya benzer içine bakmak.

Veritabanları verileri saklamak ve sağlamak için .. Bu amaçla tam olarak vardır. Dosya Sistemi komut ve programlama içindir.

Eğer yük sorunlarla karşılaşırsanız, Memcached veya veritabanı için başka bir programı kullanarak düşünün.

Ayrıca çalışıyor düşünebilirsiniz cache different parts of your page directly into database olarak bütün bölümler (çok fazla, üretilen başlık bölümü değişmez örneğin, bir kenar çubuğu, ..)

yerine sahip birden fazla MySQL okur çıkışı bir dosyaya (flush (), ob_flush (), vb) önbelleğe ve include olabilir. önbelleğe alma kesinlikle MySQL çoklu erişim süresi daha hızlıdır.

statik bir dosya okuma php ve mysql işleme yoluyla yükü ekleyerek çok daha hızlıdır.

Eğer önlemek için yük testi yoluyla performansını değerlendirmek gerekir prematurely optimising.

Bu aptalca ve büyük olasılıkla serileştirme ile dosyalarda veri depolamak için genel yük artacak, veritabanları veri almak gerçekten iyi.

Analizinden sonra gerçek bir performans isabet (masif yükleme bahsediyorsun sürece hangi şüphe) varsa, o zaman önbelleğe daha iyi bir çözümdür.

Bu ihtiyaçlar ortaya çıktıkça değişiklikleri kolaylaştıran iyi tasarlanmış bir sistem olması daha önemli.

Burada esas hakkında konuşurken ne dusoft yapmak ve bir dosyaya çıktı tamponunu önbelleğe bir çift komut dosyası için bir link:

http://www.addedbytes.com/articles/caching-output-in-php/

Bu şekilde kullanıldığında, bu çözümün bir cıvata-on-sonra-aslında türü daha var, ama daha önceki süreçte olduğu düşünülüyorsa, bu aynı davranışı kesinlikle bir daha entegre bir şekilde uygulanabilir. Birçok çerçeveler de yerleşik bu tür bir şey var