关系型数据库的性能扩展思路及NoSQL产品的选取标准
一、关系型数据库面对数据访问的压力,通常采取的解决方案步骤(以MySQL为例)1、主从复制,实现读写分离或分布读;2、读请求比较多,可添加缓存服务器,如Memca
一、关系型数据库面对数据访问的压力,通常采取的解决方案步骤(以MySQL为例)
1、主从复制,实现读写分离或分布读;
2、读请求比较多,可添加缓存服务器,如Memcached,以提升读性能;但此时得手动维护数据的一致性;
3、写请求较多的场景,可简单进行向上扩展,使用性能更强的服务器以应付更多的写请求;同时,为了保证从服务器跟得上主服务器的更新速度,可能需要从服务器使用与主服务器相同的配置;此法性价比不高;
4、数据访问压力进一步增大时,联结查询性能会急剧下降;此时就得进行“反模式”化设计,将表根据业务需求进行合并,以增大数据冗余来换取系统性能;
5、停用存储过程、存储函数或触发器等代码,将对应的功能在应用程序中完成;
6、删除表的各辅助索引,美国空间,改写查询使其仅使用主键索引;
7、数据库切分(sharding);此法复杂度较大,维护成本较高;且数据规模再次提升时重新切分的成本高昂,二次扩展能力受限;
二、RDBMS与NoSQL
实际使用中,只要架构得当,关系型数据库完全能够服务于各种级别的数据存储应用,比如Facebook和Google各自有着运转良好的MySQL服务器集群服务于不同层次不同领域的数据存储场景。但此等规模的应用需要强大的技术实力突破各式各样的应用限制,这也会带来居高不下的维护成本,而且关系型数据库某些内生性的限制依然会成为应用中的梦魇。于是,近几年来,一些被归类为NoSQL的新项目或框架在多个组织或企业中雨后春笋般涌现。这些新项目或框架很少提供类似SQL语言一样的查询语言,而是提供了一种简化的、类API的数据访问接口。但RDBMS与NoSQL真正的不同之处在于低层,即存储级别,因为NoSQL通常不支持事务或辅助索引的功能等。
另一方面,NoSQL的著名项目中彼此间有许多功能是重叠的,甚至有不少特性与传统的关系型数据库的功能也存在相同之处,因此NoSQL算不上革命性的技术,尽管从工程师的眼下其绝对是革命性的。于是,现实中,memcached也被划归了NoSQL阵营,似乎不属于RDBMS的存储管理类程序都自然而然的属于NoSQL,NoSQL也因而成为了非RDBMS系统的“海纳百川”之地。然而,“有容乃大”就难免“鱼龙混杂”,为了便于理解,这里从多个维度来对NoSQL的主流技术进行简单的归类,以便对此能有个概括性的认识,并能够在实际应用场景中有个可以参照的选择标准。
1、数据模型
数据模型指数据的存储方式,香港虚拟主机,其有好几个流派,如关系、键值、列式、文档及图像等。在它们的各自实现中,关系型数据库有MySQL、PostgreSQL、Oracle等,键值数据库有memcached、membase、Riak、Redis等,美国服务器,列式数据库有HBase、Cassandra、Hypertable等,文档数据库有MongoDB、CouchDB等,图像数据库有Neo4J等。在选用某特定的NoSQL产品时,应该事先评估应用程序是如何访问数据的,以及数据的schema是否经常演进等。
2、存储模型
指数据存储是基于内存存储还是持久存储。
3、一致性模型
存储系统在何种级别实现数据一致性,严格一致性还是结果一致性?一致性的等级可能会对数据访问延迟带来巨大影响。
4、物理模型
在物理模型上可归类分布式存储及单机存储。对分布式存储而言,其扩展能力及易扩展性如何也是一个重要的衡量指标。
5、读/写性能
对于工作在不同应用场景中的应用程序而言,其读/写需求有着显著不同。而不同的NoSQL产品也有着不同的适用性。
6、辅助索引
辅助索引有助于实现在非主键字段上完成排序、查询操作等;有的NoSQL产品不提供此类功能。
7、故障处理
不同的应用场景其故障恢复的时间容忍度不同,而不同的NoSQL产品也故障恢复能力方面也有着不同的表现。
8、数据压缩
当存储TB级别的数据时,尤其是存储文本数据时,数据压缩可以大量节约存储空间。
9、负载均衡
分布式存储将用户的读/写请求分布于多个节点同时进行能够极大提升系统性能。
10、锁、等待和死锁
RDBMS的事务处理过程分为两个阶段,多用户并发访问的场景中,这将显着增加用户在访问资源时的等待时间,甚至会导致死锁。
三、数据一致性模型
概括来讲,数据一致性是指在应用程序访问时,数据的有效性(validity)、可用性(usability)、精确性(accuracy)及完整性(integrity)方面的表现,其用于保证在用户自身事务或其他用户的事务执行过程中,每个用户看到的数据是一致的。在各种场景中都有可能产生数据一致性问题,但提到的较多的通常有应用程序一致性、事务一致性和时间点一致性等。
在数据库上,每个操作都可能促使数据库从一种状态转换为另一种状态,但这种转换的实现方式或过程是非特定的,因此其有着多种不同的模型。不过,无论是基于哪种实现,其最终结果要么是转换为的状态,要么恢复回原有的状态以保证数据的一致性。根据数据库在保证数据一致性实现的严格程度来分,大致有如下几类:
严格一致性(strict)
数据的改变是原子性的并且会立即生效;这是最高级别的一致性实现;
顺序一致性(Sequential)
每个客户端以他们提交应用的次序看到数据的改变;
因果一致性(Causal)
因果关联的所有的改变,在所有的客户端以同样的次序获取;
结果一致性(Eventual)
当一段时间内没有更新发生时,所有更新会通过系统进行传播,最终所有的副本都是一致的;也即当事务完成时,必须使所有数据都具有一致的状态;
弱一致性(Weak)
不保证所有的更新都能通告给所有客户端,也不保证所有客户端都能以同样的次序获取数据更新;
其中,结果一致性还可以进一步细分为多种不同的子类别,而且有些子类还可以共存,亚马逊公司的现任CTO Werner Vogels在“Eventually Consistent一文中对此有详细阐述。在文中,他还提出了CAP定理,并借此指出,一个分布式系统仅能同时实现一致性、可用性和分区容错错(partition tolerance)三种属性中的两种。
本文出自 “马哥教育” 博客,转载请与作者联系!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

