许多网站和应用程序通常将其数据存储在数据库中。从数据库中读取和写入数据会大大影响应用程序的延迟。尽可能地减少延迟是很重要的,因为用户期望快速和响应的应用程序,而快速的网站在搜索引擎优化(SEO)方面表现更好。
写入数据库会增加延迟,因为数据库通常将数据写入磁盘而不是保存在内存中。数据库应用压缩和加密是很常见的,在读写数据时增加了延迟。为了克服这些挑战,你可以使用内存数据库,从RAM而不是磁盘中快速存储和检索数据。
本文讨论了内存数据库如何工作,一些流行的选择,以及与标准数据库相比的一些权衡。
- 什么是内存数据库?
- 内存数据库的解释
- 内存数据库的优势和劣势
- 为什么不是所有的数据库都是内存的?
- 内存数据库的使用案例
- 内存数据库的例子
什么是内存数据库?
内存数据库使用RAM而不是硬盘驱动器(HDD)或固态驱动器(SSD)来存储数据,极大地减少了读写数据的延迟。延迟的减少是由于两个主要原因。首先,从内存中访问数据比从磁盘中访问数据要快,其次,用于在内存中存储数据的数据结构比磁盘存储更直接。因此,在读取和写入数据时,CPU的开销较低。
这种低延迟是有代价的,因为如果服务器发生故障,存储在内存中的数据就会丢失。与磁盘存储不同,内存在断电时不会保留其内容,因此需要对弹性和速度进行权衡。
对于需要快速或实时数据的应用,如排行榜或实时分析,内存数据库是一个很好的选择。它们也有助于缓存你通常存储在基于磁盘的数据库中的数据,以减少对磁盘的读写次数,并尽量减少延迟。
减少延迟对网站来说特别重要。发现网站反应灵敏的用户更有可能继续使用它。此外,谷歌和其他搜索引擎也将网站加载速度作为SEO的一个因素。快速的网站在搜索结果中排名更好,增加了用户访问你的网站的机会。
内存数据库的解释
由于内存数据库在RAM中存储数据,它们的延迟远远低于HDD,HDD使用机械、移动部件来访问正确的磁盘位置。然后,HDD必须读取数据并通过存储设备和计算机之间的接口进行传输。此外,即使有了SSD,RAM的速度仍然可以达到30倍,因为它的内存芯片和CPU接口性能更强。一些基准测试表明,将MySQL与Redis–一种流行的内存数据库–作为缓存层使用,与使用独立的MySQL数据库相比,查询延迟最多可减少25%。
仅使用MySQL以及MySQL和Redis的基准测试(图片来源:DZone)
内存数据库速度快还有一个原因。你可以优化内存数据库使用的数据结构,以加快检索速度。例如,关系型数据库通常使用B树做索引,允许快速搜索,同时支持将大数据块读写到磁盘。内存数据库不需要将数据块写入磁盘,可以选择性能更强的数据结构,进一步降低延迟。内存数据库通常按原样存储和使用数据,不需要在数据库层进行任何转换或解析。这也增加了延迟的减少,因为它加快了读和写的时间。
由于技术上的改进,内存数据库已经变得更加流行。首先,每千兆字节(GB)的内存价格在过去20年里大幅降低,这使得使用内存进行数据存储变得更加实惠。内存数据库解决方案和管理云服务的改进也帮助缓解了它们的一些主要缺点。
此外,像Redis这样的内存数据库现在可以将数据从内存中快照到磁盘上,如果服务器发生故障,可以恢复数据。云服务提供地理复制,这意味着应用程序可以在出现问题时通过故障转移保持在线。这种成本的降低和可靠性的提高使内存数据库成为现代应用和网站的可行选择。
内存数据库的优势和劣势
内存数据库的主要优点是。
- 它们提高了性能。
- 由于它们存储数据的方式,它们的扩展更简单。
- 它们通常能提高应用程序的可靠性。
内存数据库通常将数据存储为非结构化或半结构化,而不是存储在复杂的关系模型中。非结构化的数据使数据库的扩展更加直接,因为加入生活在多个节点上的数据的网络数据传输开销是不必要的。
由于存储在RAM中的数据的不稳定性,提高应用程序的可靠性似乎是违反直觉的。然而,当作为一个缓存层使用时,内存数据库可以在请求高峰期减少主数据库的负担。缓存层还可以帮助降低成本,因为为了加快频繁请求的速度,扩展传统数据库往往比内存数据库更昂贵,然后使用中央数据库进行长期存储。
内存数据库的主要缺点是。
- 如果作为唯一的数据库使用,成本会增加
- 存储规模有限
- 较少的安全功能
内存数据库一般不使用加密等安全功能,因为所有东西都必须在内存中,包括加密密钥。这些功能使得加密数据无效,因为任何能够访问内存的恶意实体在理论上也可以访问加密密钥。
内存数据库与传统数据库一起使用时,可以降低成本。然而,当它们作为唯一的数据库使用时,特别是在存储大量数据时,由于内存相对于磁盘存储的价格较高,它们往往更加昂贵。这种成本也禁止了你可以保留的数据量,因为在内存中存储大型数据集变得很昂贵,而且往往需要多个服务器。
为什么不是所有的数据库都是内存的?
阻碍内存数据库普及的主要缺点是成本。尽管内存价格已经大幅下降,但每GB的价格仍然比HDD和SSD高得多。这种成本使得内存数据库对于具有巨大数据足迹的更广泛的应用来说过于昂贵。
纠结于停机时间和WordPress问题?Kinsta是为节省你的时间而设计的托管解决方案 查看我们的功能
如果内存的价格继续下降,那么有一天内存数据库会成为默认的数据库,而基于磁盘的数据库只在少数情况下使用。
内存数据库的使用案例
内存数据库最常见的用途之一是缓存。你可以将内存数据库作为一个缓存层与传统的数据库一起使用。内存数据库存储频繁访问的数据,防止在基于磁盘的数据库中进行重复和昂贵的查找,提供更快的用户体验。
内存数据库在电子商务网站、论坛和带有评论区的高流量博客中也已经很有名了。这是因为这些都是高度动态的网站。电子商务网站希望个性化用户体验,并显示实时的产品可用性。博客和论坛可以有成百上千的用户同时发帖和评论。这意味着网站需要处理高写入量,并能迅速将最新内容和评论反馈给用户。内存数据库在存储用户生成的内容和提供最新的个性化体验方面减少了延迟。
内存数据库也是游戏排行榜的最佳人选。它们可以实时更新和检索数据,并有效地对数据进行排序,以便随着游戏的进行提供排行榜的当前视图。
你也可以将它们用于实时分析。它们使你能够将数据流导入数据库,并在最新版本的数据上执行查询,用于实时仪表盘、风险分析和机器学习模型。
内存数据库的例子
在选择内存数据库时,有很多选择。一些最受欢迎的是Redis、Memgraph和Hazelcast。Redis是使用最广泛的,在大多数云平台上可作为管理服务使用。Memgraph提供流式数据的图形计算,全部在内存中,而Hazelcast提供与Redis类似的功能,但有不同的缓存模式。
Redis通常是网站和应用程序之间的一个缓存层,通过防止昂贵的数据库读取来提高性能。在Kinsta的Redis插件的帮助下,WordPress网站也可以实现这种性能提升。除了这个插件,Kinsta还提供Kinsta APM工具来帮助解决Redis查询的任何性能问题。
在Kinsta上运行的网站默认使用缓存。然而,数据库请求频繁的网站仍然会从Redis中受益匪浅。数据库延迟是拖累网站的最主要因素之一,但Redis有助于减少这种负担,并使网站能够快速扩展。
小结
数据库延迟会显著影响网站或应用程序的整体延迟。从硬盘读取和写入硬盘会增加延迟。内存数据库减少了数据库的延迟,因为它们在RAM中存储数据。即使使用SSD,RAM仍然更快,因为它使用更快的内存芯片和更快的接口到CPU。此外,你可以优化内存数据库使用的数据结构,以加快检索速度。
内存数据库作为网站和传统数据库之间的缓存层使用时,可以加快网站和应用程序的速度。这是因为内存的访问速度比磁盘快,这种开销的减少导致网站加载时间加快,并有助于改善搜索引擎优化。
Redis是最流行的内存数据库选项之一,你可以使用Kinsta插件轻松将其添加到WordPress网站。为你的Kinsta托管的网站试试Redis插件吧。
原文地址:https://www.wbolt.com/in-memory-database.html