九章系统设计回忆录~~~

introducing system design & news feed system

"DAU

infrastructure

web development"

"4s" analysit

设计某个系统/ 设计某个系统的部分功能(比如限制用户访问频率/统计历史记录)

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

"4s" analysis:

scenario, service ,  storage, scale

需要什么?  将大服务拆解? 存储? 升级

---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

程序是算法和数据结构/

系统是服务和数据存储。

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

用户系统的特点; 读非常多, 写非常少; 要用cache进行优化

cache 可以理解成java中的hashmap 也是key-value的结构

有哪些常用的cashe系统?

mem-cached不支持数据持久化

redis(支持数据持久化)

cache一定存在内存中吗?

不是, 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)//存储60秒, 过掉就删了~~

cache.get("foo")

>>1

#wait for 60 seconds

cache.get("foo")

>>null

cache.get("bar")

>>null

memcached怎么优化DB的查询

class UserService:

def getUser(self, user_id):

key = "user::%s" % user_id

用户是如何实现登陆和保持登陆的?

用session:

用户login之后: 创建一个session对象, 并且将session_key作为cookie值返回给浏览器

浏览器再讲这个值记录在浏览器的cookie中, 用户每次想服务器发送的访问,都会带上这个网站的cookie; 然后服务器检测道cookie中的session_key是有效的, 就可以登陆,

当用户logout之后:

从服务器的session table 中删除对应的数据:

但是session table存在哪里?

一般来讲, 都可以, 存在cache中, 客户自己logout; 放在数据库中,更好些, 如果

访问的多多话, 就用cache做优化。

sql vs no SQL

需要支持transaction的话就不能选择nosql

noSQL 有很多活动都得自己实现;而sql基本上都给我们实现好了, 比方说

serialization, secondary index and soon

硬盘型的nosql 比 sql 快十倍以上不止,

sql中的column 是在schema中预先制定好的, 不可以随意的天价

一条数据一般是以row为单位取出。

而,

no-sql中的column 是动态的, 无限大, 可以随意添加..

一条数据一般是以grid为单位, row_key + column_key+ value = - 条数据。

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

你可能感兴趣的:(九章系统设计回忆录~~~)