İndeksleme magentoda nasıl çalışır?


30
  1. Magento'da indeksleme nasıl çalışır?
  2. Tam olarak ne işe yarıyor?
  3. Neden gerekli?

Bu bağlantı: stackoverflow.com/questions/4945307/… size yardımcı olmalı
TBI Infotech

İşte Magento 2'deki süreçleri ve eylemleri magento.stackexchange.com/questions/90510/…
Yogesh Trivedi

Magento'nun hangi sürümünü kullanıyorsunuz? V1.13'te pek çok değişiklik yapıldı - bu nedenle bu sürümden önceki sürümde farklılıklar bekleyin. İşte mView modülünü açıklayan ve Magento'nun 1.13 sürümündeki indekslemeyi açıklayan güzel bir blog yazısı: eschrade.com/page/…
Pitt

Yanıtlar:


63

Magento'da farklı indeks türleri var.
Dizin oluşturucuların tümü işlerin daha hızlı çalışmasını sağlamak için var.
Burada sadece birkaç tanesini ele alacağım.

Düz Dizin Bu
tür 2 dizin var. Biri kategoriler için, diğeri ürünler için.
Varsayılan olarak kategori ve ürün varlıkları (ve müşteriler ve müşteri adresleri ancak bu durumda önemli değillerdir) EAV varlıklarıdır. Bu genişletilebilirlik için çok güzel. Ancak bu bir performans katilidir çünkü tüm nitelikler için tüm değerleri elde etmek için çok fazla katılım veya çok sayıda sorguya ihtiyacınız vardır.
İşte burada düz indeksleyici devreye giriyor.
EAV yapısını düz bir yapıya dönüştürür. Yani, bir özniteliğe karşılık gelen bir sütunu olan bir tablo (Magento'daki her mağaza görünümü için bir tane) oluşturur. Bu, seçimleri daha hızlı yapar. Kategoriler için tüm özellikler tablo sütunlarına dönüştürülür. Sadece 'Ürün listesinde kullanılmış' olarak işaretlediğiniz ürünler için, farklı özelliklere sahip her tür ürünü satabileceğiniz ve gazillion sütunlarıyla bir tablo oluşturmak mümkün olmayabilir.
Ayrıca, bazı ürünler devre dışı bırakılabilir veya belirli bir web sitesine ait olmayabilir ve bunları aramak için girişlere dahil etmeye gerek yoktur. İndeksleyici tarafından dışlanırlar.
Oluşturulan düz tablolar ön kısımdaki verileri okumak için kullanılır. Arka uç hala EAV yapısını kullanır.

Katalog Arama Dizini
Ürünleri birçok özellik değerine göre arayabilirsiniz. Bazıları, yassı indeksleyici tarafından oluşturulan yassı tablolara dahil edilmeyebilir. Bu dizin, ürünler için aranabilir özellik değerlerine sahip bir tabloyu doldurur, böylece onları anahtar kelimelere göre aramak daha kolaydır. Tüm bilgilerin bir tabloda (veya bir alanda) bulunması, Tam metin araması yapmayı ve ilgili sonuçları almayı mümkün kılar.

Ürün Fiyatları .
Bir ürünün fiyatı birçok değişkenden etkilenebilir. Örneğin, müşteri grubu, web sitesi, katalog indirim kuralları.
Yukarıdakilerle aynı, ürünleri fiyatları ile almak çok fazla katılım veya çoklu seçim anlamına gelecektir. Ek olarak paket ürünlerinde garip bir fiyatlandırma sistemi var. Bu indeksleyici verileri bazı tablolarda toplar ( catalog_product_index_price_*) ve seçimleri (sıralama ve filtreleme) çok daha kolay hale getirir.

Url Katalogunu Yeniden Yaz
Bu, hangi url veya kategoriye karşılık gelen url'yi ayarlayarak url yeniden yazma kurallarını temizler. URL yönetimi iç sisteminin standart olmayan bir URL'yi ararken hangi sayfayı görmeniz gerektiğine karar vermesi bu şekilde daha kolaydır. Tüm ürün ve kategorilerdeki URL anahtarlarını aramak yerine, sadece bir tabloda arama yapar.

Kategori Ürünleri
Magento'da 'Is Çapa' adlı bir kategori niteliğini doğru veya yanlış olarak ayarlayabilirsiniz. Doğruysa, söz konusu kategorinin, alt kategorilerindeki tüm ürünleri listeleyeceği anlamına gelir. Yine, bu gerçek zamanı belirlemek sadece bir tablo okumaktan daha fazla kaynak alacaktır. Bu indeksleyici, arka uçta ayarladığınız derneklere ve kategorilerdeki 'Çapa' bayrağını temel alarak ürünler ve kategoriler arasındaki ilişkiyi oluşturur.

Stok Durumu
Basit ürünler için kolaydır. Stokta veya stokta olmayabilirler, ancak yapılandırılabilir, gruplandırılmış ve paket için bu kadar kolay değildir. Ana ürünle ilişkili çocuk ürünlerine bağlı olarak stokta veya stokta olabilirler. Yine (sadece kendimi burada tekrar ediyorum) durumlarını gerçek zamanlı olarak almak çok fazla soru anlamına gelir.

Ürün Özellikleri .
Bu, aynı sebeple katmanlı navigasyonda kullanılabilecek tüm özellikleri toplar. Daha hızlı okumak için hepsini bir yerde bulundurmak.

Tag Aggregation
Bunun ne yaptığı hakkında hiçbir fikrim yok. Asla gerçek bir projede etiketler kullanmamıştım.


teşekkürler marius bu kadarıyla en iyi cevap ... Ben aldım
sonam

Düz masaların sadece ön uçta (ve arka uç hala EAV yapısını kullanıyor) kullanıldığını söylerken ne demek istediniz? Ben bir acemiyim ve anladığım kadarıyla ürünler gibi varlıklar yarattığımızda / güncellediğimizde, bu işlemleri yapmak için hala EAV tablolarını kullanıyor ve bunları kaydetmek için düz masaları güncelleme veya manuel olarak güncelleme seçeneğini ayarlamamız gerekiyor. bu değişiklikler düz tablolara yansır. Bunu söylediğin zaman bu sürece mi değiniyorsun? Bu konuda ayrıntılı bilgi verir misiniz? Teşekkürler!
Bharadwaj Srigiriraju

1
@ Marius: Yeniden indeksleme sırasında tabloyu tam hata alıyorum. Lütfen yardım et. Ben alıyorum hata 'catalog_product_index_price_bundle_sel_tmp' tablosu dolu
zed Blackbeard

1
@Marius bu cevabın 3 yıl sonra artık Tag Aggregation hakkında herhangi bir fikriniz var mı?
Murtuza Zabuawala

1
@Siyah. Dizinler için 2 ayarınız var. "Güncelleme kaydedildiğinde" ve "El ile". Güncelleme için kaydetme işlemi, ürünü kaydettiğinizde otomatik olarak gerçekleşmelidir. Ancak bu performans sorunlarına neden olabilir. Örneğin, bir kerede birden fazla ürünü değiştirirseniz. Manuel modda, kaydetme işleminden hemen sonra hiçbir reindexing tetiklenmez, ancak bittiğinde manuel olarak yeniden inşa etmeniz gerekir.
Marius

11

: En orijinal yayından alınır olarak bunun için kredi alamaz https://stackoverflow.com/questions/4945307/can-someone-explain-magentos-indexing-feature-in-detail

Magento'nun endekslemesi sadece ruhtaki veritabanı seviyesindeki indekslemeye benzer. Anton'un belirttiği gibi, bir sitenin daha hızlı çalışmasını sağlamak için bir denormalizasyon sürecidir. Magento veri tabanı yapısının arkasındaki düşünceleri ve neden indekslemenin hızda çalışması için gerekli olduğunu açıklamaya çalışayım.

Daha "tipik" bir MySQL veritabanında, katalog ürünlerini depolamak için bir tablo şöyle yapılandırılır:

PRODUCT:
    product_id INT
    sku        VARCHAR
    name       VARCHAR
    size       VARCHAR
    longdesc   VARCHAR
    shortdesc  VARCHAR
    ... etc ...

Bu, alım için hızlıdır, ancak bir e-ticaret yazılımı için temel bir sorun bırakmaktadır: daha fazla özellik eklemek istediğinizde ne yaparsınız? Ya oyuncak satıyorsanız ve bir boyut sütunu yerine age_range'e ihtiyacınız varsa? Eh, başka bir sütun ekleyebilirsin, ancak büyük bir mağazada (örneğin Walmart'ı düşün), bunun% 90 boş satırlara yol açabileceği ve yeni özellikleri korumaya çalışmanın neredeyse imkansız olduğu anlaşılmalıdır.

