您已经使用直观、用户友好的 UI 启动了应用程序。但是,如果您的应用程序遇到负载问题,则会在使用它时使您的最终客户感到沮丧。问题可能不在应用程序内,而出在数据库上。根据一项调查,38% 的数据库专业人员表示数据库停机是让他们夜不能寐的重大问题。停机可能是由于许多问题造成的,包括数据库配置不正确、负载处理不佳、数据库查询超时等。
在本文中,我们将讨论是否需要扩展数据库以及如何解决数据库可伸缩性问题。让我们从最明显的问题开始 — 为什么要进行数据库扩展?
为什么要扩展数据库?
应用程序的数据库应该能够扩展或收缩其计算资源,以满足应用程序的动态需求。例如,您的数据库应该能够纵向扩展以处理流量的突然激增。此外,当处于状态不佳时,您的数据库应该能够收缩以节省资源。确保良好的数据库可伸缩性的最佳方法之一是根据您的要求选择合适的数据库。对于物理服务器,数据库扩展和收缩可能是一个令人头疼的问题。云数据库解决方案可以做到这一点。
数据库可扩展性是一项资源密集型且具有挑战性的任务。因此,在开始项目之前,您需要确保您的产品需要一个可扩展的数据库。首先,确定您的产品在可预见的未来是否会经历流量激增。如果没有,您仍然可以使用旧数据库执行此操作。
如果您的企业是一家初创公司,那么投入资源购买可扩展的数据库是没有意义的。一旦应用程序达到临界质量并期望流量激增,您就可以这样做。
以下是需要数据库可伸缩性的几种方案:
-
您的应用程序已过时,并且您希望迁移到云系统
-
您的应用程序会遇到高负载
-
您的应用程序需要符合法规
-
您需要一个平衡的工作负载,可以为世界各地的用户提供服务
数据库扩展解决方案
1. 缓存数据库查询
提高数据库负载处理能力的最直接方法之一是缓存数据库查询。通常,应用程序只有少数几个查询,这些查询构成了所发出的大部分请求。您可以缓存此类查询,以便将来从缓存中读取这些请求。这样就无需在每次发出此类常见请求时从数据库中获取数据。快速为用户提供所需的数据。这样,缓存有助于提高数据库的性能。
Amazon ElastiCache 是一项缓存服务,可帮助您缓存数据库。借助 Amazon ElastiCache,您可以使用内存中缓存进行扩展。Amazon ElastiCache 支持实时使用案例。以下是 Amazon ElastiCache 的理想使用案例:
-
游戏排行榜
-
分析学
-
流
2. 数据库索引
缩放数据库并不总是意味着向现有设置添加更多数据库。有时,通过优化当前数据库,可以在一定程度上进行扩展。这就是数据库索引发挥作用的地方。使用数据库索引技术,您可以构建数据以提高从数据库表中检索数据的速度。
3. 数据复制
数据复制是一种策略,用于创建数据库的相同副本以创建其他计算机。复制策略有助于解决峰值负载。复制数据时,查询可以分布在多个数据库中,这反过来又会减少单个数据库的负载。此外,万一存储设备发生故障,复制的数据将派上用场,系统仍将完全正常运行。
4. 分片
扩展数据库的主要瓶颈之一是数据库设计不当。为了确保您不会遇到此瓶颈,必须首先为正确的业务应用程序选择正确的数据库。例如:
-
银行应选择关系型DBMS来确保其结构化数据的ACID(原子性、一致性、隔离性、持久性)。
-
在线多人游戏可以依赖键值没有SQL数据库
无论选择哪个数据库,请确保其中具有分片功能。分片意味着将数据库的单个大块拆分为较小的数据块,称为分片,可以存储在多个数据库中。有两种类型的分片:
-
水平分片
-
垂直分片
当数据库查询返回数据行的子集时,水平分片证明是有效的。这些行通常组合在一起。例如,筛选数据的查询基于较短的日期范围。
当数据库查询返回数据列的子集时,垂直分片被证明是有效的。例如,如果某些数据库查询仅请求名称,而其他数据库查询仅请求城市,则垂直分片在这种情况下证明是有效的。
分片有两个主要优点:
-
系统的整体存储容量与数据库分片的数量成正比。
-
如果一个分片处于脱机状态,您仍然可以依靠分片池来检索和存储数据。当分片脱机时,目前只有整个数据集的一部分不可用。因此,它不会对系统的运行产生重大影响。
结论
数据库是任何应用程序的关键元素。如果要缩放应用程序,如果不缩放数据库,就无法做到这一点。幸运的是,由于近年来的技术进步,我们拥有使扩展过程无缝且轻松所需的所有工具。人们可以利用Azure,AWS或Google Cloud等云服务提供商来扩展他们的应用程序。
本站声明:
1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/295041.html