Redis
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> Redis

Công cụ tìm đối sánh đa thông số với Redis

Những gì bạn đang cố gắng làm ở đây là một chỉ mục đảo ngược.

Đối với mỗi cột, hãy ánh xạ đến một "tập hợp". Sau đó, bạn có thể giao nhau giữa các tập hợp để nhận được kết quả.

Vì vậy, APPLE: RED ROUND FRUIT sẽ ánh xạ đến các phụ trang sau:

SADD p1:RED APPLE
SADD p2:ROUND APPLE
SADD p3:FRUIT APPLE

Sau đó, giả sử tôi muốn truy vấn * ROUND FRUIT , Tôi sẽ làm:

SINTER p2:ROUND p3:FRUIT

Lệnh này đang lấy phần giao nhau của các mục trong p2:ROUND đặt và p3:FRUIT đặt. Thao tác này sẽ trả về tất cả các mục là ROUNDFRUIT , không quan tâm p1 gì là.

Một số ví dụ khác:

SMEMBERS p1:GREEN
SINTER p1:RED p2:ROUND p3:FRUIT
SUNION p1:RED p1:GREEN

Câu trả lời ở trên của tôi sẽ sử dụng một số sức mạnh tính toán vì phép toán giao nhau là O(N*M) . Đây là một cách làm tốn nhiều bộ nhớ hơn, nhưng sẽ truy xuất nhanh hơn vì nó tính toán trước các chỉ mục một cách hiệu quả.

Đối với mỗi tổ hợp thuộc tính, hãy tạo một khóa lưu trữ một tập hợp:

Vì vậy, APPLE: RED ROUND FRUIT sẽ ánh xạ đến các phụ trang sau:

SADD RED:ROUND:FRUIT APPLE
SADD :ROUND:FRUIT APPLE
SADD RED::FRUIT APPLE
SADD RED:ROUND: APPLE
SADD RED:: APPLE
SADD :ROUND: APPLE
SADD ::FRUIT APPLE
SADD ::: APPLE

Sau đó, để truy vấn, bạn chỉ cần truy cập vào khóa tương ứng. Ví dụ:* ROUND FRUIT đơn giản sẽ là

SMEMBERS :ROUND:FRUIT

Rõ ràng, quy mô này không tốt chút nào về bộ nhớ khi bạn có nhiều thứ nguyên, nhưng sẽ cực kỳ linh hoạt khi truy xuất kết quả.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. vấn đề xác thực với kênh riêng laravel và laravel-echo-server

  2. Làm cách nào để dừng redis-server?

  3. Sự khác biệt / tính năng chính giữa các hệ thống NoSQL được biết đến nhiều nhất

  4. Có thư viện redis chặn cho node.js không?

  5. Azure có hỗ trợ những thứ như mongodb và redis không?