Ortak endeksleme sorunu için kalıcı çözüm


23

Büyük envanter kayıtlarına sahip bazı magento projeleri geliştirdik ve her zaman internette bulunan her şeyi denediğimiz endeksleme sorunuyla karşı karşıya kaldık. Düz masaları kesmek ve CLI kullanarak yeniden indekslemek, cron'u ayarlamak için yeniden indekslemek gibi günlük indeksleme sorununu çözmek için internette bulduğumuz her şeyi denedik. indeksleme ancak bu, indeksleme sorunuyla karşı karşıya olduğumuz günlük baş ağrımızdır.

Ürünleri günlük bazda güncellemek veya günlük olarak başka bir yemden ithal etmek gibi farklı senaryolar bulunan projeler üzerinde çalışırken, bu problem için kalıcı bir çözüm arıyoruz.

Bununla veya bazı geçici çözümlerle en iyi uygulamaları olan herkes, lütfen çok takdir edilecek olanları paylaşın.


Bir yılını Magento'da ve uzantılarında ve yalnızca 10K artı ürünlerle dolu bir e-ticaret sitesi yapan son derece yetersiz ve salak veri mimarisinde boşa harcadım. Tüm bu uyarılar, Magento CE'yi görmeye başlayan herhangi birine verilmeliydi. Magento kuleleri binlerce adam harcadığı için mahkemeye götürülmeli. Bir veritabanının indeksleme yapmasına izin verin, bir veritabanının işini yapmayın. Özel bir sunucuya para harcamak yerine, geceleri tonlarca uykusuz çalışma saatini barındırmak yerine, barındırılan bir e-ticaret platformuna veya MS SQL sunucusunu kullanan açık bir kaynağa geçmek için daha iyi bir tavsiye.
semiprecious.com

Hiç doğru uzantısı veya doğru sunucu yapılandırmasını bulamadığınızı hiç düşündünüz mü? Bazı yazılımlar ihtiyaçlarınızı karşılamıyorsa, bunun işe yaramaz olduğu anlamına gelmez. Son beş yıldan beri Magento'dan ekmeğimi (ve birayı) kazanıyorum ve ayrıca çok memnun müşterilerim oldu. 10 binden fazla kataloğu olan bazıları.
Marius

CE, veri işçiliği nedeniyle 10'lar ile 100'lerin arasındaki skuslarda bir sorun yaratıyor. EE, yaptıkları endeksleme güncellemeleri nedeniyle daha iyidir, ancak bu, milyonlarca dolarlık gelirli şirketler içindir. Barındırma atabilirsiniz ancak yatırım getirinizi olumsuz yönde etkileyeceksiniz. Kullandığımız çözüm çok özel & delta süreçleridir ve SAP & Walmart kullanımı gibi çözümlere benzer yükler, endeksleme sorununu (fx ve satır içi marj / özellik geri dönüşleri) atlayan özel bir fiyatlandırma çözümüyle (ATG-esque) birleştirir barındırma. Basit cevap hayır, Magento en iyi şekilde tasarlanmadı.

Yanıtlar:


31

Hangi endekslerin yavaş olduğunu ve nedenini anlamak önemlidir

Katalog karmaşıklığı ve sonuçta mağaza mimarisi, bir yeniden endeksin ne kadar süreceğini, bunun altında yatan altyapı ile birlikte belirleyecektir.

  • 50.000 ürününüz ve 10 mağaza görünümünüz varsa, birkaç milyon satırın catalog_url_rewriteişlem yapmasının zaman alacağını garanti edebilirsiniz .

  • 100 ürün ancak 5000 özelliklerini var, sen garanti edemez catalog_attributesya da catalog_product_flatmasa yeniden inşa etmek için bir yaş almak veya olacak düşmek düz onun yüzünde

  • 1000 ürününüz varsa, ancak aranabilir 500 özellik varsa, o catalog_fulltext_searchzaman tekrar tamamlanması biraz zaman alacak

