了解不同的数据库扩展技术可以帮助我们选择适合我们需求和目的的合适策略。
因此,在本文中,我们将展示不同的解决方案和技术,用于扩展数据库服务器。它们分为读取和写入策略。
读取/加载
有时我们的应用程序承受着巨大的负载。为了解决这个问题,我们展示了三种可以实施的不同技术。
缓存
缓存技术将经常请求的数据或昂贵的计算操作的响应存储在临时内存中。缓存中存储的数据根据应用程序的性质需要进行更改,可以使用缓存失效和淘汰技术来更新数据的一致性。这可以通过缓存过期时间(TTL)方法或其他依赖于使用的缓存模式来实现。
不同的缓存模式可以作为实施缓存解决方案的策略。Caching Aside支持大量的读取操作,即使缓存失效也能正常工作。Read-through和Write-through模式通常一起使用,它们是处理读取密集型工作负载的良好选择,但如果缓存故障,系统也会发生故障。Write-back模式适用于写入密集型工作负载,并且被许多数据库管理系统实现所使用。
数据库缓存
根据需求,例如大量读取、大量写入或二者的混合,我们可以决定使用哪种模式,以便在可以容忍缓存或数据库故障的情况下进行选择。
复制
复制是通过将一个数据库称为主数据库,所有写入请求都流向该主数据库来实现的。此外,我们制作主数据库的精确副本作为新的节点副本,即次要节点,仅负责处理读取请求。主数据库不断向从节点提供更新的数据,保持集群中所有节点之间的信息一致性。
复制是处理容错性和维护CAP定理以及系统可伸缩性的优秀策略。假设其中一个节点故障,我们仍然可以提供服务,因为我们在其他节点上复制了相同的数据。此外,在集群中,如果主节点发生故障,其他节点可以接管并成为主数据库。复制还有助于减少应用程序的延迟,因为我们可以将数据库部署并将数据复制到不同的地区,如CDN,本地用户可以轻松访问这些数据。
数据库复制
同步和异步
除了这些优点之外,随着节点数量的增加,维护副本节点的一致性变得更加复杂。根据需求,可以使用同步或异步复制策略来解决这个问题。
同步策略的优点是延迟为零,数据始终保持一致,但缺点是性能受到影响,因为必须等待所有副本更新并由发出者确认。另一方面,在异步策略中,写入速度更快,因为主节点不需要等待确认,但如果副本未能更新值,就会出现不一致的状态问题。
请记住,没有银弹,最佳策略取决于我们的需求。必须在一致性、可用性或分区(CAP定理)之间进行权衡。CAP定理指出,我们一次只能保证其中两个。
索引
索引用于定位和快速访问数据,提高数据库活动的性能。数据库表可以与一个或多个索引相关联。
索引通过更快的数据检索提高查询性能,增强数据访问效率,减少检索数据的I/O次数。它优化数据排序,因为数据库无需对整个表进行排序,而只需对相关行进行排序。索引即使在数据量增加的情况下也可以保持数据一致性。此外,索引确保数据库完整性,避免存储重复数据。
作为缺点,索引需要更多的存储空间,增加了数据库的大小。它还增加了表中添加、删除和修改的维护开销。索引可能会降低插入和更新的性能。为特定查询或应用程序选择索引可能是困难的。
写入
对于需要频繁向数据库写入新数据的应用程序,我们有分片和NoSQL作为策略。
分片
分片或数据分区允许将大型数据库数据分割成更小、更快、更易管理的部分,将数据库分成多个主数据库。分片有两种类型,垂直分片和水平分片。
数据分区具有查询优化的优点,提供更好的性能和降低延迟。它使得用户数据可以分布在不同的位置,以便特定地区的用户可以更快地访问。此外,它还避免了单点故障。
分片的缺点之一是分区过载,如果我们没有正确地在分区之间分配数据,就会导致某些分区数据过多,某些分区数据较少,这可能导致大分区的查询变慢。另一个缺点是在实施分片策略后,回退并恢复到无分片策略的先前状态,以及在不同数据库之间拆分数据。
分区可以是逻辑的或物理的。逻辑分片是指在同一物理机器上具有不同数据子集,而物理分片可以在一台物理机器上具有多个分区子集。
对于数据分片,我们可以选择算法分片或动态分片。存在不同的算法和动态分片技术,例如基于键、基于范围和基于目录的分片。
垂直分片
对于垂直分片,我们将每个表放在不同的机器上。例如,将用户表、日志表或评论表分别放在不同的机器上。当查询只返回数据的一个子集时,垂直分片非常有效。例如,如果某些查询仅请求姓名,而其他查询仅请求地址,则可以将姓名和地址分片到单独的服务器上。
垂直分片
水平分片
如果我们有一张变得非常大的单个表,我们可以应用水平分片。我们将相关数据的一部分拆分到多台机器上。当查询经常返回一组子集行时,水平分片非常有效。例如,根据短日期范围筛选数据的查询非常适合水平分片,因为日期范围必然会将查询限制在服务器的子集上。
水平分片
NoSQL
NoSQL不是关系型数据库,本质上是一种键值对。键值对模型天生具备跨多个不同机器的易于扩展性。NoSQL被分为四个主要类别:列式存储将数据存储为列族,图存储将数据存储为节点和边,键值存储将数据存储为键值对,文档存储将数据存储为半结构化文档。
NoSQL 数据库类别
它允许动态模式,可以在不更改模式的情况下进行更改。此外,它提供水平扩展性,通过向数据库群集添加更多节点来扩展。它还专为高可用性而设计,可以自动处理节点故障,并在集群中的多个节点之间进行数据复制。
这种非关系型数据库相对于关系型数据库提供了几个优点,如可扩展性、灵活性和成本效益。然而,它们也有一些缺点,例如缺乏标准化、缺乏ACID兼容性以及对复杂查询的支持不足。
结论
在本文中,我们演示了处理数据库可扩展性时要实施的策略。
我们将其分为读取和写入策略。对于读取,我们可以应用不同的缓存机制,使用主数据库和次要数据库进行复制,还可以实施索引以定位和快速访问数据。对于写入的可扩展性,可以采用分片或NoSQL策略,两者都有各自的优点和缺点。
最后,请记住,没有完美的解决方案,我们需要了解自己的需求,并进行权衡,选择最适合我们应用程序的策略。
作者:Jailson Evora
更多内容请关注公号 “云原生数据库”
squids.cn,提供免费的数据库迁移工具,云数据库RDS,数据库备份工具,SQL开发工具等。