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本身的格式