Karşılaştığınız her bir sorunun çözümü herkese uyan 1 beden değildir, mağazanızın doğru şekilde tasarlanmasıyla ilgilidir; onu desteklemek için doğru altyapıya sahip olmak ve hem içerik tekrarlamasını hem de performansı destekleyen bir yeniden endeksleme frekansı / stratejisi kullanmak.

  • Ön uç önbellekleme eklemek hiç yardımcı olmaz
  • Durumda daha fazla donanım atma olabilir
  • Katalog boyutunun / karmaşıklığının ele alınması yardımcı olacaktır
  • Üçüncü taraf endeksleme araçlarını kullanmak yardımcı olacaktır
  • Bazı endekslerin dışsallaştırılması (örneğin, arama> SOLR)

Ayrıca, belirli endekslerin gerekli olup olmadığını değerlendirme durumu da vardır. Düz ürün / kategori kullanmak her zaman tüm mağazaları daha hızlı yapmaz; mağazaları daha yavaş hale getirdiğini gördük. Böylece performans öncesi / sonrası test ettikten sonra bulabilirsin - dikkate almıyorlar.


8

tl; Dr.

Gümüş mermi çözeltisi yok. Bazı geçici çözümler var, öneriyorum Sonassi_Fastsearchindex- ama bu özellikle katalog araştırması içindir.

Belki kaydet üzerinde endeks güncellemelerini devre dışı bırakmak - bir gecede çalışacak şekilde programlamak - biraz rahatlama sağlayacaktır? Daha fazla önbellek eklenmesiyle birlikte - memcached, Redis, APC - ve Varnish gibi bir tam sayfa önbelleği (CE kullanıyorsanız) çalışmaya başlayabilirsiniz. Varnish kullanmayı planlıyorsanız, Nexcess_Turpentinehızlı bir başlangıç ​​için github'a bakın.

Daha fazla bilgi

Dizin oluşturma sorunları - özellikle catalog_url_rewrites - toplulukta iyi bilinir ve belgelenir. Magento bunları Enterprise versiyonunda ele aldı, çünkü bunlar en çok etkilenen müşteriler. Birçok EE müşterisi 10k + ürüne ve çok sayıda mağaza görünümüne, web sitesine, vb. Sahiptir.

Bununla birlikte, büyük bir kataloğunuz ve çok sayıda özelliğiniz varsa, endekslemenin uzun bir zaman alacağı - özellikle catalog_url_rewrite, product_flat - bu durumda önerim, dizin çalışma zamanını sabitlememektir. Uzunluğa değil , kutunun içerik sunmak yerine dizin oluşturma işleminde harcamasını sağlamak için bazı işlemleri boşaltmak yerine .

Kendinize soracağınız sorular:

  • Endeksleme sorunları nedeniyle işimi kaybediyor muyum?
  • Endeksleme sorunları nedeniyle verimlilik kaybediyor muyum ?
  • Dönüşümleri kaybetme riski altında mıyım veya dönüşüm oranım zarar görüyor mu?
  • Müşterilerimin, endekslerin senkronize olmadığından (envanter, vb.) Doğrudan stokta olan ürünleri satın alma riski var mı?
  • Katalog fiyatlandırma kurallarım ana işimin bir parçası mı ve
  • Yerinde arama dönüşüm oranım normdan (% 8-10) yüksek mi, bu nedenle daha iyi dizin oluşturmadan yararlanıyor mu?

Bu özel konuda gümüş mermi çözümü yoktur - bir çözüm sağlayıcısı olarak, genel giderlerinizi düşük tutarken, müşterinize satışları ve işletmeyi en iyi şekilde iyileştirecek karar vermesinde yardımcı olmalısınız.

Alternatifler

Katalog arama boşaltma ve Solr için katmanlı nav.

Yatay ölçekle. Daha fazla Apache / nginx sunucusu ekleyin. Daha fazla sunucu = daha fazla eşzamanlı işlem. Bu 1: 1 değil. Nexcess'in burada performans ve Apache konfigürasyonuyla ilgili harika bir teknik raporu var: http://www.nexcess.net/magento-best-practices-whitepaper

Ve eğer Vernik ile gitmek istersen - hatırla:

görüntü tanımını buraya girin


Destekleri takdir ediyoruz, ancak yeniden indekslemenin ön uç önbellekleme ile ilgisi yok; tamamen arka uç bir işlem. Ön uç yükünün hafifletilmesi, yeniden endeksin daha uzun sürmesini önleyecektir, ancak kesinlikle daha hızlı hale getirmeyecektir.
Ben Lessani - Sonassi

