背景:在参与公司的内部代码重构的过程中,听到同事在讨论甲方爸爸的需求,希望我们实现数据的高并发的处理,然而服务确实单节点的,最后想到在数据库层面实现这一要求,就涉及到数据库的分片要求。我听着是一脸懵,这是涉及到我的知识盲区,但同时也激发了我的求知欲,什么是分片,分片的优缺点是什么,在什么场景下使用分片,分片的实现又是如何做的。
1:什么是分片:
数据库的分片是将一个大型的数据库拆分成多个较小的,独立的片段,可以提高性能,扩展性和客观理性,分散数据库的负载,减少单个数据库的压力。当数据集太大而无法储存在单一的数据库中,需要自动分片或数据分片。小的数据库实例被称为分片,每个分片包含部分数据和对应的索引。分片之间可以根据一定的规则进行数据划分。其目的十二诶了解决单个数据库无法满足大规模数据存储和高并发访问的需求。
2:分片的优缺点是什么?
-
提高系统的性能和可扩展性
将一个大型的数据库拆分成若干个小的数据库实例,每个实例只负责其中一部分的数据存储和查询,可以降低单个数据库的压力,多个数据库实例可以实现并发操作,提高系统的响应速度和吞吐量,如果需要扩展数据库系统的容量,只需要添加分片即可,不需要对整个数据库进行扩容。
-
提高数据的安全性和可靠性
如果其中一个分片出现故障,不会影响其他的分片,从而保证系统的可靠性,数据不放在一个篮子中,降低了数据的泄露和攻击的风险,提高了数据的安全性。
当然,数据库分片也是有缺点的:
1、增加系统的复杂度:分片的实施是一个复杂的过程,如果操作不当,会有数据丢失,表损坏的风险,
2、平衡数据不均匀:在分片中,可能会出现其中一个分片数据超过其他分片数据的情况,这就变成了数据不平衡,也可以说是数据热点,这种情况下,需要考虑重新分片,将数据均匀的分布到每个分片上。
3、连接多个分片的数据:数据分散后,如果需要进行查询,需要从多个分片中批次获取数据,分多次进行查询,并对数据结果进行合并,无法实现一个查询解决问题。
4、网络开销增加:以为内数据库的数据分布在不同的分片上,在进行查询操作的时候,可能需要进行网络的通信,这增加了网络的开销和延迟。
那在什么场景下会选择数据分片呢?
数据库的分片比较适用于大型数据库系统,如需要进行高并发查询和扩展的场景,电子商务网站,社交媒体等,需要进行处理大量数据和交互的场景。