Bu problemle mücadele etmek için Magento, tabloları daha küçük birimlere böler. Tüm EAV sistemini bu cevapta yeniden oluşturmak istemiyorum, bu yüzden lütfen bu basitleştirilmiş modeli kabul edin:

PRODUCT:
    product_id INT
    sku        VARCHAR

PRODUCT_ATTRIBUTE_VALUES
    product_id   INT
    attribute_id INT
    value        MISC

PRODUCT_ATTRIBUTES
    attribute_id
    name

Artık, product_attributes içine yeni değerler girerek ve sonradan bitişik kayıtları product_attribute_values ​​içine koyarak istekleri eklemek mümkündür. Temel olarak Magento'nun yaptığı budur (burada gösterdiğimden biraz daha fazla veri türü için). Aslında, iki ürünün aynı alanlara sahip olması için hiçbir neden yoktur, bu nedenle tüm ürün türlerini farklı özelliklerde oluşturabiliriz!

Ancak, bu esnekliğin bir bedeli var. Sistemimde bir gömleğin rengini bulmak istersem (önemsiz bir örnek) bulmam gerekir:

  1. Öğenin product_id (ürün tablosunda)
  2. Color için attribute_id (özellik tablosunda)
  3. Son olarak, gerçek değer (attribute_values ​​tablosunda)

