Tôi đã suy nghĩ một lúc về mô hình hóa trang web thương mại điện tử điển hình với phân loại giống như ebay và các thuộc tính phụ thuộc vào một loại sản phẩm cụ thể.Công cụ tìm kiếm mặt chuyên dụng để xử lý phân loại động - giúp chỉ với hiệu suất hoặc linh hoạt?
Nỗ lực đầu tiên là lựa chọn giữa mô hình kế thừa EAV và Bảng Per Class DB. Tôi đã chọn thứ hai vì hiệu suất, nhưng ý nghĩa của việc tạo bảng chuyên dụng cho từng danh mục sản phẩm cụ thể (lá trong danh mục) với các thuộc tính danh mục cụ thể (như độ phân giải cho TV) được mô hình hóa thành một cột riêng biệt.
Trong khi trình diễn, thiết lập này không linh hoạt nếu bạn cần thêm thuộc tính vào danh mục hiện có hoặc thêm danh mục mới. Đối với mỗi sự thay đổi như vậy sau là cần thiết:
- Alter/tạo bảng
- hình thức mới để lọc withing loại như vậy bởi cụ thể thuộc tính
- Code mới để tạo ra các truy vấn db để tìm kiếm và lọc
- Một số viewmodels mới/DTO và lượt xem để giới thiệu sản phẩm từ các danh mục mới
Để đối phó với sự phức tạp đó, tôi nghĩ rằng một số loại đại diện meta của các thuộc tính đó là cần thiết (ngay cả bên ngoài ứng dụng) trong tệp xml hoặc thậm chí excel, sao cho mỗi thay đổi tất cả mã được đề cập có thể được tạo tự động (truy vấn sql/orm, mã ứng dụng, mẫu). Vì vậy, nó có thể giúp phát triển, nhưng vẫn còn thử nghiệm và triển khai thêm là cần thiết.
Vào thời điểm đó, tôi đã học được rằng ebay không thực sự sử dụng db quan hệ cho tìm kiếm và phân loại của chúng rất linh hoạt, chúng có thể nhanh chóng thêm các loại lá mới. Ngoài ra, các danh mục của chúng không phải là các danh mục từ một cây phân cấp được mô hình hoá trong db quan hệ, mà chỉ là các thuộc tính tìm kiếm (các khía cạnh).
Sau khi xem nhanh các thiết lập tìm kiếm mặt chuyên dụng đầy hứa hẹn nhất (ví dụ Solr riêng biệt) Tôi không chắc liệu nó có thể giúp tôi linh hoạt với các thay đổi phân loại hay không. sẽ vẫn phải được mô hình hóa trong DB dưới dạng siêu dữ liệu DBMS, ví dụ như. các biểu mẫu giao diện người dùng tạo động để lọc các thuộc tính sẽ khó trừ khi:
1) Tôi sẽ giữ dữ liệu trong RDBMS bằng cách sử dụng EAV fasion và khắc phục các vấn đề hiệu suất của nó bằng cách sử dụng tìm kiếm SOLR (nhưng vẫn có vấn đề với EAV messiness) thực thi tính toàn vẹn, vv)
2) Tôi sẽ chỉ giữ từ điển thuộc tính (nghĩa là tên và loại của chúng) trong RDBMS và lưu trữ các giá trị thuộc tính cụ thể trong SOLR sử dụng nó như một kho dữ liệu không quan hệ. . Tôi không tin vào giải pháp này (ngay cả khi có thể) vì ứng dụng sẽ được kết hợp chặt chẽ với solr (tức là quản trị viên phiên bản sản phẩm CRUD sẽ tương tác trực tiếp với SOLR).
Suy nghĩ của bạn là gì? Bạn có nghĩ rằng đối với bất kỳ loại thế hệ mã hóa tính linh hoạt phân loại (performant) như vậy là không thể tránh khỏi? Làm thế nào bạn sẽ xử lý điều đó? Có lẽ một số từ điển dữ liệu riêng biệt trong thời trang EAV trong DB chỉ dành cho mục đích tạo mã? Tôi đoán tôi cũng có thể sử dụng một cái gì đó như MongoDB, nhưng việc tạo mã UI (thời gian chạy hay không) vẫn sẽ cần một số loại siêu dữ liệu.
Có rất nhiều câu hỏi ở đây, nhưng tôi không muốn chia nhỏ thành các câu hỏi nhỏ vì tôi quan tâm đến cách tiếp cận thiết kế chung khi xử lý một lớp lớn hơn về các vấn đề như vậy.
quảng cáo 1: diện tìm kiếm/chuyển hướng cho mỗi gia nhập không phải là ưu tiên hàng đầu của tôi, tôi có thể sử dụng thường xuyên "tìm kiếm nâng cao" hình thức với các loại khác nhau dữ liệu đầu vào (chuỗi, giá cả, dao động vv). Tôi chỉ đang suy nghĩ liệu các khía cạnh có thể giúp đạt được sự linh hoạt hay không. Quảng cáo 2: Dữ liệu là gì và lược đồ phụ thuộc vào quan điểm nào. Trong EAV mọi thứ đều là dữ liệu, OTOH nếu tôi chọn sử dụng "độ phân giải" làm cột, nó sẽ trở thành lược đồ. Nếu tôi muốn thêm loại thuộc tính mới vào loại TV (ví dụ số cổng USB), nó cũng có thể được mô tả là thay đổi lược đồ. quảng cáo 4. Thú vị, bạn có biết bất kỳ ví dụ nào về điều đó không? – aaimnr
1. Nếu bạn muốn có các danh mục phân cấp, thì không, nó sẽ không dễ dàng với Solr vì 5. 2. Tôi thừa nhận nó chủ quan, nhưng IMO nếu bạn phải tạo mã để chứa một danh mục mới, thì đó là thay đổi lược đồ, chứ không phải thay đổi dữ liệu, cho ứng dụng của bạn. 4. bất kỳ ứng dụng dựa trên trình thu thập thông tin nào, ví dụ: Google hoặc http://www.lucidimagination.com/About-Search. –