Sử dụng các cột JSON MySql 5.7 cho EAV


8

Tôi đang phát triển một sản phẩm thương mại điện tử và tôi đã có thể thực hiện tất cả các chức năng và còn lại với việc cho phép người dùng tạo các thuộc tính bổ sung cho một sản phẩm. Ngay bây giờ tôi có hai lựa chọn.

EAV

EAV chủ yếu nhăn mặt nhưng dường như làm việc cho Magento. Nhưng sau khi nghiên cứu tất cả những cơn đau đầu, nó khiến tôi hơi miễn cưỡng khi sử dụng nó

Sử dụng các cột JSON trong MySql 5.7

Đây là một điều khá mới mẻ mà tôi chưa thấy nó được triển khai ở bất kỳ nơi nào khác và tôi sợ việc quét toàn bộ bảng do kết quả của việc truy vấn các thuộc tính JSON. Nhưng sau khi đọc MySql 5.7 JSON này, họ dường như khuyên bạn nên sử dụng JSON. và nó sẽ ít mệt mỏi hơn so với việc thực hiện một cái gì đó giống như lời khuyên lược đồ MySql thực tế này .

Câu hỏi của tôi là, mặc dù tôi thiên về việc sử dụng cách lưu trữ các thuộc tính của cột JSON vì NoQuery không phải là một tùy chọn cho tôi, nhưng có bất kỳ nhược điểm nào nghiêm trọng hơn so với sử dụng bảng EAV.


Cuối cùng, bạn đã dùng phương pháp nào?
poc

Câu trả lời:


2

Cả EAV và việc chọn cột JSON đều không phải là cách tiếp cận tồi trong trường hợp của bạn, nhưng cách nào thực sự tốt hơn cho bạn phụ thuộc vào những gì bạn muốn làm với dữ liệu khi được lưu trữ trong cơ sở dữ liệu.

Nếu tất cả những gì bạn muốn là có một sản phẩm có các thuộc tính do người dùng xác định và bạn muốn đọc toàn bộ sản phẩm theo cách JSON sẽ cung cấp hiệu suất tốt hơn cho bạn, vì toàn bộ sản phẩm sẽ nằm trong một bảng, bạn có thể chỉ cần giải mã JSON được lấy từ cơ sở dữ liệu và thực hiện với nó như bạn muốn trên frontend.

Tuy nhiên, nếu bạn muốn không chỉ đọc toàn bộ sản phẩm mà với cái nhìn sâu sắc trong tương lai, có thể giới thiệu khả năng lọc ra các sản phẩm với các thuộc tính nhất định (giả sử màu sắc), sử dụng phương pháp EAV sẽ tăng hiệu suất của thao tác này, như bạn có thể lọc ra các sản phẩm có tên thuộc tính trực tiếp khớp với sản phẩm bạn đang tìm kiếm.

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

Nếu bạn có tính năng này với cột JSON, việc đi qua mô hình thuộc tính JSON chiếm nhiều tài nguyên hơn so với tổng hợp chuỗi trực tiếp.


Là nhà phát triển phụ trợ API REST cho các ứng dụng di động, một ví dụ tôi thường làm việc là cung cấp cho người dùng tổng quan về thông báo đẩy mà họ đã nhận được thông qua một số trung tâm thông báo trong ứng dụng khách di động.

Vì tôi không có kế hoạch thực hiện truy vấn dữ liệu nặng trên cơ sở thường xuyên, nên cột JSON hoàn toàn ổn. Tôi chỉ muốn cung cấp dữ liệu hiện có ở các định dạng khác nhau cho người dùng khi họ truy vấn nó, vì vậy tôi lấy dữ liệu ra khỏi cơ sở dữ liệu và đổ dữ liệu đó cho người dùng. Nó thậm chí còn tốt hơn vì bề mặt API REST là JSON, do đó tôi thậm chí không bắt buộc phải thực hiện bất kỳ định dạng bổ sung nào như tôi sẽ phải làm trong trường hợp mô hình EAV.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.