Magento böyle çalışırdı, ama çok yavaştı. Böylece, daha iyi performans elde etmek için, bir uzlaşma sağladılar: dükkan sahibi istediği özellikleri tanımladıktan sonra, devam edin ve büyük tabloyu baştan yaratın. Bir şey değiştiğinde, onu uzaydan kurtar ve tekrar yarat. Bu şekilde, veriler öncelikle hoş bir esnek formatta saklanır, ancak tek bir tablodan sorgulanır.

Bu ortaya çıkan arama tabloları Magento "endeksleri" dir. Yeniden indekslediğinizde eski masayı patlatıyor ve tekrar üretiyorsunuz.

Umarım bu işleri biraz açıklığa kavuşturur!


nuke it from space, Güzel :)
Wietse

5

Magento oldukça güçlü ve karmaşık bir sistemdir. Çok miktarda veriyle çalışılmasına izin verir, ancak veri tabanının tonlarca kaydıyla veritabanı aşırı yüklendiğinde ağır ve yavaş olur. Magento bu sorunu çözmek için indeksler kullanır. Dizinler, veritabanından hızlı yanıtlar düzenlemeye izin veren bazı düz verilere sahip ek veritabanı tablolarıdır.

Varsayılan olarak, çekirdek sistem her öğenin kaydetme dizinini günceller. Ancak bazı durumlarda, örneğin bazı kitle eylemleri vb. Gibi manuel olarak yapmanız gerekebilir. Ancak bazen sorunlara neden olur.

Örneğin, 10k + ürününüz ve çok fazla kategoriniz varsa, 'katalog url yeniden yazma' dizinini yeniden oluşturmak saatler sürebilir. Sonra php betiği sadece max_execution_time aşımı nedeniyle bozulabilir. Reindex işlemini komut satırından çalıştırarak birkaç sorunu çözmenin bir yolu vardır.

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.