อะไรคือวิธีที่ดีที่สุดในการใช้สตรีมกิจกรรมโซเชียล [ปิด]


265

ฉันสนใจที่จะรับฟังความคิดเห็นของคุณซึ่งเป็นวิธีที่ดีที่สุดในการดำเนินการสตรีมกิจกรรมโซเชียล (Facebook เป็นตัวอย่างที่โด่งดังที่สุด) ปัญหา / ความท้าทายที่เกี่ยวข้องคือ:

  • กิจกรรมประเภทต่าง ๆ (การโพสต์การแสดงความคิดเห็น .. )
  • วัตถุประเภทต่าง ๆ (โพสต์ความคิดเห็นภาพถ่าย .. )
  • ผู้ใช้ 1-n ที่เกี่ยวข้องกับบทบาทที่แตกต่างกัน ("ผู้ใช้ x ตอบกลับความคิดเห็นของผู้ใช้ในโพสต์ Z ของผู้ใช้")
  • มุมมองที่แตกต่างกันของรายการกิจกรรมเดียวกัน ("คุณแสดงความคิดเห็น .. " กับ "เพื่อนของคุณ x แสดงความคิดเห็น" กับ "ผู้ใช้ x แสดงความคิดเห็น .. " => 3 การเป็นตัวแทนของกิจกรรม "ความคิดเห็น")