Aldığım şey kutuya gelen trafiği azaltmak. Buradaki en büyük endişe, site indeks sırasında kullanılamıyor veya işler çalışırken bilinmeyen bir süre boyunca kilitli kalmak. Günün sonunda, endekslemenin ön uç üzerinde olumsuz bir etkisi olmadığında işin ne kadar sürdüğü önemli olmaz. İndeksleme yük sürelerinde bir düzeltme veya iyileştirme yoktur. Kimse "Ücretli sürüme yükseltme" cevabını istemiyor - bu yüzden önerim ön uç kullanılabilirliğini arttırmak ve dizini yoğun olmayan bir şekilde çalıştırmak için planlıyor.
philwinkle

Kesinlikle, anladım - ama bir web sitesi için kullanılabilirliği önemli iken; Bir e-ticaret sitesi için yeterli değil. Dizinlerin kilitlenmesi nedeniyle bir alışveriş yapamıyorsanız, site çevrimdışı olabilir.
Ben Lessani - Sonassi

sadece birkaç yüz ürünümüz var ve Magento 1.7'de basit bir üründen tasarruf etmek hala birkaç dakika alıyor ve özel bir Rackspace sunucusu için ayda 500 dolardan fazla ödeme yapıyorum. Nereden başlayacağımdan emin değilim, ancak bazı endekslerin belki de bozuk olduğundan şüpheleniyorum. Biri iyi bir magento danışmanı önerebilir mi?
Max Hodges

5

Ağır Magento web mağazalarının çoğunda, Magento arka uç Endeks Yönetimi'ni çalıştırmak çoğu zaman çok zor oldu. Sık sık bu sorunu yaşadım. Shell betiğini geliştirici tarafından her zaman çalıştırmak genellikle telaşlıdır. Genelde bu sorunu kalıcı olarak düzeltirim.

Yeni bir shell / indexer.php> shell / myindexer.php kopyası oluşturuyorum