在 Docker 中启动 MySQL 的过程包含以下步骤:拉取 MySQL 镜像创建并启动容器,设置根用户密码并映射端口验证连接创建数据库和用户授予对数据库的所有权限

MySQL在Web应用中的主要作用是存储和管理数据。1.MySQL高效处理用户信息、产品目录和交易记录等数据。2.通过SQL查询,开发者能从数据库提取信息生成动态内容。3.MySQL基于客户端-服务器模型工作,确保查询速度可接受。

优雅安装 MySQL 的关键在于添加 MySQL 官方仓库。具体步骤如下:下载 MySQL 官方 GPG 密钥,防止钓鱼攻击。添加 MySQL 仓库文件:rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm更新 yum 仓库缓存:yum update安装 MySQL:yum install mysql-server启动 MySQL 服务:systemctl start mysqld设置开机自启动

Laravel 是一款 PHP 框架,用于轻松构建 Web 应用程序。它提供一系列强大的功能,包括:安装: 使用 Composer 全局安装 Laravel CLI,并在项目目录中创建应用程序。路由: 在 routes/web.php 中定义 URL 和处理函数之间的关系。视图: 在 resources/views 中创建视图以呈现应用程序的界面。数据库集成: 提供与 MySQL 等数据库的开箱即用集成,并使用迁移来创建和修改表。模型和控制器: 模型表示数据库实体,控制器处理 HTTP 请求。

在开发一个小型应用时,我遇到了一个棘手的问题:需要快速集成一个轻量级的数据库操作库。尝试了多个库后,我发现它们要么功能过多,要么兼容性不佳。最终,我找到了minii/db,这是一个基于Yii2的简化版本,完美地解决了我的问题。

MySQL适合Web应用和内容管理系统,因其开源、高性能和易用性而受欢迎。1)与PostgreSQL相比,MySQL在简单查询和高并发读操作上表现更好。2)相较Oracle,MySQL因开源和低成本更受中小企业青睐。3)对比MicrosoftSQLServer,MySQL更适合跨平台应用。4)与MongoDB不同,MySQL更适用于结构化数据和事务处理。

Docker LNMP 容器调用步骤:运行容器:docker run -d --name lnmp-container -p 80:80 -p 443:443 lnmp-stack获取容器 IP:docker inspect lnmp-container | grep IPAddress访问网站:http://<容器 IP>/index.phpSSH 访问:docker exec -it lnmp-container bash访问 MySQL:mysql -u roo

文章摘要:本文提供了详细分步说明,指导读者如何轻松安装 Laravel 框架。Laravel 是一个功能强大的 PHP 框架,它 упростил 和加快了 web 应用程序的开发过程。本教程涵盖了从系统要求到配置数据库和设置路由等各个方面的安装过程。通过遵循这些步骤,读者可以快速高效地为他们的 Laravel 项目打下坚实的基础。