.. และอีกมากมายโดยเฉพาะอย่างยิ่งถ้าคุณนำมันไปสู่ความซับซ้อนระดับสูงอย่างที่ Facebook ทำเช่นการรวมรายการกิจกรรมต่าง ๆ ไว้ในที่เดียว ("ผู้ใช้ x, y และ z แสดงความคิดเห็นในภาพถ่ายนั้น"

ความคิดหรือพอยน์เตอร์ใด ๆ ในรูปแบบเอกสาร ฯลฯ ในแนวทางที่ยืดหยุ่นมีประสิทธิภาพและมีประสิทธิภาพมากที่สุดในการใช้ระบบเช่นแบบจำลองข้อมูล ฯลฯ จะได้รับการชื่นชม

แม้ว่าปัญหาส่วนใหญ่จะเป็นแพลตฟอร์มที่ไม่เชื่อเรื่องพระเจ้า แต่ฉันก็มีโอกาสที่จะนำระบบดังกล่าวไปใช้กับ Ruby on Rails

คำตอบ:


143

ฉันได้สร้างระบบดังกล่าวและฉันใช้วิธีนี้:

ตารางฐานข้อมูลที่มีคอลัมน์ต่อไปนี้: id, userId, type, data, time

  • userIdเป็นผู้ใช้ที่สร้างกิจกรรม
  • typeเป็นประเภทของกิจกรรม (เช่นโพสต์บล็อกเขียนเพิ่มภาพถ่ายแสดงความคิดเห็นในรูปภาพของผู้ใช้)
  • dataเป็นวัตถุที่ต่อเนื่องกับ meta-data สำหรับกิจกรรมที่คุณสามารถใส่ในสิ่งที่คุณต้องการ

สิ่งนี้ จำกัด การค้นหา / การค้นหาคุณสามารถทำได้ในฟีดสำหรับผู้ใช้เวลาและประเภทกิจกรรม แต่ในฟีดกิจกรรมประเภท facebook นี่ไม่ได้ จำกัด อยู่เพียงแค่ และมีดัชนีที่ถูกต้องบนโต๊ะที่มีการค้นหาอย่างรวดเร็ว

ด้วยการออกแบบนี้คุณจะต้องตัดสินใจว่าข้อมูลเมตาแต่ละประเภทของเหตุการณ์ควรมีอะไรบ้าง ตัวอย่างเช่นกิจกรรมฟีดสำหรับภาพถ่ายใหม่อาจมีลักษณะเช่นนี้:

{id:1, userId:1, type:PHOTO, time:2008-10-15 12:00:00, data:{photoId:2089, photoName:A trip to the beach}}

คุณสามารถเห็นได้ว่าแม้ว่าชื่อของภาพถ่ายจะถูกเก็บไว้ในตารางอื่นที่มีรูปถ่ายอย่างแน่นอนและฉันสามารถเรียกชื่อจากที่นั่นได้ฉันจะทำซ้ำชื่อในเขตข้อมูลเมตาดาต้าเพราะคุณไม่ต้องการทำ เข้าร่วมใด ๆ ในตารางฐานข้อมูลอื่น ๆ ถ้าคุณต้องการความเร็ว และในการแสดงพูด 200 เหตุการณ์ที่แตกต่างจากผู้ใช้ 50 คนคุณต้องการความเร็ว

จากนั้นฉันมีคลาสที่ขยายคลาส FeedActivity พื้นฐานสำหรับการแสดงผลรายการกิจกรรมประเภทต่างๆ การจัดกลุ่มของเหตุการณ์จะสร้างขึ้นในรหัสการแสดงผลเช่นกันเพื่อป้องกันความซับซ้อนจากฐานข้อมูล


3
ใช่ถูกต้องแล้ว เมื่อเร็ว ๆ นี้ฉันได้ใช้ MongoDB ( mongodb.org ) ในไม่กี่โครงการซึ่งวิธีการแบบแผนทำให้มันเหมาะมากสำหรับการสร้างกระแสกิจกรรมทางสังคมที่มีประสิทธิภาพดีซึ่งเป็นไปตามการออกแบบนี้
heyman

6
TheApprentice: ใช่คุณอาจต้องการที่จะโยนในฟิลด์ชื่อผู้ใช้เช่นกัน ในระบบของเราเราแสดงเฉพาะเหตุการณ์ที่สร้างโดยเพื่อนของผู้ใช้และฉันเชื่อว่าเรามีแผนที่ของชื่อผู้ใช้ของเพื่อน -> ชื่อผู้ใช้ในหน่วยความจำดังนั้นการค้นหาชื่อผู้ใช้ไม่จำเป็นต้องเข้าร่วมและรวดเร็ว
heyman

2
คุณจะต้องจัดการกับกรณีนั้นด้วยตนเอง อาจเป็นการดีที่สุดถ้ารูปถูกลบ (ค้นหารายการฟีดในฟีดของผู้ใช้และลบ / อัปเดต)
heyman

21
ฉันไม่เข้าใจคำตอบนี้มากนัก การสร้างตารางอย่างง่ายจะแปลเป็นฟีดกิจกรรมที่มีน้ำหนักคล้ายกับ Facebook ได้อย่างไร สิ่งที่ทำทั้งหมดคือการเก็บกิจกรรมทั้งหมด คำถามใดเกี่ยวกับวิธีเปลี่ยนตารางข้อมูลเป็นฟีดกิจกรรมถ่วงน้ำหนักแบบไดนามิก
ChuckKelly

4
@ ChuckKelly: ถ้าฉันจำได้ถูกต้องย้อนกลับไปในปี 2008 เมื่อฉันเขียนคำตอบฟีด Facebook ไม่ได้ให้น้ำหนักเลย มันเป็นเพียงฟีดตามลำดับเหตุการณ์ที่มีกิจกรรมทั้งหมดจากเพื่อนของคุณ
heyman

117

นี่เป็นการนำเสนอที่ดีมากโดยสรุปว่า Etsy.com ทำกิจกรรมของพวกเขาให้เป็นกระแสได้อย่างไร มันเป็นตัวอย่างที่ดีที่สุดที่ฉันได้พบในหัวข้อแม้ว่าจะไม่เจาะจงเฉพาะทางรถไฟ

http://www.slideshare.net/danmckinley/etsy-activity-feeds-architecture


21
^^ เพราะคุณต้องกลับมาที่โซหลังจากเยี่ยมชมเว็บไซต์ lol
Stephen Corwin

1
การนำเสนอที่ยอดเยี่ยมซึ่งอธิบายในรายละเอียดว่าระบบทำงานอย่างไรบนเว็บไซต์ที่มีการเข้าชมสูง
ramirami

44

เราได้เปิดแหล่งที่มาของวิธีการของเรา: https://github.com/tschellenbach/Stream-Framework ปัจจุบันห้องสมุดโอเพ่นซอร์สที่ใหญ่ที่สุดมุ่งแก้ไขปัญหานี้

ทีมเดียวกันซึ่งสร้าง Stream Framework ยังมี API โฮสต์ซึ่งจัดการความซับซ้อนให้คุณ ดูที่getstream.ioมีไคลเอนต์สำหรับ Node, Python, Rails และ PHP

นอกจากนี้ดูที่โพสต์ความสามารถในการปรับขนาดสูงนี้เราอธิบายการตัดสินใจออกแบบบางส่วนที่เกี่ยวข้อง: http://highscalability.com/blog/2013/10/28/design-decisions-for-scaling-your-high-traffic- feeds.html

บทช่วยสอนนี้จะช่วยคุณตั้งค่าระบบเช่นฟีดของ Pinterest โดยใช้ Redis การเริ่มต้นใช้งานค่อนข้างง่าย

หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการออกแบบฟีดฉันขอแนะนำให้อ่านบทความที่เราใช้ Feedly อยู่:

แม้ว่า Stream Framework นั้นเป็น Python แต่ก็ไม่ได้ยากเกินกว่าที่จะใช้จากแอพ Ruby คุณสามารถเรียกใช้เป็นบริการและติดกับ http API เล็ก ๆ ไว้ข้างหน้าได้ เรากำลังพิจารณาเพิ่ม API เพื่อเข้าถึง Feedly จากภาษาอื่น ๆ ในขณะนี้คุณจะต้องแสดงบทบาทของคุณเอง


19

ปัญหาที่ใหญ่ที่สุดที่มีกระแสเหตุการณ์คือการมองเห็นและประสิทธิภาพ; คุณต้อง จำกัด กิจกรรมที่แสดงเป็นกิจกรรมที่น่าสนใจสำหรับผู้ใช้นั้นและคุณต้องเก็บระยะเวลาในการจัดเรียงและระบุเหตุการณ์ที่สามารถจัดการได้ ฉันสร้างเครือข่ายสังคมขนาดเล็ก ฉันพบว่าในระดับขนาดเล็กการรักษาตาราง "เหตุการณ์" ในฐานข้อมูลทำงานได้ แต่มันจะกลายเป็นปัญหาด้านประสิทธิภาพภายใต้การโหลดระดับปานกลาง

ด้วยกระแสของข้อความและผู้ใช้ที่มากขึ้นจึงเป็นการดีที่สุดที่จะใช้ระบบการส่งข้อความซึ่งกิจกรรมจะถูกส่งเป็นข้อความไปยังแต่ละโปรไฟล์ ซึ่งหมายความว่าคุณไม่สามารถสมัครรับข้อมูลเหตุการณ์ของผู้คนและดูกิจกรรมก่อนหน้าได้อย่างง่ายดาย แต่คุณกำลังแสดงกลุ่มข้อความขนาดเล็กเมื่อคุณต้องการแสดงผลสตรีมสำหรับผู้ใช้เฉพาะ

ฉันเชื่อว่านี่เป็นข้อบกพร่องการออกแบบดั้งเดิมของ Twitter ฉันจำได้ว่าอ่านว่าพวกเขากำลังตีฐานข้อมูลเพื่อดึงและกรองเหตุการณ์ของพวกเขา สิ่งนี้มีทุกอย่างเกี่ยวกับสถาปัตยกรรมและไม่มีอะไรเกี่ยวข้องกับ Rails (ซึ่งน่าเสียดาย) ที่ให้กำเนิด "meme ruby ​​not scale" ฉันเพิ่งเห็นงานนำเสนอที่นักพัฒนาใช้Simple Queue Serviceของ Amazon เป็นแบ็กเอนด์การส่งข้อความของพวกเขาสำหรับแอปพลิเคชันที่มีลักษณะคล้ายทวิตเตอร์ซึ่งจะมีความสามารถในการปรับขนาดที่สูงขึ้น - มันอาจคุ้มค่า .


ทิมคุณมีโอกาสที่จำชื่อของงานนำเสนอหรือผู้นำเสนอหรือไม่?
Danita

มันเป็นงานนำเสนอ Ignite Boston ของ Oreilly และ Associate ของ Boston ทั้งหมายเลข 3 หรือ 4- ฉันเชื่อว่าผู้นำเสนอมีหนังสือเกี่ยวกับมาตราส่วน RoR กับ Oreilly ขออภัยฉันไม่สามารถเจาะจงมากขึ้น!
Tim Howland

ขอบคุณ Tim :) อย่างไรก็ตามคุณหมายความว่าอย่างไรกับ "เครือข่ายสังคมขนาดเล็ก"? จำนวนผู้ใช้หรือผู้ใช้ที่ใช้งานอยู่ในช่วงเวลาหนึ่ง
Danita

