Jeg ville gå med følgende struktur:
-
Brug én samling til alle handlinger, der skete,
Actions
-
Brug en anden samling til, hvem der følger hvem,
Subscribers
-
Brug en tredje samling,
Newsfeed
for en bestemt brugers nyhedsfeed viftes elementer ud fraActions
samling.
Newsfeed
samling vil blive udfyldt af en arbejdsproces, der asynkront behandler nye Actions
. Derfor vil nyhedsfeeds ikke udfyldes i realtid. Jeg er uenig med Geert-Jan i, at realtid er vigtigt; Jeg tror, de fleste brugere er ligeglade med selv et minuts forsinkelse i de fleste (ikke alle) applikationer (i realtid ville jeg vælge en helt anden arkitektur).
Hvis du har et meget stort antal consumers
, fan-out kan tage et stykke tid, sandt. På den anden side vil det heller ikke fungere med meget store følgerantal at sætte forbrugerne direkte ind i objektet, og det vil skabe alt for store objekter, der optager meget indeksplads.
Det vigtigste er dog, at fan-out-designet er meget mere fleksibelt og tillader relevansscoring, filtrering osv. Jeg har for nylig skrevet et blogindlæg om nyhedsfeeds skemadesign med MongoDB, hvor jeg forklarer noget af den fleksibilitet mere detaljeret.
Apropos fleksibilitet, så ville jeg være forsigtig med den specification af aktivitetstrea.ms. Det ser ud til at give mening som en specifikation for interop mellem forskellige udbydere, men jeg ville ikke gemme al den detaljerede information i min database, så længe du ikke har til hensigt at samle aktiviteter fra forskellige applikationer.