How we built it: our new Articles feature for Stack Overflow for Teams

Bài tóm tắt Stack Overflow 2020 3. Quy mô lớn Độ khó: Dễ

Stack Overflow · 2020 · 3. Quy mô lớn · Độ khó: Dễ — bài gốc

Bối cảnh

  • Articles là loại nội dung dài mới trong Stack Overflow for Teams; phải hiện cùng câu hỏi/trả lời trong search, profile, thông báo theo tag, có vote và comment. Mỗi article có một "loại" (Knowledge Article, Announcement, How-To, Policy).

Thay đổi chính

  • Article là một loại Post trong bảng Posts sẵn có, không phải thực thể riêng; search trộn article với Q&A gần như không phải đổi logic.
  • Loại article là tag đặc biệt: sau khi cân nhắc bảng mới hay dùng Collections, chọn thêm một cột trên bảng Tags đánh dấu "tag bắt buộc của article", tạo các tag này khi Teams bật tính năng, bảo vệ khỏi bị xoá. Trong index search và trong bảng Posts (đã denormalize), chúng là tag thường; tìm theo loại chỉ là tìm theo tag, thêm toán tử is:article.
  • Lý do chính: không phải thêm field vào index search. Code của Stack Overflow công khai và của Teams gần như là một; đổi cấu trúc document trong index nghĩa là rebuild index trên mọi site và mọi Team, rất lâu.
  • Góp ý riêng tư (suggestions) dựng trên mô hình comment: thêm khái niệm "loại" cho comment (riêng tư, có thể "resolve") thay vì bảng mới hay flag tuỳ biến, để dùng lại được cho việc khác.

Vì sao

  • Theo tác giả, cái hay của thiết kế là sự đơn giản: ánh xạ khái niệm mới vào khái niệm cũ để mọi hệ con (search, profile, thông báo) tự hỗ trợ.

Bài học cho SWE

  • Trước khi thêm field vào index search dùng chung, tính chi phí reindex trên toàn bộ dữ liệu; mã hoá thông tin mới vào cấu trúc index đã có (ở đây là tag) có thể tránh hẳn việc đó.
  • Mở rộng một khái niệm sẵn có bằng "loại" thường rẻ hơn thêm thực thể mới.

Liên quan