3
ในกรณีที่ใคร ๆ ก็ต้องการฉันคิดว่านี่เป็นการนำเสนอที่ Tim กำลังพูดถึง: "Dan Chak - การปรับขนาดปัญหาของคุณ" Radar.oreilly.com/2008/09/ignite-boston-4----videos -uplo.html
Danita

ขนาดเล็กในกรณีนี้คือ "select * จากเหตุการณ์ที่ event.is มองเห็นได้สำหรับผู้ใช้รายนี้" ส่งคืนผลลัพธ์ในเวลาน้อยกว่าหนึ่งหรือสองวินาทีคิดเป็นสองแสนแถวของเหตุการณ์
Tim Howland

12

หากคุณยินดีที่จะใช้ซอฟต์แวร์แยกต่างหากฉันขอแนะนำเซิร์ฟเวอร์ Graphity ซึ่งแก้ปัญหาได้อย่างแน่นอนสำหรับสตรีมกิจกรรม (การสร้างที่ด้านบนของฐานข้อมูลกราฟ neo4j)

อัลกอริทึมได้รับการดำเนินการเป็นเซิร์ฟเวอร์ REST แบบสแตนด์อโลนเพื่อให้คุณสามารถโฮสต์เซิร์ฟเวอร์ของคุณเองเพื่อส่งกระแสข้อมูลกิจกรรม: http://www.rene-pickhardt.de/graphity-server-for-social-activity-streams-released-gplv3 /

