[design-patterns] كيفية تنفيذ دفق النشاط في شبكة اجتماعية


2 Answers

هذا هو تنفيذ دفق النشاط ، باستخدام mysql. هناك ثلاث فئات: النشاط ، ActivityFeed ، المشترك.

يمثل النشاط إدخال نشاط ، ويبدو جدوله كما يلي:

id
subject_id
object_id
type
verb
data
time

Subject_id هو معرف الكائن الذي يقوم بتنفيذ الإجراء ، object_id معرف الكائن الذي يتلقى الإجراء. type verb يصف الإجراء نفسه (على سبيل المثال ، إذا كان المستخدم يضيف تعليقًا إلى مقالة ، فسيكون "تعليق" و "تم إنشاؤه" على التوالي) ، تحتوي البيانات على بيانات إضافية لتجنب الصلات (على سبيل المثال ، يمكن أن تحتوي على اسم الموضوع واللقب ، وعنوان المقالة وعنوان URL ، وجسم التعليق وما إلى ذلك).

ينتمي كل نشاط إلى واحد أو أكثر من ActivityFeeds ، وترتبط بجدول يبدو كالتالي:

feed_name
activity_id

في طلبي لدي خلاصة واحدة لكل مستخدم وخلاصة واحدة لكل عنصر (عادةً ما تكون المقالات في المدونات) ، ولكن يمكن أن يكون كل ما تريد.

عادة ما يكون المشترك مستخدمًا لموقعك ، ولكن يمكن أيضًا أن يكون أي كائن في نموذج الكائن الخاص بك (على سبيل المثال يمكن الاشتراك في مقالة feed_action من خالقه).

كل مشترك ينتمي إلى واحد أو أكثر من ActivityFeeds ، وكما هو موضح أعلاه ، فهي مرتبطة بجدول ارتباط من هذا النوع:

feed_name
subscriber_id
reason

يشرح حقل reason هنا سبب اشتراك المشترك في الخلاصة. على سبيل المثال ، إذا كان أحد المستخدمين يضع إشارة على مشاركة مدونة ، فإن السبب هو "الإشارة المرجعية". ويساعدني ذلك لاحقًا في تصفية الإجراءات للإشعارات للمستخدمين.

لاسترداد نشاط مشترك ، أقوم بإجراء ارتباط بسيط بالجداول الثلاثة. الانضمام سريع لأنني اخترت بعض الأنشطة بفضل حالة WHERE التي تبدو الآن - time > some hours . أتجنب الصلات الأخرى بفضل حقل البيانات في جدول النشاط.

مزيد من التوضيح في مجال reason . إذا أردت ، على سبيل المثال ، تصفية إجراءات إشعارات البريد الإلكتروني للمستخدم ، وقام المستخدم بوضع إشارة مرجعية على مشاركة مدونة (وبالتالي فهو يشترك في خلاصة النشر مع "الإشارة المرجعية") ، لا أريد أن يتلقى المستخدم إشعارات البريد الإلكتروني حول الإجراءات على هذا العنصر ، في حين أنه إذا قام بالتعليق على المشاركة (وبالتالي فإنه يشترك في تغذية النشر مع "تعليق" سبب) أريد أن يتم إبلاغه عندما يضيف المستخدمون الآخرون تعليقات على نفس المشاركة. يساعدني مجال العقل في هذا التمييز (قمت بتطبيقه من خلال فئة ActivityFilter) ، إلى جانب تفضيلات الإشعارات للمستخدم.

Question

أقوم بتطوير شبكتي الاجتماعية الخاصة بي ، ولم أجد على الويب أمثلة لتنفيذ تدفق إجراءات المستخدمين ... على سبيل المثال ، كيفية تصفية الإجراءات لكل مستخدم؟ كيفية تخزين أحداث العمل؟ ما نموذج البيانات ونموذج الكائن الذي يمكنني استخدامه لتدفق الإجراءات والإجراءات الخاصة بها؟




أعتقد أنه يمكن العثور على تفسير حول كيفية عمل نظام الإشعارات على مواقع الويب الكبيرة في سؤال تجاوز سعة المكدس ، كيف تقوم مواقع الشبكات الاجتماعية باحتساب تحديثات الأصدقاء؟ في إجابة جيريمي وول . يقترح استخدام رسالة Qeue وهو يشير إلى برنامجين مفتوحين المصدر ينفذهما :

  1. RabbitMQ
  2. Apache QPid

انظر أيضا السؤال ما هي أفضل طريقة لتنفيذ تيار النشاط الاجتماعي؟




بدلاً من أن تتجول بنفسك ، يمكنك البحث عن خدمة تابعة لجهة خارجية يتم استخدامها عبر واجهة برمجة التطبيقات. لقد بدأت واحد يسمى Collabinate ( http://www.collabinate.com ) الذي يحتوي على خلفية قاعدة بيانات الرسم البياني وبعض خوارزميات متطورة إلى حد ما للتعامل مع كميات كبيرة من البيانات بطريقة متزامنة عالية الأداء. على الرغم من عدم توفر نطاق الوظائف الذي يقول Facebook أو Twitter ، إلا أنه أكثر من كافٍ لمعظم حالات الاستخدام حيث تحتاج إلى بناء تدفقات الأنشطة أو الخلاصات الاجتماعية أو وظائف تدوين المصغر في تطبيق ما.




Related