Kabuk / myindexer.php bazı satır 154 çevresinde özelleştirin

} else if ($this->getArg('reindex') || $this->getArg('reindexall')) {

için

} else if ($this->getArg('reindex') || $this->getArg('reindexall')  || $this->getArg('reindexallrequired') ) {

ve bu onay satırı 166 çevresine ekleyin

//reindex only if required
if( $this->getArg('reindexallrequired') && $process->getStatus() == Mage_Index_Model_Process::STATUS_PENDING )
    continue;

önce

$startTime = microtime(true);
$process->reindexEverything();
$resultTime = microtime(true) - $startTime;
Mage::dispatchEvent($process->getIndexerCode() . '_shell_reindex_after');

Sonra cpanel cron'a her 5 dakikada bir çalışacak yeni kabuk betiğini ekliyorum.

/home/public_html/shell/indexer.php --reindexallrequired >/dev/null

Yukarıdaki kabuk betiği her 5 dakikada bir çalıştığından ve yalnızca reindexing gerektiren işlemleri reindex'lediğinden, ağır yükün sunucu cpu'ya olan riskini azaltır ve tüm reindexing işlemi çok hızlı olur. Eğer hiçbir işlem reindexing gerektirmiyorsa, sadece reindexing işlemini çalıştırmaz. Ayrıca, yeniden indeksleme modunu İndeks Yönetimi sayfasındaki "Kaydetmede Güncelle" ye getirmeyi unutmayın. Bilmiyorsanız, bu seçeneği Gönder düğmesinin yanındaki Eylemler> Dizin modunu değiştir bölümünde bulabilirsiniz.


@ changeling, bir şey değil. Buna değer olduğuna sevindim.
rbncha


4

Daha fazla veri (envanter büyüklüğü, ziyaretçiler, makine) verip veremeyeceğinizi söylemek daha kolay olacaktır, ancak işte size bir olasılık:

  • Sonassi_FastsearchindexKatalog Arama dizini için Extension kullanıyoruz . Sadece başlık, açıklama ve sku indekslemesine rağmen (farkettim sanırım), harika çalışıyor ve katalog arama dizin oluşturucu süresini kısaltıyor.
  • Büyük olasılıkla çalıştırmak zorunda olmadığınız bazı indeksleyiciler olacaktır, örneğin etiketler veya ürün özellikleri için. Düzenli olarak sadece fiyat, ürün dairesi, kategori ürünleri ve katalogları düzenli aralıklarla, belki de günlük olarak yaparsanız bazen yeterli olur.
  • iki saatte bir ürünleri harici bir sistemle senkronize ediyoruz ve bu arada php-scriptleri ile indeksliyoruz. Yani, her indeksleyici için belli bir zamana kadar koşmak istediğimiz bir cronjob var ve bu cronun senaryoyu çalıştırmasına izin veriyoruz. Bu, sunucunun yapabilecekleri ile güncel ürün verileri arasındaki en iyi araç olarak görünmektedir.

Bu Magento CE 1.7.0.2'de çalışıyor; hala bir acı olsa da;)


Genellikle ürün dairesiyle sorun yaşıyoruz, diğer tüm endeksler gayet iyi.
ravisoni

3

Dnd_Patchindexurl kullanarak catalog_url_rewrite reindex zamanını yaklaşık% 70'e indirebilirim

Engelli ürünleri hariç tutmak veya görünmeyen ürünleri URL'lerini boşuna oluşturmak için iyi bir çözüm!

$ php ./shell/indexer.php -reindexall
Product Attributes index was rebuilt successfully in 00:00:11
Product Prices index was rebuilt successfully in 00:00:22
Catalog URL Rewrites index was rebuilt successfully in 00:08:49
Product Flat Data index was rebuilt successfully in 00:00:51
Category Products index was rebuilt successfully in 00:00:19
Catalog Search Index index was rebuilt successfully in 00:00:12
Stock Status index was rebuilt successfully in 00:00:00
Tag Aggregation Data index was rebuilt successfully in 00:00:00

Sonra:

$ php ./shell/indexer.php -reindexall
Product Attributes index was rebuilt successfully in 00:00:12
Product Prices index was rebuilt successfully in 00:00:24
Catalog URL Rewrites index was rebuilt successfully in 00:02:52
Product Flat Data index was rebuilt successfully in 00:00:57
Category Products index was rebuilt successfully in 00:00:25
Catalog Search Index index was rebuilt successfully in 00:00:13
Stock Status index was rebuilt successfully in 00:00:00
Tag Aggregation Data index was rebuilt successfully in 00:00:00

1.9.1.1 üzerine yükledim ve çok iyi çalışıyor!

Connect aracılığıyla da kurulabilir http://www.magentocommerce.com/magento-connect/catalog/product/view/id/15074/s/dn-d-patch-index-url-1364/category/12863/


1

EE 1.13'e yükseltin. Dizinleyiciler bu sürümde yoğun şekilde geliştirildi.


2
Ancak çoğu müşteri topluluk versiyonunu tercih ediyor.
ravisoni

1
Kabul. 1.8 birkaç hafta içinde çıkacak, ancak büyük olasılıkla indeksleyici optimizasyonlarını içermeyecek. Ben de hoşuma gitmiyor, ancak dizin oluşturucularınızın performanslarını göstermenin en kolay, en güvenli ve en ucuz yolu budur.
Paul Grigoruta

kalıcı bir çözüm bulmak imkansız mıdır?
ravisoni

Bir çok SKU’ya sahip olduğu çoğu durumda, mevcut CE 1.7 indeksleyicileriyle gerçekten bir tuğla duvarın içine giriyorlarsa, EE 1.13 ile gitmeleri gerekir. Bu CE 1.7 ve EE 1.12 endeksleyicileri ile 10-25k SKU'lara sahip birçok sorunsuz çalışan site var. Anahtar, onları çoğunlukla iş akışı düzeyinde yönetmek ve doğru altyapıya sahip olmaktır.
davidalger

CE mükemmel yeterli bir seçimdir. Özellikleri EE 1.13 olan hata düzeltmeleri - topluluk zaten CE içine tahrik bildirildi. Buna bakılmaksızın, CE veya EE kullanıp kullanmadığınızdan bağımsız olarak - indeksleme süresi her zaman tamamen katalog karmaşıklığına, sunucu yapılandırmasına, ziyaretçi eşzamanlılığına ve yeniden endeksleme sıklığına bağlı olacaktır. EE sihirli bir mermi değildir ve mimarlıkla ilgili herhangi bir sorun için kesinlikle uygun bir çözüm değildir.
Ben Lessani - Sonassi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.