Một số ví dụ trong thế giới thực về một vấn đề tôi sẽ không biết làm thế nào để giải quyết một cách hợp lý với SQL và một cơ sở dữ liệu quan hệ (có thể là lỗi của tôi).
Vì vậy, chúng tôi có một cơ sở dữ liệu (quan hệ phổ biến) với khoảng 30.000 sản phẩm. Không có gì lớn cho đến nay. Mỗi sản phẩm này có nhiều thuộc tính. Có những nhóm phổ biến như nhóm (dây cáp, ăng-ten, vỏ iphone ... khoảng 80), các loại (tương tự như các nhóm: xe hơi, hifi, mp3, chỉ 15), nhãn hiệu (30).
Sau đó đến dữ liệu kỹ thuật. Mỗi mặt hàng có nhiều trong số đó như màu sắc, chiều dài cáp, trọng lượng, khối lượng. khoảng 200 loại giá trị như vậy và hàng ngàn giá trị.
Và phức tạp nhất: Nhiều sản phẩm trong số đó thuộc về một số loại xe hơi (hoặc một vài trong số chúng) hoặc một loại thiết bị di động. Những thứ đó được phân cấp theo dạng như: kiểu thương hiệu (apple) (ipad) (1,2,3,4) và trong một số trường hợp tạo ra. (đối với ô tô, nó tương tự nhau, mặc dù thay vì thế hệ chúng ta đã xây dựng nhiều năm)
Vấn đề bước một:
Chúng tôi muốn số lượng sản phẩm cho từng thuộc tính đó. Có bao nhiêu màu đỏ? Có bao nhiêu trong nhóm cáp? Và như thế.
Điều này có thể được giải quyết một phần với SQL. Nó sẽ là rất nhiều truy vấn và khá xấu xí nhưng tôi nghĩ là có thể. Có thể chậm nhưng chúng ta có thể làm điều đó thậm chí còn xấu xí hơn và giữ các quầy trong mỗi bảng và cập nhật mỗi khi thay đổi. Đặc biệt khó khăn với những thuộc tính mà một sản phẩm có thể có nhiều (như hoạt động với iPhone và 12 điện thoại di động khác)
Nhưng đây là vấn đề bước hai:
Khi một khách hàng chọn một thuộc tính (nói rằng anh ta chỉ muốn nhìn thấy các sản phẩm có màu đỏ), chúng tôi muốn cập nhật tất cả các bộ đếm đó trong thời gian thực. Điều này có nghĩa là chúng ta sẽ có các truy vấn cực kỳ phức tạp (dù sao cũng không đủ nhanh) hoặc giữ các bộ đếm cho các kết hợp thuộc tính có thể (hàng tỷ).
Khi tôi bắt đầu dự án này, họ đã cho tùy chọn bộ đếm thử và thực hiện điều này cho một tập hợp con rất nhỏ của các thuộc tính (nhóm, phân loại, nhãn hiệu). Mã này là xấu xí, lỗi và chậm. Ngoài ra, bây giờ họ có một cái bàn với các quầy lớn hơn nhiều so với bàn sản phẩm.
Sử dụng các khía cạnh của Apache Solr thực sự là giải pháp. Làm phẳng các bảng thành một danh sách Tài liệu (mỗi sản phẩm) được phép lấy tất cả dữ liệu này trong thời gian thực với các truy vấn đơn giản hơn nhiều.