Menggunakan MySql 5.7 kolom JSON untuk EAV

8

Saya sedang mengembangkan produk e-commerce dan saya telah mampu mengimplementasikan semua fungsi dan dibiarkan dengan memungkinkan pengguna untuk membuat atribut tambahan untuk suatu produk. Sekarang saya punya dua pilihan.

EAV

EAV sebagian besar disukai tetapi tampaknya bekerja untuk Magento. Tapi setelah meneliti semua sakit kepala itu menyebabkan saya agak enggan menggunakannya

Gunakan Kolom JSON di MySql 5.7

Ini agak baru dan saya belum melihatnya diimplementasikan di tempat lain dan saya takut scan tabel penuh sebagai hasil dari query atribut JSON. Tapi setelah membaca JSON MySql 5.7 ini mereka tampaknya merekomendasikan menggunakan JSON. dan itu akan kurang melelahkan daripada menerapkan sesuatu seperti saran skema MySql Praktis ini .

Pertanyaan saya adalah, meskipun saya bias menggunakan cara kolom JSON menyimpan atribut karena NoSQL bukan pilihan bagi saya, apakah ada kelemahan yang lebih parah daripada menggunakan tabel EAV.

Madawar
sumber
akhirnya, metode apa yang Anda ambil?
poc

Jawaban:

2

Baik EAV atau memilih kolom JSON adalah pendekatan yang buruk dalam kasus Anda, tetapi mana yang benar-benar lebih baik untuk Anda tergantung pada apa yang ingin Anda lakukan dengan data setelah itu disimpan dalam database.

Jika semua yang Anda inginkan adalah memiliki produk dengan atribut yang ditentukan pengguna dan Anda ingin membaca produk secara keseluruhan, cara JSON akan memberikan kinerja yang lebih baik untuk Anda, karena seluruh produk akan berada dalam satu tabel, Anda cukup dengan mendekode JSON yang diambil dari database dan lakukan sesuai keinginan Anda di frontend.

Namun jika Anda ingin tidak hanya membaca produk secara keseluruhan tetapi, dengan wawasan masa depan, mungkin memperkenalkan kemampuan untuk menyaring produk dengan atribut tertentu (katakanlah warna), menggunakan pendekatan EAV akan meningkatkan kinerja operasi ini, karena Anda dapat menyaring produk yang nama atributnya langsung cocok dengan yang Anda cari.

SELECT
    pa.ProductId
FROM
    product_attributes pa
WHERE
    pa.`Name` = "color"

Jika Anda memiliki fitur ini dengan kolom JSON, melalui model atribut JSON membutuhkan lebih banyak sumber daya daripada perbandingan string langsung.


Sebagai pengembang backend REST API untuk aplikasi seluler, contoh yang sering saya kerjakan adalah memberikan kepada pengguna ikhtisar pemberitahuan push yang telah mereka terima melalui beberapa pusat notifikasi dalam klien seluler.

Karena saya tidak berencana untuk melakukan query berat pada data secara berkala, kolom JSON benar-benar baik-baik saja. Saya hanya ingin memberikan data yang ada dalam format yang berbeda kepada pengguna ketika mereka menanyakannya, jadi saya mengambil data dari database dan membuangnya ke pengguna. Ini bahkan lebih baik karena permukaan REST APIs adalah JSON, jadi saya bahkan tidak diharuskan untuk melakukan pemformatan tambahan karena saya akan diharuskan melakukan dalam hal model EAV.

Andy
sumber