扩展数据库的时候面临诸多挑战。
搜索
当搜索量很少的时候,搜索是简单的事。
当搜索量上来,比如达百万级的时候,可以把搜索内容按某种顺序排列。比如在字典中,按字母顺序排列。
并发
如果100万人需要同时用这本字典,这就是并发。
如何解决这个问题呢?
把这本字典复制100万份,专业术语叫"主从复制"。
再把100万份复制字典放到每个人的手头,专业术语叫"分布式策略"。
一致性
如果想修改字典,这时候100万人都在使用着字典,怎么办呢?
如果一本一本收回来修改,这就造成了一致性问题,有的修改了,有的还没有被修改。
如果全部收回来修改,造成了可用性问题,即在字典被收回阶段,人们无法使用字典。
还有一个方法,就是做一个"修改日志"或"附录",不修改原先的字典,把"修改日志"或"附录"分发给每个人。
死锁
在同一时间,有成百上千的人要修改数据库中的同一条数据,大家对这条数据都竞争。就像超市发礼品,越多的人争相拿同一个礼品,这就造成竞争,造成大家互相拥挤堵塞都拿不到礼品。而在数据库中,这叫"死锁"。
总结:在现实场景中,数据库分布在不同的地方,会出现很多人在同时修改同一条数据。这时候需要数据库设计,需要处理高并发避免死锁保持一致性,需要环环相扣的算法,这够很多数据库牛人忙活一阵子了。最终给用户的感觉或假象是:数据库只有一份拷贝,同一时间只有一个人在修改,用户看到是最新的数据,并且能立即响应。
参考资料:极客学院公众号
新闻热点
疑难解答