ในกระดาษและเกณฑ์มาตรฐานฉันแสดงให้เห็นว่าการดึงกระแสข่าวขึ้นอยู่กับจำนวนเชิงเส้นของรายการที่คุณต้องการเรียกคืนโดยไม่มีความซ้ำซ้อนใด ๆ ที่คุณจะได้รับจากการทำให้ข้อมูลผิดปกติ:

http://www.rene-pickhardt.de/graphity-an-efficient-graph-model-for-retrieving-the-top-k-news-feeds-for-users-in-social-networks/

ที่ลิงค์ด้านบนคุณจะพบกับ screencasts และเกณฑ์มาตรฐานของวิธีการนี้ (แสดงให้เห็นว่ากราฟจะสามารถดึงกระแสข้อมูลมากกว่า 10k ต่อวินาที)


10

ฉันเริ่มใช้ระบบเช่นนี้เมื่อวานนี้นี่คือที่ที่ฉันต้อง ...

ฉันสร้างคลาสStreamEventด้วยคุณสมบัติId , ActorId , TypeId , Date , ObjectIdและ hashtable ของคู่คีย์ / ค่าDetailsเพิ่มเติม นี้มีตัวแทนอยู่ในฐานข้อมูลที่StreamEventตาราง ( Id , ActorId , TypeId , วันที่ , มี objectid ) และStreamEventDetailsตาราง ( StreamEventId , DetailKey , DetailValue )

