我遇到过许多NoSQL数据库和SQL数据库。有不同的参数来衡量这些数据库的强弱,可伸缩性就是其中之一。横向和纵向缩放这些数据库有什么区别?
当前回答
让我们从增加资源的扩展需求开始,这样您的系统现在可以处理比以前更多的请求。
当你意识到你的系统越来越慢,无法处理当前的请求数量时,你需要调整系统。
这为您提供了两个选项。要么增加当前使用的服务器中的资源,即增加RAM、CPU、GPU和其他资源的数量。这就是所谓的垂直缩放。
垂直缩放通常代价高昂。它不会使系统具有容错性,即,如果您正在扩展使用单个服务器运行的应用程序,如果该服务器停机,您的系统将停机。在垂直缩放中,线程数量也保持不变。当过程发生时,垂直缩放可能需要系统暂时停止。增加服务器上的资源需要重新启动并关闭系统。
这个问题的另一个解决方案是增加系统中的服务器数量。该解决方案在科技行业中得到了广泛应用。这将最终降低每台服务器的每秒请求速率。如果您需要扩展系统,只需添加另一台服务器即可。您不需要重新启动系统。每个系统中的线程数减少,从而导致高吞吐量。为了将请求平均地分离到每个应用程序服务器,您需要添加负载平衡器,它将充当web服务器的反向代理。整个系统可以称为单个集群。您的系统可能包含大量请求,这些请求需要更多的集群。
希望您了解将缩放引入系统的整个概念。
其他回答
你有一家公司,只有一名员工,但你当时有一个新项目,你雇佣了新的应聘者——这是横向扩展。其中,新候选是新机器,项目是对api的新流量/调用。
作为一个项目,IIT/NIT负责处理所有对api/流量的请求。如果任何时候对你的api有更多的请求,那就解雇他,换成一个高智商的NIT/IIT家伙——这是垂直缩放。
公认的答案是水平与垂直缩放的基本定义。但与人们普遍认为的只有Cassandra、MongoDB等才能实现数据库的水平缩放不同,我想补充一点,任何传统的RDMS都可以实现水平缩放;而不使用任何第三方解决方案。
我知道很多公司,特别是基于SaaS的公司都这样做。这是使用简单的应用程序逻辑完成的。基本上,您需要一组用户,并将他们划分到多个DB服务器上。因此,例如,您通常会有一个存储客户端、DB服务器/连接字符串等的“元”数据库/表,以及一个存储客户机/服务器映射的表。
然后,只需将来自每个客户端的请求定向到它们映射到的DB服务器。
现在有些人可能会说这类似于水平分区,而不是“真正的”水平缩放,他们在某些方面是正确的。但最终结果是,您已经在多个DB服务器上扩展了数据库。
两种水平缩放方法之间的唯一区别是,一种方法(MongoDB等)缩放是由DB软件本身完成的。从这个意义上说,你是在“购买”规模。在另一种方法中(对于RDBMS水平缩放),缩放是由应用程序代码/逻辑构建的。
水平缩放===>数千小黄人将为您一起完成工作。
垂直缩放===>一个大块头将为您完成所有工作。
添加大量负载平衡器会产生额外的开销和延迟,这是在nosql数据库中横向扩展的缺点。这就像人们为什么说RPC不推荐的问题,因为它不健壮。
我认为在一个真实的系统中,我们应该同时使用sql和nosql数据库来利用当今系统的多核和云计算能力。
另一方面,如果使用oracle之类的sql数据库,复杂的事务查询具有很高的性能。NoSql可以通过分片用于bigdata和水平可伸缩性。
让我们从增加资源的扩展需求开始,这样您的系统现在可以处理比以前更多的请求。
当你意识到你的系统越来越慢,无法处理当前的请求数量时,你需要调整系统。
这为您提供了两个选项。要么增加当前使用的服务器中的资源,即增加RAM、CPU、GPU和其他资源的数量。这就是所谓的垂直缩放。
垂直缩放通常代价高昂。它不会使系统具有容错性,即,如果您正在扩展使用单个服务器运行的应用程序,如果该服务器停机,您的系统将停机。在垂直缩放中,线程数量也保持不变。当过程发生时,垂直缩放可能需要系统暂时停止。增加服务器上的资源需要重新启动并关闭系统。
这个问题的另一个解决方案是增加系统中的服务器数量。该解决方案在科技行业中得到了广泛应用。这将最终降低每台服务器的每秒请求速率。如果您需要扩展系统,只需添加另一台服务器即可。您不需要重新启动系统。每个系统中的线程数减少,从而导致高吞吐量。为了将请求平均地分离到每个应用程序服务器,您需要添加负载平衡器,它将充当web服务器的反向代理。整个系统可以称为单个集群。您的系统可能包含大量请求,这些请求需要更多的集群。
希望您了解将缩放引入系统的整个概念。
推荐文章
- 为什么我应该使用基于文档的数据库而不是关系数据库?
- 哪个更快/最好?SELECT *或SELECT columnn1, colum2, column3等
- 将值从同一表中的一列复制到另一列
- 什么是数据库池?
- 关于数据库,每个开发人员应该知道些什么?
- "where 1=1"语句
- 是使用各有一个模式的多个数据库更好,还是使用一个数据库有多个模式更好?
- 如何从Oracle的表中获取列名?
- 如何检查表上持有哪些锁
- 在MongoDB中查找重复的记录
- 对于PostgreSQL表来说,多大才算太大?
- 模式、表和数据库之间的区别是什么?
- 我看到VARCHAR(255)如此频繁地使用(而不是其他长度),有什么好的原因吗?
- 使用pgadmin连接到heroku数据库
- Delete_all vs destroy_all