• 分片


    分片(DATABASE SHARDING)

    什么是分片?

    是一种水平切分相关的数据库架构
    是无共享架构,是自治的
    在应用程序级别进行实现

    分片的好处

    可以帮助促进水平扩展
    以分散负载,允许更多的流量和更快的处理

    加速查询响应的时间

    通过减少宕机的影响,使得应用程序更稳定可靠

    分片的缺点

    • 正确实现分片数据库架构十分复杂

    • 用户必须跨多个分片位置管理数据,可能会让某些团队存在工作混乱

    • 分片最终会导致数据热点,要修复和重新分片才能实现更均匀的数据分布

    • 一旦对数据库进行了分片,就很难将其恢复到未分片的架构

    • 并不是每个数据库引擎本身都支持分片

    常见的数据库分片架构

    Key Based Sharding 基于键的分片

    将需要经常查询的键作为主键并作为hash对象,根据hash后的值取模,存储到不同的片中.

    Range Based Sharding 基于范围的分片

    基于范围的分片的主要好处是,它实现起来相对简单。每个分片都包含一组不同的数据,但它们都具有相同的模式,以及原始数据库。应用程序代码只读取数据所属的范围,并将其写入相应的分片。

    另一方面,基于范围的分片并不能预防数据不均匀分布的现象,而有可能会出现前面提到的数据热点现象。查看示例图,即使每个分片拥有相同数量的数据,特定产品比其他产品获得更多关注的可能性也会很大。相应的,各个的分片将接收不成比例的读取操作。

    个人理解:

    更适合按照时间,将范围分开,便于数据的查找

    Directory Based Sharding 基于目录的分片

    此处,Delivery Zone列被定义为分片键。将来自分片键的数据,连同每一行应该写入的分片写入查找表。这与基于范围的分片类似,但不是确定分片键的数据落入哪个范围,而是将每个键绑定到其自己的特定分片。如果分片键的基数很低,并且分片键存储键的范围没有意义,那么基于目录的分片比基于范围的分片要更好。请注意,它也不同于基于密钥的分片,因为它不通过散列函数处理分片键; 它只是根据查找表检查键值,以查看数据需要写入的位置。

    基于目录的分片的主要吸引力在于其灵活性。基于范围的分片架构只能指定键值范围,而基于键的分片架构只能使用固定的哈希函数,如前所述,在以后更改该函数非常困难。另一方面,基于目录的分片允许您使用任何系统或算法将数据项分配给分片,使用这种方法动态添加分片也相对容易。

    虽然基于目录的分片是这里讨论的最灵活的分片方法,但是在每次查询或写入之前连接到查找表,可能会对应用程序的性能产生不利影响。此外,查找表可能出现单点故障:如果查询表损坏或出现其他故障,它可能会影响数据库写入新数据或访问现有数据的能力。

    需要创建第三张表来确定两者之间的关系,和基于范围分片的类似,选取一列作为分片键,每一行都不确定的分配到不同的范围中.

    什么情况下需要分片

    • 应用程序增涨到超过单个数据库节点的存储容量

    • 对数据库的读写量,超过单个节点或只读副本可以处理的量,从而导致响应时间增加或超时

    • 应用程序所需的网络带宽,超过单个数据库节点和任何只读副本可用的带宽,从而导致响应时间增加或超时

    操作分片前 要优化的数据库项

    • 设置远程数据库

    • 实现缓存

    • 创建一个或多个只读副本

    • 升级到更大的服务器

    清风徐来.水波不兴
  • 相关阅读:
    python写入csv文件中文乱码解决方案
    高质量代码有三要素:可读性、可维护性、可变更性
    CFile
    BMP格式图像的显示
    SAP BW 学习笔记(一)
    SAP BW 学习笔记(五)
    SAP BW 学习笔记(二)
    SAP BW 学习笔记(三)
    SAP BW 学习笔记(四)
    CRM 5.0 Marketing – BW integrated topics summary
  • 原文地址:https://www.cnblogs.com/ghl666/p/11937267.html
Copyright © 2020-2023  润新知