ActorId , TypeIdและมี objectidอนุญาตให้มีการจัดกิจกรรมเรื่องกริยาวัตถุจะถูกจับ (และต่อมาสอบถาม) แต่ละการกระทำอาจส่งผลให้เกิดอินสแตนซ์ StreamEvent หลายรายการที่ถูกสร้างขึ้น

ฉันได้สร้างแล้วย่อยชั้นของ StreamEvent เหตุการณ์แต่ละประเภทเช่นLoginEvent , PictureCommentEvent แต่ละคลาสย่อยเหล่านี้มีคุณสมบัติเฉพาะบริบทมากขึ้นเช่นPictureId , ThumbNail , CommenText , ฯลฯ (สิ่งที่จำเป็นสำหรับเหตุการณ์) ซึ่งจริง ๆ แล้วเก็บไว้เป็นคู่ของคีย์ / ค่าในตาราง hashtable / StreamEventDetail

เมื่อดึงเหตุการณ์เหล่านี้กลับมาจากฐานข้อมูลฉันใช้วิธีการจากโรงงาน (ตามTypeId ) เพื่อสร้างคลาส StreamEvent ที่ถูกต้อง

แต่ละคลาสย่อยของ StreamEvent มีเมธอด Render ( บริบทเป็นStreamContext ) ซึ่งแสดงผลเหตุการณ์ไปยังหน้าจอตามคลาสStreamContext ที่ส่งผ่าน คลาส StreamContext อนุญาตให้ตั้งค่าตัวเลือกตามบริบทของมุมมอง หากคุณดู Facebook เช่นฟีดข่าวของคุณในหน้าแรกจะแสดงชื่อเต็ม (และลิงก์ไปยังโปรไฟล์ของพวกเขา) ของทุกคนที่เกี่ยวข้องในแต่ละการกระทำในขณะที่ดูฟีดของเพื่อนคุณจะเห็นชื่อแรกของพวกเขาเท่านั้น .

ฉันยังไม่ได้ใช้ฟีดรวม (หน้าแรกของ Facebook) แต่ฉันคิดว่าฉันจะสร้างตารางAggregateFeedซึ่งมีฟิลด์UserId , StreamEventIdซึ่งบรรจุโดยอาศัย 'Hmmm คุณอาจพบว่าอัลกอริทึมที่น่าสนใจ'

ความคิดเห็นใด ๆ จะได้รับการชื่นชมอย่างหนาแน่น


ฉันกำลังทำงานกับระบบเช่นนี้สนใจมากในความรู้ใด ๆ เกี่ยวกับมันคุณเคยเสร็จสิ้นของคุณหรือไม่
JasonDavis

คำตอบที่ดี! แยกความกังวลที่ยอดเยี่ยมสะอาดและสง่างาม!
Mosh

เป็นการเริ่มต้นที่ดี! มันคล้ายกันมากกับวิธีที่ฉันเริ่มใช้สตรีมแรกของฉัน เมื่อคุณได้รับฟีดรวมสิ่งต่าง ๆ ก็เริ่มมีความซับซ้อนอย่างรวดเร็ว คุณพูดถูกที่คุณต้องการอัลกอริธึมที่มีประสิทธิภาพ การค้นหาของฉันนำฉันไปสู่อัลกอริทึมของ Rene Pickhardt (เขาพูดถึงมันในคำตอบของเขาที่นี่) ซึ่งฉันนำไปใช้ในการบริการของตัวเองซึ่งตอนนี้เป็นการค้า (ดูcollabinate.comและคำตอบของคำถามนี้เพิ่มเติม)
Mafuba

10
// หนึ่งรายการต่อเหตุการณ์จริง
กิจกรรม {
  id, การประทับเวลา, ประเภท, ข้อมูล
}

// หนึ่งรายการต่อเหตุการณ์ต่อฟีดที่มีเหตุการณ์นั้น
events_feeds {
  event_id, feed_id
}

