inbox:收件箱,所有关注的人发送消息到收件箱,每个follwer都会收到一份
outbox:发件箱,所有发送的消息,只发送一份
写扩散(push):
该方式为每个用户维护一个订阅列表,记录该用户订阅的消息索引(一般为消息id、类型、发表时间等一些元数据)。每当用户发布消息是,都会更新其follower的订阅列表
优点:读很轻,初始化时仅需要读取自己的inbox即可
缺点:写很重,每发布一个消息,会导致大量的写操作
注:一般来说,用户发布消息,并不会更新所有followers的订阅列表,仅更新在线followers
即可。
读扩散(pull):
该方式为每个用户维护一个发送列表,记录该用户所有发表过的消息索引。
优点:写很轻,节省空间,用户每发布一条 消息,仅需要更新自己的outbox。
缺点:读操作很重,计算量大。假设你收听了1K用户,则初始化时,需要从1K个用户
的outbox拉取消息,然后计算获得最新的n条消息。