扩展数据库面临的挑战

扩展数据库的时候面临诸多挑战。

搜索

 

当搜索量很少的时候,搜索是简单的事。

当搜索量上来,比如达百万级的时候,可以把搜索内容按某种顺序排列。比如在字典中,按字母顺序排列。

并发

 

如果100万人需要同时用这本字典,这就是并发。

如何解决这个问题呢?

把这本字典复制100万份,专业术语叫"主从复制"。

再把100万份复制字典放到每个人的手头,专业术语叫"分布式策略"。

一致性

 

如果想修改字典,这时候100万人都在使用着字典,怎么办呢?

如果一本一本收回来修改,这就造成了一致性问题,有的修改了,有的还没有被修改。

如果全部收回来修改,造成了可用性问题,即在字典被收回阶段,人们无法使用字典。

还有一个方法,就是做一个"修改日志"或"附录",不修改原先的字典,把"修改日志"或"附录"分发给每个人。

死锁

 

在同一时间,有成百上千的人要修改数据库中的同一条数据,大家对这条数据都竞争。就像超市发礼品,越多的人争相拿同一个礼品,这就造成竞争,造成大家互相拥挤堵塞都拿不到礼品。而在数据库中,这叫"死锁"。

总结:在现实场景中,数据库分布在不同的地方,会出现很多人在同时修改同一条数据。这时候需要数据库设计,需要处理高并发避免死锁保持一致性,需要环环相扣的算法,这够很多数据库牛人忙活一阵子了。最终给用户的感觉或假象是:数据库只有一份拷贝,同一时间只有一个人在修改,用户看到是最新的数据,并且能立即响应。

参考资料:极客学院公众号

原文地址:https://www.cnblogs.com/darrenji/p/4615204.html