2011-10-08 25 views
5

Để tham khảo, dưới đây là câu hỏi về SO mà tôi đã hỏi gần đây có liên quan đến câu hỏi này: How to model Friendship relationshipsTrong môi trường mạng xã hội, cách nào là cách dễ nhất để kiểm tra tình bạn trên toàn cầu?

Về câu hỏi đó, chúng tôi đã tìm ra cách hiển thị các mục nguồn cấp tin tức chỉ khi bạn bè đăng. Tuy nhiên, những gì tôi cần là lời khuyên về cách kiểm tra tình bạn một cách năng động hơn để nó có thể được sử dụng trong một số chức năng của trang web.

Ví dụ: tôi vừa cài đặt hệ thống nhận xét, cho phép người dùng đăng nhận xét về bài đăng tin tức. Tuy nhiên, điều này không bị giới hạn đối với bạn bè, và nó nên được (và sau đó nên được thực hiện tùy chọn bởi tác giả của bài viết).

Chỉ đăng tin tức cho bạn bè là hơi khác vì tôi đã nhận dữ liệu trực tiếp từ cơ sở dữ liệu và sử dụng các truy vấn phụ SELECT để chỉ nhận bài đăng của bạn bè của người dùng hiện tại. Tuy nhiên, trong ví dụ về nhận xét, tôi chỉ muốn hiển thị biểu mẫu bài đăng bình luận nếu người đó là bạn. Tôi không thực sự kéo bất cứ thứ gì từ cơ sở dữ liệu để chọn, sắp xếp và hiển thị.

Việc biết các vấn đề như thế này sẽ phát sinh nhiều lần trong toàn bộ trang web, cách đơn giản nhất để kiểm tra tình bạn là gì? Tôi bằng cách nào đó có thể kéo tất cả ID người dùng của bạn bè từ cơ sở dữ liệu vào mảng phiên của một loại nào đó và sau đó thực hiệnif(in_array($friends))bất cứ khi nào tôi cần xác định xem người đó có phải là bạn của người dùng hiện đã đăng nhập không? Off đầu của tôi, điều này nghe có vẻ như nó sẽ làm việc tốt, nhưng tôi muốn đầu vào của bạn đầu tiên.

Câu hỏi tôi đã liên kết ở trên giải thích cách bảng tình bạn của tôi hoạt động, trong trường hợp đó giúp bạn giúp tôi với điều này.

+0

'MY_DATA_ACCESS_LAYER.IS_FRIEND (my_id, other_id)' - Sử dụng cơ sở dữ liệu. Yêu cơ sở dữ liệu. Lo lắng về "những thứ khác" sau này. (Một phần mở rộng tầm thường là làm cho nó mất nhiều ID để xử lý cùng một lúc, vấn đề là: nếu nó ẩn trong DAL, nó không thực sự quan trọng và khi nào - nhưng thực sự * nếu * - hiệu suất * là * một vấn đề có nhiều cách để tiếp cận nó.) –

+0

@pst, bạn có thể giải thích rằng với tôi tốt hơn một chút không? Chính xác là gì 'MY_DATA_ACCESS_LAYER.IS_FRIEND (my_id, other_id)' và tôi sẽ sử dụng nó như thế nào? bạn có thể cung cấp một ví dụ? – vertigoelectric

+0

Nó là một phần của DAL (Lớp Truy cập Dữ liệu) và sẽ "sử dụng cơ sở dữ liệu". Cái tên này thật kinh khủng và được chọn để nổi bật. Các khung công tác khác nhau sẽ tạo điều kiện cho các phương pháp tiếp cận DAL khác nhau, nhưng có vẻ như điều này đã có mặt: Đó là, * không * lo lắng về phiên làm việc hoặc công cụ in_array.Chỉ lo lắng về việc "hạn chế sử dụng DB tầm thường" khi có trường hợp sử dụng hiệu năng * đã được chứng minh * không đáp ứng được các yêu cầu. –

Trả lời

0

Trên thực tế, bạn nên lưu trữ mảng bạn bè trong phiên. Điều gì sẽ xảy ra nếu một số bạn thêm một người bạn mới sau khi biến phiên được tạo ra? Nó không được cập nhật trong phiên.

Vì bạn sẽ kiểm tra danh sách bạn bè nhiều lần trên cùng một trang, tại sao không chỉ truy vấn và lưu trữ nó trong một mảng cục bộ mà bạn có thể tiếp tục sử dụng trên cùng một trang.

Khi trang hoàn thành thực thi, mảng sẽ bị hủy.

Về cơ bản, bạn sẽ chỉ truy vấn danh sách đó một lần.

Việc triển khai được đề xuất sẽ tuân theo lời khuyên của "pst" trong nhận xét ở trên và chỉ truy vấn mỗi khi bạn cần tìm mối quan hệ trước, vì điều đó rất đơn giản để triển khai. Sau đó, khi tốc độ truy vấn bắt đầu trở thành vấn đề, bạn chỉ có thể thay đổi nội bộ của phương thức đó để lưu vào danh sách bạn bè trong một mảng cục bộ khi nó được gọi đầu tiên để tăng tốc độ. (sử dụng bộ nhớ trao đổi để sử dụng bộ vi xử lý).

+0

Cảm ơn bạn đã trả lời. Vâng, như bây giờ, tôi có một truy vấn kiểm tra bảng 'friendships' cho một trận đấu hiện có, hợp lệ giữa hai người dùng. Nếu số hàng được tìm thấy không phải là số không thì tình bạn được xác định. Để sử dụng phương thức mảng cục bộ, tôi cần phải thay đổi truy vấn của mình để kéo tất cả các kết quả phù hợp hợp lệ từ bảng, và sau đó thử nghiệm với điều đó. Tôi nhận ra rằng ý tưởng mảng kém hiệu quả hơn. Tuy nhiên, nó đưa ra một câu hỏi mà tôi có. Liệu có một điểm mà trong đó bạn có thể truy vấn cơ sở dữ liệu quá thường xuyên, hay điều đó không thực sự quan trọng? – vertigoelectric

+0

Việc tôi thực hiện điều đó là truy vấn cơ sở dữ liệu đang rẻ hơn, sức mạnh cpu đang rẻ hơn. Về cơ bản, khả năng của máy tính ngày càng rẻ hơn. Vì vậy, điều đầu tiên bạn nên quan tâm là làm điều đúng. Làm cho nó hoạt động với logic chính xác trước. Sau đó, xem nếu nó cần phải được tối ưu hóa. Nếu nó chạy nhanh mà không có bất kỳ tối ưu hóa nào, thì bạn chỉ cần tiết kiệm rất nhiều thời gian. Nếu nó chạy chương trình, ít nhất mã của bạn có thể dễ dàng hiểu bởi bất cứ ai, bởi vì không có logic lạ để cố gắng tăng tốc mã. Nó sẽ làm cho các mã dễ dàng hơn để duy trì và tối ưu hóa. – iWantSimpleLife

+0

Bạn rất có thể sẽ cần phải viết mã, sau đó băng ghế dự bị đánh dấu nó chống lại điều kiện sống thực, sau đó bạn có thể quyết định nếu số lượng truy vấn là quá nhiều. Nhưng theo quy tắc chung, tôi cố gắng dừng lại ở 50 truy vấn trên mỗi trang PHP. – iWantSimpleLife

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