5

Đây là một câu hỏi phỏng vấn: thiết kế một back-end phân phối để tự động hoàn thành.Back-end để tự động hoàn thành

Tôi sẽ trả lời như sau:

Tự động hoàn thành là tìm kiếm trong từ điển theo hậu tố nhất định. Từ điển có thể được tổ chức dưới dạng trie. Từ điển được xây dựng từ các truy vấn thường xuyên nhất nhưng đó là một câu chuyện khác.

Bây giờ tôi giả định từ điển không thay đổi thường xuyên (ví dụ: mỗi ngày một lần thay vì mỗi mili giây). Do đó, chúng tôi chỉ có thể sao chép từ điển trên một số máy chủ xử lý các truy vấn tự động hoàn thành (ví dụ: với cân bằng tải và chính sách xoay vòng).

Chúng ta cũng nên nghĩ về từ điển nhưng đây cũng là một câu chuyện khác.

Có hợp lý không? Tui bỏ lỡ điều gì vậy?

+0

câu hỏi Kiến trúc thực sự nên được hỏi cô ấy e: http://programmers.stackexchange.com/ Tôi không thực sự quan tâm nhưng một số làm. –

Trả lời

1

Dường như câu hỏi phù hợp. Ý tưởng trie thực sự rất hay và sẽ giúp bạn tìm kiếm trong log(n). Tần số thay đổi phụ thuộc vào thông tin, vì vậy tôi sẽ không nói chính xác thời gian, nhưng tôi sẽ điều chỉnh nó một cách tự động .. Giả sử rằng bạn thay đổi một lần một ngày, nó sẽ là tốt đẹp bao nhiêu cây đã thay đổi. Và bạn có thể đưa ra một ranh giới (ví dụ 10%). Nếu vượt quá ranh giới, bạn có thể cập nhật thường xuyên hơn các trie. Nó cũng phụ thuộc vào tầm quan trọng của việc cập nhật, bởi vì trong hầu hết các trường hợp nó không phải là. Ý tưởng cân bằng tải cũng tốt.

1

Hãy xem những gì SOLR 4.0 (solr có trie và được phân phối). Phụ thuộc nhiều vào cách họ mong đợi tự động hoàn thành hoạt động. Nếu nó chỉ là một wild card filter hơn một cái gì đó giống như một trie sẽ được tốt cho ASCII đơn giản ... nếu không nó sẽ phức tạp hơn nếu họ muốn tự động điều chỉnh. Điều đó đang được nói rằng tôi nghi ngờ một trie sẽ giúp bạn có được kết quả tốt nếu một lĩnh vực chung của nó (tức là không phải là một SKU hoặc ID chuyên ngành) nếu không bạn sẽ có một trie khổng lồ và không hiệu quả.

Hãy xem tại địa chỉ:

Các vấn đề liên quan