假如您有一个应用程序,随着业务越来越有起色,系统所牵涉到的数据量也就越来越大,此时您要涉及到对系统进行伸缩(Scale)的问题了。
一种典型的扩展方法叫做“向上伸缩(Scale Up)”,它的意思是通过使用更好的硬件来提高系统的性能参数。而另一种方法则叫做“向外伸缩(Scale Out)”,它是指通过增加额外的硬件(如服务器)来达到相同的效果。
从“硬件成本”还是“系统极限”的角度来说,“向外伸缩”一般都会优于“向上伸缩”,因此大部分上规模的系统都会在一定程度上考虑“向外”的方式。由于许多系统的瓶颈都处在数据存储上,因此一种叫做“数据分片(Database Sharding)”的数据架构方式应运而生,本文便会讨论这种数据架构方式的一种比较典型的实现方式。
简介
数据分片,自然便是将整体数据分摊在多个存储设备(下文统称为“数据分区”或“分区”)上,这样每个存储设备的数据量相对就会小很多,以此满足系统的性能需求。值得注意的是,系统分片的策略有很多,例如常见的有以下几种:
根据ID特征:例如对记录的ID取模,得到的结果是几,那么这条记录就放在编号为几的数据分区上。
根据时间范围:例如前100万个用户数据在第1个分区中,第二个100万用户数据放在第2个分区中。
基于检索表:根据ID先去一个表内找到它所在的分区,然后再去目标分区进行查找。
……
在这些数据分片策略之中没有哪个有绝对的优势,选择哪种策略完全是根据系统的业务或是数据特征来确定的。值得强调的是:数据分片不是银弹,它对系统的性能和伸缩性(Scalability)带来一定好处的同时,也会对系统开发带来许多复杂度。
例如,有两条记录分别处在不同的服务器上,那么如果有一个业务是为它们建立一个“关联”,那么很可能表示“关联”的记录就必须在两个分区内各放一条。另外,如果您重视数据的完整性,那么跨数据分区的事务又立即变成了性能杀手。最后,如果有一些需要进行全局查找的业务,光有数据分片策略也很难对系统性能带来什么优势。
数据分片
在ORACLE 中,全局关系是一个视图,而数据分片是通过关系数据的基本运算实现的,这一点在全局视图的定义中体现。
数据分片主要有两种方式:
(1) 水平分片
按一定条件将全局关系的所有元组划分成若干个相交的子集,每个子集为关系的一个片段。
例如,一个公司下属两个子公司,每个子公司建有自己的数据库,并存放本公司的职员信息。在总公司的数据库上建立一个全局关系,可以看到全公司的全体职员信息。建立全局关系emp(视图)的语句如下:
CREARTE VIEW emp AS
(SELECT* FROM emp1@ D1)
UNION
(SELECT *FROM emp2@ D2);
这样,全局关系emp中的元组实际上是分布在另外两个不同的数据库上。
(2) 垂直分片
把全局关系的属性集分成若干子集,形成几个垂直片段。
例如,全局关系emp中,有关职工的人事信息在数据库D1上,而职工的业务信息在数据库D2上。当然,有些属性(如职工号这样的关键字属性)应出现在每个垂直片中。建立全局关系EMP(视图)的语句如下:
CREATTE VIEW emp AS
SELECRT emp1.eno, emp1.ename, emp2.sal,…
FROM emp1@D1, emp2@D2
WHERE emp1.eno=emp2.eno;
全局关系实际上是将分布在不同数据库中的一个职工记录的各部分重新连接起来,然后投影出所要的属性。
实际上,我们可以通过视图的定义,实现全局关系数据的多种分布要求,全局关系屏蔽了数据的物理分布,提供了数据分布的又一个透明性。
分享到:
相关推荐
这时,数据库分片技术应运而生,它将数据分布在多个数据库服务器上,以实现负载均衡、提高性能和容错能力。Ruby-ActiveRecord Turntable 是一个针对 ActiveRecord 的扩展,专门用于实现数据库分片功能。 **一、...
【标题】cpp-Myproxy:MySQL数据库集群的分片代理详解 在当今的高并发、大数据量的应用场景中,单个...通过深入研究该项目,开发者不仅可以掌握数据库分片技术,还能学习到C++在开发高并发网络应用方面的实践经验。
### 数据库分片详解 #### 一、引言 随着互联网技术的快速发展,数据规模呈爆炸式增长,从GB到TB再到PB级别的数据量...随着数据量的不断增长,分片技术的重要性也将日益凸显,成为数据库管理和优化不可或缺的一部分。
本课程中,我们将详细讨论这些分片算法的原理、优缺点以及实际应用案例,帮助你更好地理解和掌握数据库分片技术。同时,提供的压缩包文件中包含了视频教程"3-6 常用分片算法(上)_batch.mp4",请配合课程内容进行学习...
为了解决这一挑战,数据库分区(Partitioning)和分片(Sharding)技术应运而生。这两种技术都旨在通过分散数据来提高性能和可扩展性,但它们的实现方式和应用场景有所不同。 数据库分区和分片都是解决大数据和高...
总的来说,Java的数据库分片技术是解决大数据存储和高性能访问的关键手段。通过借鉴像TDDL这样的成熟框架,开发者可以快速构建出适合自己业务场景的分片解决方案。然而,这需要对数据库分片原理有深入理解,并能根据...
《NoSQL数据库分片的概念》 NoSQL数据库分片,是一种应对大数据和高并发访问的有效策略,旨在提升数据库的可扩展性和性能。本文主要探讨了集中存储与分片两种数据分布方式,并深入阐述了分片的原理、优势以及在实际...
《Mycat从入门到精通之Mycat跨分片处理机制》教程涵盖了数据库分片技术的核心内容,尤其是Mycat作为开源的分布式数据库中间件,如何实现高效、灵活的跨分片处理机制。本教程旨在帮助初学者理解并掌握Mycat在大数据...
**Python-Django Horizon:数据库分片的利器** 在Python的Web开发领域,Django框架以其高效、易用和全面的功能而备受青睐。然而,随着应用规模的扩大,单个数据库可能无法满足高并发和大数据量的处理需求。为了解决...
其特性包括横向扩展、自动分片、丰富的查询语言以及强大的聚合框架。 总的来说,理解数据库的分类和原理,能够帮助开发者选择最适合项目需求的存储解决方案。关系型数据库适合需要复杂查询和事务处理的场景,而非...
《Go-PG-Sharding:基于Go和PostgreSQL的数据库分片解决方案》 在现代Web应用程序中,随着数据量的增长,...通过深入理解和实践Go-PG-Sharding,我们可以更好地掌握数据库分片技术,从而优化系统的性能和可扩展性。
#### 概述 在 PGConf.CN2019 的培训 PPT 中,...综上所述,该报告全面而深入地分析了当前数据库分片技术的状态,并展望了其未来发展的重要方向。对于希望了解分片技术最新进展的专业人士来说,这份资料极具参考价值。
《简单分库中间件simple-sharding的探索与实践》 在大数据时代,数据库的扩展性和性能成为了企业系统架构的关键挑战之...通过深入学习和实践,我们可以更好地掌握数据库分片技术,为企业的数据管理提供更强大的支撑。
水平切分(又称为Sharding)是一种数据库分片技术,通过将数据分散到多个物理数据库或数据库实例上来实现负载均衡和提升性能的目的。本文主要探讨的是基于“单KEY”业务场景下,如何有效地实施数据库水平切分以及在...
1. **Sharding概念**:Sharding是一种数据库分片技术,通过将数据垂直分区到多个独立的数据库中,可以线性扩展数据库的处理能力。Oracle Sharding支持自动部署和数据分区,支持多种分区方式,如HASH、RANGE、LIST等...
数据库分片技术可以将大规模数据库分割成多个小规模数据库,提高数据库的性能和可扩展性。内存存储技术可以将数据存储在内存中,提高数据的访问速度和响应速度。 五、云数据库和安全 Oracle 19c 新特性中,云...
分布式关系型数据库服务DRDS是一种基于数据库分片技术的分布式数据库中间件,它可以将一个大型的关系型数据库拆分成多个小的数据库实例,实现数据的水平拆分,从而分散负载,提升系统的处理能力和并发能力。...