เมื่อเหตุการณ์ถูกสร้างขึ้นให้ตัดสินใจว่าฟีดใดที่จะปรากฏในนั้นและเพิ่มสิ่งเหล่านั้นลงใน events_feeds หากต้องการรับฟีดให้เลือกจาก events_feeds เข้าร่วมในกิจกรรมสั่งซื้อตามเวลาประทับ การกรองและการรวมนั้นสามารถทำได้ในผลลัพธ์ของแบบสอบถามนั้น ด้วยโมเดลนี้คุณสามารถเปลี่ยนคุณสมบัติเหตุการณ์หลังจากสร้างโดยไม่มีงานพิเศษ


1
สมมติว่ามีคนอื่นถูกเพิ่มเป็นเพื่อนหลังจากมีการเพิ่มกิจกรรมที่ต้องดูกิจกรรมนี้ในฟีดของพวกเขาหรือไม่ จากนั้นสิ่งนี้จะไม่ทำงาน
Joshua Kissoon

8

หากคุณตัดสินใจว่าจะใช้งานใน Rails บางทีคุณอาจพบว่าปลั๊กอินดังต่อไปนี้มีประโยชน์:

ActivityStreams: http://github.com/face/activity_streams/tree/master

หากไม่มีอะไรอื่นคุณจะได้เห็นการใช้งานทั้งในรูปแบบของข้อมูลรวมถึง API ที่มีให้สำหรับการผลักดันและดึงกิจกรรม


6

ฉันมีวิธีการแบบเดียวกันกับของ heyman - ตาราง denormalized ที่มีข้อมูลทั้งหมดที่จะแสดงในสตรีมกิจกรรมที่กำหนด ใช้งานได้ดีสำหรับไซต์ขนาดเล็กที่มีกิจกรรม จำกัด

ดังกล่าวข้างต้นมีแนวโน้มที่จะเผชิญกับปัญหาความยืดหยุ่นในขณะที่เว็บไซต์เติบโต โดยส่วนตัวแล้วฉันไม่กังวลเกี่ยวกับปัญหาการปรับขนาดในขณะนี้ ฉันจะกังวลเกี่ยวกับเรื่องนั้นในภายหลัง

Facebook ทำงานได้อย่างยอดเยี่ยมในการปรับขนาดดังนั้นฉันขอแนะนำให้คุณอ่านบล็อกวิศวกรรมของพวกเขาเนื่องจากมีเนื้อหาที่ยอดเยี่ยมมากมาย -> http://www.facebook.com/notes.php?id=9445547199

ฉันได้ดูวิธีแก้ปัญหาที่ดีกว่าตาราง denormalized ที่ฉันกล่าวถึงข้างต้น อีกวิธีหนึ่งที่ฉันพบว่าการทำให้สำเร็จนี้คือการรวมเนื้อหาทั้งหมดที่จะอยู่ในการสตรีมกิจกรรมที่กำหนดไว้ในแถวเดียว สามารถเก็บไว้ใน XML, JSON หรือรูปแบบต่อเนื่องบางรูปแบบที่แอปพลิเคชันของคุณสามารถอ่านได้ กระบวนการอัปเดตจะง่ายเกินไป เมื่อทำกิจกรรมให้วางกิจกรรมใหม่ลงในคิว (อาจใช้ Amazon SQS หรืออย่างอื่น) จากนั้นทำการสำรวจคิวต่อเนื่องสำหรับรายการถัดไป หยิบรายการนั้นแยกวิเคราะห์และวางเนื้อหาในวัตถุฟีดที่เหมาะสมที่เก็บไว้ในฐานข้อมูล

สิ่งที่ดีเกี่ยวกับวิธีนี้คือคุณจะต้องอ่านตารางฐานข้อมูลเดียวเมื่อใดก็ตามที่มีการร้องขอฟีดนั้นแทนที่จะขอตารางจำนวนมาก นอกจากนี้ยังช่วยให้คุณสามารถเก็บรักษารายการกิจกรรมที่ จำกัด ได้เนื่องจากคุณสามารถปิดรายการกิจกรรมที่เก่าที่สุดเมื่อใดก็ตามที่คุณอัปเดตรายการ

