Yêu cầu thg 7 2, 2020 4:12 CH 120 0 1
  • 120 0 1
0

Thiết kế dữ liệu cho TAGS

Chia sẻ
  • 120 0 1

Xin chào các anh chị, lại là em đây. Lần này em đang tìm giải pháp tối ưu nhất cho việc thiết kế dữ liệu cho TAGS. Trong bài toán này em ví dụ có 3 bảng: Items, Blogs, Tags. Với truy vấn tag sẽ ra Items + Blogs tương ứng. Em đã làm bằng các phương pháp sau và thấy chưa ổn lắm, em sẽ ghi chú bên dưới.

  1. Nhúng tag_ids vào Items, Blogs bằng chuỗi phân cách bằng dấu phảy (Cách này hiệu quả khi truy vấn Item và listing tags, dữ liệu lớn cũng OK)
  2. Nhúng tags_ids vào Items, Blogs sử dụng mảng (Cách này không khác cách trên là mấy tuy nhiên khá hiệu quả khi truy vấn ngược từ Tag_id ra Items, Blogs, dữ liệu lớn cũng OK)
  3. Thêm một bảng nữa là TagRelations: bảng có các fields: tag_id, foreign_id, foreign_type (Bảng này tỏ ra hiệu quả với dữ liệu ít, nhưng với dữ liệu lớn từ 100k items thì tốn tài nguyên Index). ví dụ có 100k items với mỗi items có 5 tags vậy sẽ có 500k records trong bảng Tagrelations. 😂😂 Ngoài ra còn cách nào hiệu quả hơn với dữ liệu lớn mong anh chị chỉ giáo.

1 CÂU TRẢ LỜI


Đã trả lời thg 7 2, 2020 11:59 CH
Đã được chấp nhận
+1

theo mình thì mình sẽ làm theo cách 3, vì tags có thể dùng chung giữa nhiều item, blog, chứ kp là mỗi item và blog đều có những tag khác nhau. Và kể cả là khác nhau đi nữa thì 500k record cũng chưa hẳn quá lớn. Và khi bạn query bạn cũng đâu query hết cả bảng tag ra phải không nào?

Chia sẻ
Avatar Nguyen @kenjisaitovn
thg 7 3, 2020 4:21 SA

Vâng, về cơ bản cách 3 sẽ truy vấn tốt hơn nhiều. Chỉ có điều với số lượng dữ liệu lớn có ảnh hưởng nhiều tới performance không?

Avatar Dương Mạnh Hoàng @duong.manh.hoang
thg 7 3, 2020 6:25 SA

@kenjisaitovn không đâu bạn, miễn là bạn query đúng cách, đừng để các queries bị lặp lại nhiều lần

Avatar Nguyen @kenjisaitovn
thg 7 3, 2020 6:41 SA

@duong.manh.hoang Cám ơn anh đã chỉ giáo 😄

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí