Điều này nghe giống như một dự án lớn. Mức độ phức tạp sẽ tăng khá nhanh dù bạn có muốn hay không.
Điều đầu tiên tôi sẽ làm là bắt đầu bằng cách tạo tài liệu cho API.
Khi bạn có tài liệu, bạn có thể vẽ các yêu cầu cho dự án của mình. Những điều bạn viết trong câu hỏi là một số loại yêu cầu, nhưng quá trừu tượng, hình ảnh quá lớn như thế nào.
Khi bạn có yêu cầu, bạn bắt đầu nghĩ về kỹ thuật và cấu trúc phần mềm.
Trong bước này, chia nhỏ mọi thứ theo ý kiến của tôi là con đường để đi. Điều này sẽ giúp mọi thứ dễ dàng hơn trong việc quản lý. Tìm lỗi cổ chai, v.v.
Tôi không biết điều gì sẽ kích hoạt trong hệ thống của bạn cho 'nếu người dùng sẽ nhận được huy hiệu'. Vì vậy, tôi đang sử dụng tương tự.
Để công bằng, các bạn đang làm công việc tuyệt vời để xử lý tất cả các yêu cầu này trong thời gian thực. Ý tôi là, có vẻ như họ đang kiểm tra xem tôi có nhận được huy hiệu theo mọi yêu cầu hay không. Vì vậy, đăng ký của tôi đang kích hoạt một số thuật toán ở phía máy chủ để xem lại lịch sử đăng ký và kiểm tra của tôi, quy tắc huy hiệu, kết hợp chúng lại với nhau, tạo huy hiệu xứng đáng của tôi và hiển thị huy hiệu mới của tôi để phản hồi. Nghe có vẻ đúng không? Vâng, nó là!
Tôi không tin rằng họ đang làm tất cả công việc này song song. Điều này sẽ là quá nhiều công việc cho một máy chủ. Mặc dù, huy hiệu fourquare của tôi không tương tác với bất kỳ người dùng nào khác (dễ dàng hơn nhiều), vì vậy việc xử lý song song không nằm ngoài câu hỏi.
Ý tưởng đầu tiên về cách thức hoạt động của mạng. Load balancer chuyển tiếp yêu cầu của tôi đến máy chủ không tải nặng. Và có tất cả công việc được thực hiện trong paralel. Càng tải, càng nhiều máy chủ được kích hoạt. Làm tất cả các tính toán cho phù hiệu trên bay chỉ sử dụng cơ sở dữ liệu nô lệ. Trình bày cho người dùng huy hiệu của anh ấy và gửi dữ liệu này trở lại làm chủ db. Điều này là có thể, vì huy hiệu không tương tác giữa những người dùng khác nhau. Một huy hiệu - một lịch sử người dùng cần thiết.
Một giải pháp khác là sử dụng bản đồ - giảm. Sử dụng nhà môi giới thư để xử lý đánh giá huy hiệu song song. Bạn nhận được yêu cầu. Gửi tin nhắn đến người môi giới tin nhắn. Thư được đáp xuống trên multiple workers trong đó một công nhân chỉ đang kiểm tra một quy tắc huy hiệu cụ thể đối với lịch sử người dùng. Cuối cùng, tính toán sẽ được thực hiện nhanh hơn nhiều.
Giới thiệu về cấu trúc db. Tôi nghĩ rằng không có cách nào xung quanh đi qua tất cả các db để thực sự tìm hiểu xem người dùng sẽ nhận được một huy hiệu hay không. Tôi sẽ đi với cách đơn giản, thẳng về phía trước để xử lý việc này. Chỉ cần tạo db có cấu trúc tốt bằng cách sử dụng các khóa ngoài, các kiểu cột thích hợp, các chỉ mục ở đúng vị trí và bạn sẽ ổn. Xây dựng nền tảng ổn định và chỉ tối ưu hóa khi cần thiết.
Nếu bạn thực sự mong muốn tối ưu hóa khi bắt đầu dự án (tôi nghĩ đó là ý tưởng tồi), tôi sẽ giữ tất cả dữ liệu liên quan đến huy hiệu trong các bảng được phân tách. Một bảng cho một huy hiệu có tất cả các cột cụ thể có liên quan đến huy hiệu đó.
Ví dụ: badge_restaurants (user_id, badge_id, current_level, checkin_count). Để nhận được huy hiệu nhà hàng mới, bạn sẽ chỉ cần kiểm tra nếu người dùng đã checkin_count + 1> = qty cần thiết và bạn được tự do không tìm thêm bất kỳ chi tiết nào.
Tất nhiên, đây không phải là giải pháp hoàn hảo. Trừu tượng hơn có thể được thêm vào để làm cho nó được thực hiện theo cách tinh vi hơn (không tạo ra hàng trăm bảng).Tuy nhiên, các huy hiệu phức tạp hơn sẽ thúc đẩy bạn tạo ra các giải pháp phức tạp hơn.
Cảm ơn câu trả lời của bạn, nhưng tôi không biết chính xác những gì tôi nên tìm kiếm ... – linkyndy
Có hai cách để thực hiện việc này. 1) Chuyển sang cài đặt drupal và cài đặt mô-đun này. 2) Kiểm tra tệp user_badges.install. Điều đó sẽ cung cấp cho bạn shema cho cơ sở dữ liệu. Sau đó kiểm tra user_badges.module để xem cách dữ liệu được biểu diễn. – josefnpat
Vì không có cách nào tôi có thể chuyển sang Drupal, tôi đã xem xét mã trong các tệp đó. Điều duy nhất tôi chưa hiểu là Drupal quản lý tự động gán huy hiệu cho người dùng như thế nào khi các cột mốc do quản trị viên xác định? Tôi đã chỉ nhìn thấy phần mà quản trị viên có thể gán huy hiệu theo cách thủ công. – linkyndy