九章系統(tǒng)設(shè)計(jì)回憶錄~~~

introducing system design & news feed system

"DAU

infrastructure

web development"

"4s" analysit

設(shè)計(jì)某個(gè)系統(tǒng)/ 設(shè)計(jì)某個(gè)系統(tǒng)的部分功能(比如限制用戶訪問(wèn)頻率/統(tǒng)計(jì)歷史記錄)

work solution, special case, analysis, tradeoff, knowledge base

"4s" analysis:

scenario, service ,? storage, scale

需要什么?? 將大服務(wù)拆解? 存儲(chǔ)? 升級(jí)

---part 1---

daily active users?

確定有什么功能? login,/ register

user profile display/ edit

storage:

database: sql database => user table

nosql database => Tweets/ social graph

file system: media files

cache: ==> nonpersisitent

程序是算法和數(shù)據(jù)結(jié)構(gòu)/

系統(tǒng)是服務(wù)和數(shù)據(jù)存儲(chǔ)。

merge k sorted arrays

Design user system - database& memcache

design user system

memcached

authentication

sql vs nosql

friendship

how to scale

sharding/ consistent hashing/ replica

用戶系統(tǒng)的特點(diǎn); 讀非常多, 寫(xiě)非常少; 要用cache進(jìn)行優(yōu)化

cache 可以理解成java中的hashmap 也是key-value的結(jié)構(gòu)

有哪些常用的cashe系統(tǒng)?

mem-cached不支持?jǐn)?shù)據(jù)持久化

redis(支持?jǐn)?shù)據(jù)持久化)

cache一定存在內(nèi)存中嗎?

不是, file system也可以做cache. cpu也有cache.

memcached栗子??

cache.get("this is a key", "this is a value")

cache.get("this is a key")

>>"this is a value"

cache.set("foo", 1, ttl = 60)//存儲(chǔ)60秒, 過(guò)掉就刪了~~

cache.get("foo")

>>1

#wait for 60 seconds

cache.get("foo")

>>null

cache.get("bar")

>>null

memcached怎么優(yōu)化DB的查詢

class UserService:

def getUser(self, user_id):

key = "user::%s" % user_id

用戶是如何實(shí)現(xiàn)登陸和保持登陸的?

用session:

用戶login之后: 創(chuàng)建一個(gè)session對(duì)象, 并且將session_key作為cookie值返回給瀏覽器

瀏覽器再講這個(gè)值記錄在瀏覽器的cookie中, 用戶每次想服務(wù)器發(fā)送的訪問(wèn),都會(huì)帶上這個(gè)網(wǎng)站的cookie; 然后服務(wù)器檢測(cè)道cookie中的session_key是有效的, 就可以登陸,

當(dāng)用戶logout之后:

從服務(wù)器的session table 中刪除對(duì)應(yīng)的數(shù)據(jù):

但是session table存在哪里?

一般來(lái)講, 都可以, 存在cache中, 客戶自己logout; 放在數(shù)據(jù)庫(kù)中,更好些, 如果

訪問(wèn)的多多話, 就用cache做優(yōu)化。

sql vs no SQL

需要支持transaction的話就不能選擇nosql

noSQL 有很多活動(dòng)都得自己實(shí)現(xiàn);而sql基本上都給我們實(shí)現(xiàn)好了, 比方說(shuō)

serialization, secondary index and soon

硬盤(pán)型的nosql 比 sql 快十倍以上不止,

sql中的column 是在schema中預(yù)先制定好的, 不可以隨意的天價(jià)

一條數(shù)據(jù)一般是以row為單位取出。

而,

no-sql中的column 是動(dòng)態(tài)的, 無(wú)限大, 可以隨意添加..

一條數(shù)據(jù)一般是以grid為單位, row_key + column_key+ value = - 條數(shù)據(jù)。

只需要提前定義column_key本身的格式

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容