Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Adakah yang bisa menjelaskan fitur Pengindeksan Magentos secara detail?

Pengindeksan Magento hanya mirip dengan pengindeksan tingkat basis data dalam semangat. Seperti yang dinyatakan Anton, ini adalah proses denormalisasi untuk memungkinkan pengoperasian situs yang lebih cepat. Izinkan saya mencoba menjelaskan beberapa pemikiran di balik struktur database Magento dan mengapa pengindeksan diperlukan untuk beroperasi dengan cepat.

Dalam database MySQL yang lebih "tipikal", tabel untuk menyimpan produk katalog akan disusun seperti ini:

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

Ini cepat untuk pengambilan, tetapi meninggalkan masalah mendasar untuk perangkat lunak eCommerce:apa yang Anda lakukan ketika Anda ingin menambahkan lebih banyak atribut? Bagaimana jika Anda menjual mainan, dan bukan kolom ukuran, Anda memerlukan age_range ? Anda dapat menambahkan kolom lain, tetapi harus jelas bahwa di toko besar (misalnya Walmart), ini akan menghasilkan baris yang 90% kosong dan upaya mempertahankan atribut baru hampir tidak mungkin.

Untuk mengatasi masalah ini, Magento membagi tabel menjadi unit yang lebih kecil. Saya tidak ingin membuat ulang seluruh sistem EAV dalam jawaban ini, jadi terimalah model yang disederhanakan ini:

PRODUCT:
    product_id INT
    sku        VARCHAR

PRODUCT_ATTRIBUTE_VALUES
    product_id   INT
    attribute_id INT
    value        MISC

PRODUCT_ATTRIBUTES
    attribute_id
    name

Sekarang dimungkinkan untuk menambahkan atribut sesuka hati dengan memasukkan nilai baru ke dalam product_attributes dan kemudian menempatkan catatan yang berdampingan ke dalam product_attribute_values . Ini pada dasarnya apa yang dilakukan Magento (dengan sedikit lebih menghormati tipe data daripada yang saya tampilkan di sini). Faktanya, sekarang tidak ada alasan untuk dua produk memiliki bidang yang sama sama sekali, jadi kami dapat membuat seluruh jenis produk dengan set atribut yang berbeda!

Namun, fleksibilitas ini ada harganya. Jika saya ingin menemukan color kemeja di sistem saya (contoh sepele), saya perlu menemukan:

  1. product_id item (dalam tabel produk)
  2. attribute_id untuk color (dalam tabel atribut)
  3. Akhirnya, value yang sebenarnya (dalam tabel nilai_atribut)

Magento dulu bekerja seperti ini, tetapi sangat lambat. Jadi, untuk memungkinkan kinerja yang lebih baik, mereka membuat kompromi:setelah pemilik toko menentukan atribut yang mereka inginkan, lanjutkan dan buat tabel besar dari awal. Ketika sesuatu berubah, nuke dari luar angkasa dan buat lagi. Dengan begitu, data disimpan terutama dalam format fleksibel kami yang bagus, tetapi ditanyakan dari satu tabel.

Tabel pencarian yang dihasilkan ini adalah "indeks" Magento. Saat Anda mengindeks ulang, Anda meledakkan tabel lama dan membuatnya kembali.

Semoga itu bisa memperjelas segalanya!

Terima kasih, Joe



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Perbedaan antara menggunakan REFERENSI dengan dan tanpa FOREIGN KEY?

  2. Simpan file PDF di MySQL

  3. Hak istimewa SUPER untuk operasi ini

  4. Bagaimana cara mengkonfigurasi Django menggunakan pymysql sebagai driver?

  5. php artisan migration throw [Pengecualian PDO] Tidak dapat menemukan driver - Menggunakan Laravel