zoukankan      html  css  js  c++  java
  • 扩展数据库面临的挑战

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

    搜索

     

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

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

    并发

     

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

    如何解决这个问题呢?

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

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

    一致性

     

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

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

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

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

    死锁

     

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

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

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

  • 相关阅读:
    Shell中调用、引用、包含另一个脚本文件的三种方法
    mysql基础
    传智博客(JavaWeb方面的所有知识)听课记录(经典)
    nginx配置负载均衡与反向代理
    nginx 详解
    iOS开发之集成ijkplayer视频直播
    Nginx配置文件nginx.conf中文详解(总结)
    WorldWind源码剖析系列:数学引擎类MathEngine
    WorldWind源码剖析系列:二维点类Point2d和三维点类Point3d
    WorldWind源码剖析系列:枚举类型
  • 原文地址:https://www.cnblogs.com/darrenji/p/4615204.html
Copyright © 2011-2022 走看看