《解读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社区出现的而传统数据库管理者努力追求的新概念。

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

相关文章
|
1月前
|
存储 监控 NoSQL
九大核心NoSQL数据库及使用场景详解
【10月更文挑战第6天】在当今大数据与云计算飞速发展的时代,NoSQL数据库以其灵活的数据模型、可扩展性和高性能,成为了众多应用场景下的首选。本文将为您详细介绍九大核心NoSQL数据库及其典型使用场景,帮助您在工作和学习中更好地选择和应用。
54 3
|
2月前
|
NoSQL 关系型数据库 MySQL
微服务架构下的数据库选择:MySQL、PostgreSQL 还是 NoSQL?
在微服务架构中,数据库的选择至关重要。不同类型的数据库适用于不同的需求和场景。在本文章中,我们将深入探讨传统的关系型数据库(如 MySQL 和 PostgreSQL)与现代 NoSQL 数据库的优劣势,并分析在微服务架构下的最佳实践。
|
5天前
|
存储 缓存 NoSQL
常见的 NoSQL 数据库有哪些?
常见的 NoSQL 数据库有哪些?
9 2
|
21天前
|
存储 SQL JSON
介绍一下RDBMS和NoSQL数据库之间的区别
【10月更文挑战第21天】介绍一下RDBMS和NoSQL数据库之间的区别
47 2
|
21天前
|
存储 SQL NoSQL
数据库技术深度探索:从关系型到NoSQL的演变
【10月更文挑战第21天】数据库技术深度探索:从关系型到NoSQL的演变
29 1
|
28天前
|
存储 NoSQL 搜索推荐
nosql
【10月更文挑战第14天】nosql
18 2
|
1月前
|
应用服务中间件 PHP Apache
PbootCMS提示错误信息“未检测到您服务器环境的sqlite3数据库扩展...”
PbootCMS提示错误信息“未检测到您服务器环境的sqlite3数据库扩展...”
|
1月前
|
NoSQL MongoDB 数据库
MongoDB是一个NoSQL数据库,有着多种不同的命令和操作。以下是一些常见的MongoDB命令:
一些常用的MongoDB命令,如数据库和集合的管理、数据的插入、查询、更新、删除以及聚合操作等。
22 1
|
23天前
|
NoSQL 前端开发 MongoDB
前端的全栈之路Meteor篇(三):运行在浏览器端的NoSQL数据库副本-MiniMongo介绍及其前后端数据实时同步示例
MiniMongo 是 Meteor 框架中的客户端数据库组件,模拟了 MongoDB 的核心功能,允许前端开发者使用类似 MongoDB 的 API 进行数据操作。通过 Meteor 的数据同步机制,MiniMongo 与服务器端的 MongoDB 实现实时数据同步,确保数据一致性,支持发布/订阅模型和响应式数据源,适用于实时聊天、项目管理和协作工具等应用场景。
|
1月前
|
存储 SQL 分布式计算
NoSQL 简介
10月更文挑战第10天
28 0