数据库

数据库扩展解决方案有哪些?

2020-08-24 16:20:26 | 来源:中培企业IT培训网

数据库是长时间存储在计算机中的有组织且可共享的数据集合。数据库中的数据是指某种数据模型的组织,描述和存储,具有最小的冗余度,高度的数据独立性和易伸缩性,并且可以在一定范围内多个用户共享,这就不得不提到数据库扩展了,在数据库扩展中主要存这样几个问题即:成本、使用指标查找瓶颈、从鸟瞰视角扩展应用程序。那么数据库扩展解决方案有哪些?在本文中,研究了数据库扩展解决方案,这通常是失败的第一点。如果您还不熟悉系统设计,下文将向您简短介绍这个问题。

  1.缓存数据库查询

缓存数据库查询是可以处理数据库负载的最简单的改进之一。通常,应用程序将包含少数查询,这些查询构成了大多数请求。不必每次都在网络上对该数据进行往返,而是可以将其简单地缓存在web服务器的内存中。第一个请求将从数据库中获取数据,并将结果缓存在服务器上,以后的请求将从缓存中读取。由于数据花费在网络上的时间更少,并且距离客户端更近,因此可以提高性能。

由于大量的工作负载分配给了缓存系统,因此还导致更多的数据库服务器资源可用。除了提高可用性之外,如果数据库不可用,则高速缓存仍可以为应用程序提供连续服务,从而使系统对故障的恢复能力更强。您可以使用许多工具对数据库查询日志进行分析,因此您可以查看哪些查询花费的时间最长,哪些查询运行的频率最高。

显然,缓存的数据会很快变得"陈旧"或过时。您将必须选择要缓存的数据以及要保留多长时间。例如,在线报纸每24小时就会有一份新的日报,而不是每次用户访问该网站时都从数据库中请求该数据,而是可以将这些数据在Web服务器上缓存24小时并直接从服务器提供该数据。产品或业务要求将决定哪些内容可以缓存,哪些内容不能缓存。

  2.数据库索引

数据库索引是一种提高数据库表上数据检索操作速度的技术。索引用于快速定位数据,而不必每次访问表时都在表中搜索每一行。通常,数据库索引的数据结构将是二进制搜索树。这允许将访问数据的时间复杂度从线性时间O(n)降低到对数时间Olog(n)。

根据表中的行数,这可以节省大量使用索引列的查询的时间。例如,如果您有10,000个用户,并且您的应用程序的配置文件页面按用户名查找用户,则未编制索引的查询将检查users表中的每一行,直到找到与传递给查询的用户名匹配的配置文件。这可能需要多达10,000个行检查O(n)。通过为"用户名"列创建索引,数据库可以在对数时间复杂度(Olog(n))下提取该行。在这种情况下,行检查的最大数量将是14,而不是10,000!

有效的索引编制通过提高效率来减轻数据库的负载,这还可以显着提高性能,从而带来更好的用户体验。创建索引确实会添加另一组要存储在数据库中的数据,因此在确定要索引的字段时必须谨慎判断。即使使用了现有的存储空间,索引也还是很值得的,尤其是在现代开发中,内存便宜且性能是生存不可或缺的一部分。

在本节中略微提到了时间复杂度和数据结构,但没有进行详尽的解释。如果您有兴趣学习或希望对时间复杂性和数据结构有所了解,那么上面链接的文章非常有用!

  3.会话存储

许多应用程序通过将会话ID存储在cookie中,然后将每个会话的键/值对的实际数据存储在数据库表中来处理会话。这可能会成为对数据库的大量读取和写入。如果会话数据使数据库不堪重负,那么最好重新考虑如何以及在何处存储该数据。

将会话数据移动到内存缓存工具可能是一个不错的选择。由于内存中的内存比大多数数据库使用的持久性磁盘存储要快,因此这将减轻数据库中会话数据的负担,并提高访问速度。但是,由于内存是易失性内存,因此如果缓存系统脱机,则存在丢失所有会话数据的风险。

您也可以考虑将会话实现更改为将会话信息存储在cookie本身中,这将使您保持会话状态的方法从服务器移到客户端。JWT是这种模式最流行的实现。这将减轻数据库中所有会话数据的负担,并消除服务器端会话的依赖性,尽管这会带来一系列挑战。

  4.从站主复制

如果即使在缓存通用查询,创建有效索引以及处理会话存储之后,数据库仍然承受着来自读取的过多负载,那么复制可能是下一个最佳选择。

使用从属主复制,您只有一个数据库可以写入。它被克隆到您读取的几个从数据库中,每个从数据库都位于另一台计算机上。这样可以减轻主数据库的读取负担,并将其分配到多个服务器上。该模型还提高了写操作的性能,因为主设备专门用于写操作,同时由于从设备分布在不同区域,因此可以显着提高读取速度并减少延迟。

由于每个从数据库都在另一台计算机上,因此对主数据库的写入需要传播到从数据库,这可能导致数据不一致。如果您需要立即读取写入数据库的数据,例如您正在更新配置文件并希望立即呈现它,则可以选择从master数据库读取。从属主复制是一个功能非常强大的扩展解决方案,但是它具有相当多的复杂性。在用尽了更简单的解决方案并确保在应用程序内进行有效优化之后,实施此解决方案是明智的。

  5.数据库分片

到目前为止,这些扩展解决方案中的大多数都专注于通过管理对数据库的读取来减少负载。数据库分片是一种水平扩展解决方案,可通过管理对数据库的读写来管理负载。这是一种架构模式,涉及将主数据库拆分为多个数据库的过程,这些数据库可以更快,更易于管理。

数据库分片技术有两种类型:垂直分片和水平分片。使用水平分区时,将表取出并放在不同的机器上,每个表具有相同的列,但行不同。垂直分区更为复杂,其中涉及在多台计算机之间拆分一个表。一个表被分离出来并放入新的不同表中。一个垂直分区中保存的数据独立于所有其他分区中的数据,每个表都包含不同的行和列。

两种分片技术都有助于水平扩展,也称为"向外扩展",这使您可以在系统中添加更多机器以分配/分散负载。水平扩展通常与垂直扩展形成对比,后者涉及升级现有服务器的硬件。扩展数据库相对简单,尽管任何非分布式数据库在计算能力和存储方面都有其局限性,因此拥有自由扩展的自由度可使您的系统更加灵活。

分片的数据库体系结构还可以显着提高应用程序查询的速度,并提供增强的故障恢复能力。在未分片的数据库上提交查询时,它可能不得不搜索表中的每一行,这可能会非常慢。或者,通过将一个表拆分为多个表,查询必须遍历更少的记录才能返回结果。由于每个表都在单独的服务器上,因此减轻了服务器不可用带来的影响。对于分片的数据库,与未分片的数据库相比,中断的影响可能仅影响单个分片,在未分片的数据库中,中断可能使整个应用程序不可用。

具有分片的数据库体系结构可带来一些巨大的好处,但是,它很复杂且实现和维护成本很高。在用完其他扩展解决方案之后,绝对可以考虑使用此选项,因为无效实施的后果可能非常严重。

以上就是关于数据库扩展解决方案有哪些的全部内容介绍,想了解更多关于数据库的信息,请继续关注中培伟业。

猜你喜欢