cuốn sách gpt4 ai đã làm

cơ sở dữ liệu - Tôi có thể thiết kế các khóa bằng cách nào để cải thiện hiệu suất của bộ Redis?

In lại Tác giả: Hồ Xil Thời gian cập nhật: 2023-11-01 11:13:28 26 4
mua khóa gpt4 Nike

Tôi có một bộ ID riêng lẻ được khóa theo từng tiểu bang

người/stateName:VA = {1,2,3,4,5,6} 
người/tên tiểu bang:TX = {7,8,9,10,11}
...

Tôi có bộ CMND của cá nhân thuộc công ty 1

người/công ty:1 = {2,6,7,10}

Trong ví dụ trên, nếu tôi muốn tìm tất cả những người thuộc công ty 1 và sống ở bang VA và TX, tôi sẽ làm như sau:

SUNIONSTORE người tạm thời/tiểu bangTên:Người VA/tiểu bangTên:TX
SINTERSTORE tempkey tempkey người/công ty:1

Trong toán học:(A ∪ B) ∩ C

Tuy nhiên, trong trường hợp của tôi, số lượng trạng thái không xác định, vì vậy bạn phải lặp qua danh sách các tập hợp trạng thái bạn muốn, kết hợp chúng và cuối cùng giao nó với các công ty (điều này bạn sẽ làm nếu bạn có nhiều công ty, thì quá trình phải được lặp lại)

foreach(trạng thái trong state_list){
SUNIONSTORE(tempkey_state,tempkey_state, 'people/stateName:{state}')
}
foreach(Số công ty trong danh sách công ty){
SUNIONSTORE(tempkey_company, tempkey_company, 'người/công ty:{companyName}')
}

SINTERSTORE(resultkey, tempkey_state, tempkey_company);

Trong kịch bản thực tế của tôi, mỗi bộ sưu tập đều rất lớn, với 10.000 đến 1.000.000 thành viên. Nhưng quá trình này có thể chậm (chậm hơn SQL trong một số trường hợp)

Theo tôi hiểu thì điểm nghẽn là CỬA HÀNG SUNION, vì nó tăng lên sau mỗi lần lặp và O(N) lớn

Có cách nào để hoàn thành điều tôi muốn nhanh hơn không? Một số giải pháp tôi nghĩ ra

  • Tạo một không gian khóa cho các trạng thái thuộc công ty, ví dụ: cá nhân/công ty:1/state:VA Điều này sẽ giảm đáng kể thời gian của tôi nhưng sẽ tăng đáng kể số lượng khóa tôi phải lưu trữ
  • Dự phòng sang SQL nếu redis chậm đối với một truy vấn cụ thể

Suy nghĩ của bạn là gì?

câu trả lời hay nhất

Tập hợp đại số bao gồm các luật giao hoán và phân phối, vì vậy:

(A ∪ B) ∩ C = (C ∩ A) ∪ (C ∩ B)

Redis sử dụng luật giao hoán để tối ưu hóa các phép tính giao nhau: nó sắp xếp các bộ sưu tập theo kích thước trước khi áp dụng thuật toán của mình để giảm thiểu số lượng thao tác.

Hơn nữa, hiệu suất của các hoạt động hợp và giao phụ thuộc chủ yếu vào chi phí tạo đối tượng (liên quan đến cấp phát bộ nhớ) hơn là thuật toán hợp/giao thực tế.

Trong ví dụ của bạn, tôi sẽ nói rằng xác suất mà bang có một tập hợp lớn sẽ cao hơn xác suất mà công ty có một tập hợp lớn, vì vậy tôi muốn thực hiện:

ĐA
SINTERSTORE tmp1 người/công ty:1 người/tiểu bangTên:VA
SINTERSTORE tmp2 người/công ty:1 người/tiểu bangTên:TX
SUNION tmp1 tmp2
DEL tmp1 tmp2
THỰC HIỆN

Ở đây, các đối tượng duy nhất thực sự được tạo trong không gian tên Redis đã là kết quả của sự giao nhau, điều này có thể dẫn đến ít đối tượng hơn. Lưu ý rằng liên kết cuối cùng không lưu trữ kết quả mà trả lại trực tiếp cho khách hàng.

Hãy chắc chắn sử dụng đường ống để giảm thiểu số lượng các chuyến đi khứ hồi mạng.

Nếu bạn có một số công ty, bạn có thể áp dụng liên kết trước bộ sưu tập của họ (nếu quy mô trung bình của bộ sưu tập công ty không quá cao) hoặc bạn có thể lặp lại mô hình này nhiều lần cho mỗi công ty (nếu các công ty quá lớn).

Giới thiệu về cơ sở dữ liệu - Tôi có thể thiết kế các khóa bằng cách nào để cải thiện hiệu suất của bộ Redis? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/31211926/

26 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress