《解读NoSQL》——2.6 通过数据库分片获得水平扩展能力

简介: 数据库的成长性和自动分区数据的容错性对于NoSQL系统来说很重要。对于大数据系统和容错系统,分片操作已经成为高度自动化的过程。接下来让我们来看看分片如何工作以及它面临的挑战。

本节书摘来自异步社区出版社《解读NoSQL》一书中的第2章,第2.6节,作者: 【美】Dan McCreary(丹•麦克雷) , Ann Kelly(安•凯利),更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.6 通过数据库分片获得水平扩展能力

随着一个组织存储的数据量增加,可能在某个时候,业务运行所需的数据量超过了当前环境所能运行的最大值,这时候,一些将数据分成合理的数据块的机制是必要的。组织和系统可以将数据库自动分片(将一个数据库划分为一些块,这些块称作数据库分片,它们遍布在一些分布式服务器上)作为持续存储数据并且最小化宕机时间的手段。在稍早的系统上手动配置数据库并将数据从旧系统复制到新系统时,这个操作可能会耗费系统数小时,然而NoSQL系统会自动进行这个操作。数据库的成长性和自动分区数据的容错性对于NoSQL系统来说很重要。对于大数据系统和容错系统,分片操作已经成为高度自动化的过程。接下来让我们来看看分片如何工作以及它面临的挑战。

假设你创建了一个网站,它允许用户登录和创建自己的私人空间并与朋友们分享。他们会上传文件、发送信息并发表一些他们对喜欢的(或不喜欢的)事物的看法。你搭建起网站,将这些信息保存到运行在单个CPU之上的MySQL数据库中。人们如果喜欢它,就会登录网站,创建主页,邀请朋友,不知不觉间你的磁盘空间已经所剩无几。接下来该怎么办?如果你使用的是典型的RDBMS,那么答案是购买新的系统并将一半用户迁移到新系统中。哎,你以前的系统可能需要宕机一段时间,这样你才能重写应用让它知道从哪个数据库中得到所需的信息。图2-9显示了一个数据分片的典型示例。
image

图2-9 当单个处理器不能很好地胜任系统的吞吐量需求时,就需要执行分片操作。当发生分片时,你会希望数据被移动到两个系统中,而每个系统负责原来一半的工作。许多NoSQL系统内建了自动分片功能,你只需将一台服务器添加至工作节点资源池里,数据库管理系统会自动将数据移动至新节点。大多数RDBMS不支持自动分片

有多种方式可以完成从单个数据库迁移至多个数据库的过程。

(1)可以将用户名以A~N开头的用户保留在原有的系统中,而将用户名以O~Z开头的用户迁移至新系统。

(2)可以将美国用户保留在原有系统中,而将欧洲用户迁移至新系统。

(3)可以随机将一半用户迁移至新系统中。

每一种方式都有其优势和劣势。例如,第一种方案,如果某个用户修改了用户名,那么是否应该将它自动迁移到新系统?第二种方案,如果某个用户搬家到一个新的国家,那么他的数据是否也该被迁移?如果用户都喜欢与周围的人分享链接,那么将这些用户放在同一系统中是否有性能上优势?如果美国的用户都习惯在晚上同一时间活跃又会怎么样?其中一个数据库会承受巨大压力而另一个空闲吗?如果你的网站规模再次翻倍又会如何?你会每次硬着头皮不断地重写代码来应付吗?你会让你的系统宕机一周等你升级软件吗?

随着服务器数量的增长,你会发现每一台服务器宕机的概率是均等的,所以每当你增加一台服务器,那么某一部分不工作的概率会增加。你或许会认为你将数据库切分到两个系统的过程也可以用来复制数据到备份系统或者镜像系统以防系统故障,但是这会带来新的问题。如果主节点被修改了,那么必须保证备份数据同步更新,这就需要有一个数据复制方案。同步这些数据库耗费时间的同时也会降低系统性能。现在你需要维护更多服务器了!

欢迎来到数据库分片、复制和分布式计算的世界。可以看到当数据库不断成长,你需要考虑和权衡许多问题。NoSQL系统已经有很多方法允许用户在扩大数据库规模的同时不用关闭服务器。当存储节点或网络出现故障时仍维持数据库运行叫作被称为分区容错性——一个在NoSQL社区出现的而传统数据库管理者努力追求的新概念。

理解事务完整性和自动分片对于考虑搭建分布式系统时面临的权衡问题是很重要的。尽管数据库性能、事务完整性以及如何利用内存和自动分片特性很重要,但有些时候,你必须确认并专注于系统最重要的方面,而使其他方面变得灵活。在下一节中,我们将通过一个标准的流程来了解在选择过程中需要做出的权衡,这样有助你专注于对组织最重要的事物。

相关文章
|
21天前
|
Cloud Native 关系型数据库 分布式数据库
《阿里云产品四月刊》—瑶池数据库云原生化和一体化产品能力升级
阿里云瑶池数据库云原生化和一体化产品能力升级,多款产品更新迭代
|
1月前
|
存储 NoSQL 关系型数据库
NOSQL -- MOGODB
NOSQL -- MOGODB
|
11天前
|
缓存 NoSQL Java
使用Spring Boot和Couchbase实现NoSQL数据库
使用Spring Boot和Couchbase实现NoSQL数据库
|
17天前
|
关系型数据库 分布式数据库 数据库
PolarDB,阿里云的开源分布式数据库,与微服务相结合,提供灵活扩展和高效管理解决方案。
【7月更文挑战第3天】PolarDB,阿里云的开源分布式数据库,与微服务相结合,提供灵活扩展和高效管理解决方案。通过数据分片和水平扩展支持微服务弹性,保证高可用性,且兼容MySQL协议,简化集成。示例展示了如何使用Spring Boot配置PolarDB,实现服务动态扩展。PolarDB缓解了微服务数据库挑战,加速了开发部署,为云原生应用奠定基础。
163 3
|
18天前
|
监控 NoSQL 数据管理
电脑监控软件中的NoSQL数据库管理
这篇文章介绍了在电脑监控软件中使用NoSQL数据库管理非结构化数据。通过Python示例展示了如何使用MongoDB客户端连接数据库、插入单条或多条数据、查询数据(包括所有、特定用户和时间范围)、更新数据以及删除数据。此外,还提供了一个简单的数据监控和自动提交到网站的脚本,以每分钟检查一次新活动并发送到指定URL。这些示例有助于理解和优化监控软件中的数据处理。
50 3
|
16天前
|
NoSQL Java MongoDB
如何在Java中使用NoSQL数据库
如何在Java中使用NoSQL数据库
|
1月前
|
SQL 存储 NoSQL
SQL与NoSQL数据库的选择:技术与场景驱动下的决策
【6月更文挑战第16天】**SQL vs NoSQL数据库:技术与应用场景比较。SQL数据库以其关系模型、ACID特性、灵活查询及事务处理见长,适合结构化数据和强一致性场景。NoSQL则以数据模型灵活性、高可扩展性、高性能及低成本著称,适合大数据、高并发和快速迭代的需求。选择应基于业务需求、数据特性、系统架构和成本。**
|
12天前
|
存储 NoSQL Java
使用MongoDB实现NoSQL数据库的最佳实践
使用MongoDB实现NoSQL数据库的最佳实践
|
1月前
|
NoSQL 关系型数据库 MySQL
|
1月前
|
弹性计算 负载均衡 NoSQL
NoSQL数据库如何支持动态数据结构?
【6月更文挑战第11天】NoSQL数据库如何支持动态数据结构?
22 2