หวังว่านี่จะช่วยได้! :)


ความคิดของฉันฉันต้องมีการตรวจสอบความคิดของฉันซึ่งฉันอาจได้รับตอนนี้ไชโย!
Sohail

5

มีทางรถไฟสองทางเกี่ยวกับสตรีมกิจกรรมดังกล่าว:

โซลูชันเหล่านั้นไม่ได้รวมข้อกำหนดทั้งหมดของคุณไว้ แต่ควรให้แนวคิดบางอย่างกับคุณ


1
PublicActivity นั้นยอดเยี่ยมและสามารถจัดการกรณีการใช้งานทั้งหมดในคำถามได้
DaveStephens

3

ฉันคิดว่าวิธีการของ Plurkนั้นน่าสนใจ: พวกเขาจัดหาไทม์ไลน์ทั้งหมดของคุณในรูปแบบที่ดูเหมือนชาร์ตหุ้นของ Google Finance

อาจเป็นการดีที่จะดูหนิงเพื่อดูว่าเครือข่ายสังคมออนไลน์ทำงานอย่างไร นักพัฒนาหน้ามองที่เป็นประโยชน์โดยเฉพาะอย่างยิ่ง


2

ฉันแก้ไขเรื่องนี้เมื่อไม่กี่เดือนที่ผ่านมา แต่ฉันคิดว่าการติดตั้งใช้งานของฉันนั้นพื้นฐานเกินไป
ฉันสร้างโมเดลต่อไปนี้:

HISTORY_TYPE

ID           - The id of the history type
NAME         - The name (type of the history)
DESCRIPTION  - A description

HISTORY_MESSAGES

ID
HISTORY_TYPE - A message of history belongs to a history type
MESSAGE      - The message to print, I put variables to be replaced by the actual values

HISTORY_ACTIVITY

ID
MESSAGE_ID    - The message ID to use
VALUES        - The data to use

ตัวอย่าง

MESSAGE_ID_1 => "User %{user} created a new entry"
ACTIVITY_ID_1 => MESSAGE_ID = 1, VALUES = {user: "Rodrigo"}

2

หลังจากใช้งานสตรีมกิจกรรมเพื่อเปิดใช้งานฟีดโซเชียลฟีดและการทำงานร่วมกันในแอพพลิเคชั่นต่าง ๆ ฉันรู้ว่าการทำงานพื้นฐานนั้นเป็นเรื่องปกติและอาจกลายเป็นบริการภายนอกที่คุณใช้ผ่าน API หากคุณกำลังสร้างสตรีมลงในแอปพลิเคชั่นการผลิตและไม่มีความต้องการเฉพาะหรือซับซ้อนที่ซับซ้อนการใช้บริการที่พิสูจน์แล้วอาจเป็นวิธีที่ดีที่สุด ฉันจะแนะนำสิ่งนี้อย่างแน่นอนสำหรับแอปพลิเคชั่นที่ใช้ในการผลิตมากกว่าการนำเสนอโซลูชันที่เรียบง่ายของคุณเองบนฐานข้อมูลเชิงสัมพันธ์

บริษัท ของฉัน Collabinate ( http://www.collabinate.com ) ขยายตัวออกจากการรับรู้นี้และเราได้ใช้เอ็นจิ้นกิจกรรมสตรีมที่มีประสิทธิภาพสูงและปรับขนาดได้บนฐานข้อมูลกราฟเพื่อให้บรรลุ จริงๆแล้วเราใช้ตัวแปรของอัลกอริทึม Graphity (ดัดแปลงมาจากงานแรกของ @RenePickhardt ที่ให้คำตอบที่นี่ด้วย) เพื่อสร้างเครื่องยนต์

หากคุณต้องการโฮสต์เอ็นจิ้นด้วยตัวเองหรือต้องการฟังก์ชั่นพิเศษรหัสหลักคือโอเพ่นซอร์สสำหรับวัตถุประสงค์ที่ไม่ใช่เชิงพาณิชย์ดังนั้นคุณสามารถดูได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.