Oturum VS PHP bir Cache için VS Memcache Dosya?

2 Cevap php

Ben bir sosyal ağı var

  • Kullanıcıların tablo yaklaşık 60.000 satır olur

  • The friends table is around 1 million rows (used to determine who is your
    friend)

Sadece arkadaşım durumu olacak başlamak ve ben onu aramak gibi ne olursa olsun, bu durum kullanıcı yazılan (twitter tip mesajlar) gibi şeyler gösterecek bir arkadaş yem, duvar yapmak isteyen am, bu ancak birkaç farklı öğeleri gösterir belki blog yazısı.

Temelde sadece arkadaş listenizdeki bir kullanıcı kimliği ile yayınlanan içeriği göreceksiniz.

Ben en iyi şekilde gelip çalışıyorlar ve çok uzak kazanılmış değil ama burada benim son fikirdir.

Şu anda bu besleme oluşturmak için, ben zorunda

  1. Get the list of friend ID's on the large friend table

  2. Get the stream data from the friend ids from the above result

  3. JOIN the user table to get the publishers picture URL and username

  4. Then JOIN the comments table to get comments posted on the feed items

O besleme oluşturmak için büyük bir iştir

I have 3 ideas so far, this is where your help can come in.

Memcache Option:

  1. Use memcache and cache a users friendlist as an array when the user logs into the site, also when the user approves a new friend request for a friend to be added to there list, it would rebuild there cache.
  2. Ayrıca sadece orada arkadaşlar almak için ben orada arkadaşlar resim URL ve kullanıcı adınızı kurtarabilir, bu arkadaşım beslemeyi oluştururken bu sorgu ortadan kaldırarak şeyleri tekrar hızlandırmak olacaktır.

File cache Option:

  1. Do the same as the memcache option does but save this data as an array to a cache file instead of memory, then include this cache file into the page.

  2. I am not sure which is the best method for performance I understand memcache stores everything in memory so friends that have like 20,000 friends that could use a lot of memory and a file cache would only put it in memory when the users needs it if I am correct. Also if I did the file method, when a user logs out of the site, I would delete there cache file so the cache folder would never be too large of files

Session cache Option:

  1. Yukarıdaki dosya önbellek olarak aynı, ben sadece bu oturum veri böylece bir önbellek olma yetenekli yapmak olmaz bir dosyaya kaydedilir fark?

Please give me your opinions or any advice or info you have on this as I don't have much knowledge of caching, I have read a lot but sometimes other peoples ideas help a lot

2 Cevap

Memcache nedenlerle bir sürü için en iyi bahis:

  1. Bu hızlı GERÇEKTEN var - Herşey hafıza, ve son derece sizinki (ve önbelleğe alma genel olarak :) gibi durumlar için optimize
  2. Bu dağıtılmış oluyor - Bu demektir ki çalışan birden çok web / app sunucuları varsa, hepsi aynı önbellek erişebilirsiniz
  3. Sen memcache için birden çok sunucu havuzu - Eğer nispeten atıl edilmektedir birkaç sunucuları (veya birkaç adanmış önbellek sunucuları) var ise, size büyük bir önbellek bunları hep birlikte havuz olabilir
  4. O (önce belirtilen nedenlerle) süper ölçeklenebilir
  5. Bu büyük PHP desteği var - memcache için PECL paketi son zamanlarda yeni iyilik bir sürü güncellendi
  6. Hatta memcache kullanıcı oturumları saklayabilirsiniz - sadece php.ini dosyasında kurmak. Bu veritabanlarında oturumları saklamak çok daha hızlı, ve oturumları (bir yük dengeli durumda iseniz) gerek yok gibi ... Bu da sitenize bir performans artışı biraz verecektir birden fazla web host genelinde devam sağlar her istek üzerine oturumu bilgi için dosya sistemi / veritabanı vurmak.

... Ve daha birçok ;)

Bireysel önbelleğe alınmış öğelerin bellek ayak izi hakkında kaygılar bazı gibi bir kaç seçenek var. Benim ilk düşünce sadece, bunu bir koşuşturma vermek, bu önbellek öğeler gerçekten (Eğer kaktüsler gibi gerçek önbellek kullanımını izlemek için çeşitli açık kaynak şeyler bulabilirsiniz) almak ne kadar büyük olduğunu görmek için. Ben onlar sandığınızdan daha küçük olacak düşünüyorum.

Onlar değil, ben, senin önbellek strateji kadar ne aslında önbellek olarak, ne kadar uzun, vb Belki zaten önbellek (cache yani bireysel kullanıcı veri çeşitli şeylerden yem inşa edebileceğini yeniden düşünme öneririm ve sonra önbellek tüm bu ürüne) bir kişi için besleme oluşturmak. Iyi makaleleri bir sürü bu cephede orada vardır, sadece 'em dışarı arama :)

Memcache izin verilir varsayılan maksimum nesne boyutu 1MB.

@jsaondavis : "session data is saved into a file".

Sizin Yukarıdaki açıklamalarımızın, yanlıştır. Oturum veritabanında depolamak üzere konfigüre edilebilir. Varsayılan oturum hadndler dosyasıdır.