--- tags: Redis --- # Ch8. Builda simple social :::info 以twitter的後端為參考,建構所需的資料 * 用戶與狀態鏈 * 主頁時間線 * 追蹤、被追蹤清單 * 狀態消息、發布、刪除 ::: ## 8.1 Users and statuses * User >> 建構其他關係的起點 * 基本身份 * 關注人數 * 發布狀態數 * Status >> 不同用戶間具體的內容與交流 ### 8.1.1 User Information * Hash 來儲存結構 * 情境 * 新用戶註冊:建立所有key都為初始值得物件; * 檢查ID重複性 * 建立初始化 ### 8.1.2 Status messages * HASH來儲存結構 * 包含id,設計的想法可以想成如果會有大量query的需求,那對應的key是甚麼?把ID放在這裡面的好處是,如果有要查找多個發布者時的情境,可能就不用再回到User端去查找 ## 8.2 Home timeline (首頁的時間線) * 情境:使用者在首頁,可以看到自己朋友圈及自己的消息們 * home timeline * ZSET來儲存結構 * 儲存的內容是status message的ID為主,並不是文案本身;所以實作時會需要去取得ID後再取得文案 * profile timeline ## 8.3 Followers/following lists * ZSET來儲存結構 * 情境: * 當關注發生 * Step 1:增減一個資料到對應的ZSET中 * Step 2:並從對應用戶的profile timeline中,抓取部分的新訊息到自己的home timeline中; ## 8.4 Posting or deleting a status update * 8.1.2 介紹了建立的作法,但怎麼互動則是需要思考的 * 回到實務的情境,人少好辦事,畢竟也沒多少要被判斷,但一些KOL、明星,可能動值數萬或千萬人的追蹤,該如何盡快的返回內容 * 兩個概念: * 先將status ID 加到top 1000的關注者中 * twitter 中關注者超過1000的約佔0.1%的人 * 透過在第六章所提過deferred task的設計,將列表顯示狀態推送出去 * 刪除已發布的訊息 * 其他附加功能 * 私人用戶 * 收藏 * 用戶之間 可以私聊 * 轉發 ## 8.5 Streaming API * 回到社群網站的開發者,我們可能會想要知道訊息上的統計、熱門主題追蹤、KOL等 * 直覺做法,以call去追蹤這些訊息 * 進階做法:建立broadcast vs. listener的機制 ### 8.5.1 Data to be streamed * 各類API開發的考量有哪些? * 哪些事情要對外追蹤或公開 * 是否須要進行權限的控管?如何實現? * 通常在涉及隱私、系統資源時才會考慮; * 有沒有特定的篩選機制,e.g. 時間區間、事件、角色、類型等 * 類似Twttier 的public stream * firehose + sample 來獲取隨機訊息 * ### 8.5.2 Serving the data :::info 相較於傳統的API,都會假設web端的使用是在特定情境時呼叫API;但在streaming 當中,因為會持續地給予資料,則是有相對不同的; > 目標是當有新的訊息產商,只要能跟filter匹配,就會透過streaming api將資料回傳client端; ::: * A STREAMING HTTP SERVER ![Uploading file..._0rjrl2bqc]() * IDENTIFYING THE CLIENT * parse_dentifer 透過pasing url的break down取得顧客資訊 * HANDLING HTTP STREAMING * 為了不斷拋訊息過去,第一步是先作身分驗證> 如果身分或訊息的驗證OK,就會開始不斷向client端發送訊息 * ### 8.5.3 Filtering streamed messages * Goal: 如何讓客戶端只接收到自己有興趣的訊息 * 只接受到自己有興趣、特定用戶、特定關鍵字 * 隨機性 * UPDATING STATUS MESSAGE POSTING AND DELETION * 概念上來看,當消息刪除時,我們會須要同步刪除的資訊 * 實作上,我不用每個人都考慮去記現在還活著的所有訊息 * 我只要再篩選時,只考慮活著的訊息就好>> 直接在status的地方,押上delted = True * RECEIVING STREAMED MESSAGES FOR FILTERING * FILTERING MESSAGES * 隨機採樣:SampleFilter * 設定一個返回隨機Status的函數 * 除了上述做法外,有些也會在隨機中塞進一部份比例的熱門 * 可以用機率值實作 * Track * Status須要跟某個詞組的所有單詞匹配,才會被篩選出來; * Follow * Location *
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up