热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

持久性内存将颠覆数据库

作者:KyleJ.Davis是RedisLabs的技术营销经理。我在1999年开始上大学,那一年我学习SQL。我还记得设想在一台服务器上开发一个小小的应用程序,一行SQL触

作者:Kyle J. Davis是Redis Labs的技术营销经理。


持久性内存将颠覆数据库插图

我在1999年开始上大学,那一年我学习SQL。我还记得设想在一台服务器上开发一个小小的应用程序,一行SQL触发了一连串惊人的操作。这种查询语言向磁盘控制器发出了命令,磁盘控制器继而在磁盘上移动驱动臂。磁头能够获取之前写入到磁性介质的数据。数据沿着线路高速发回到控制器,并通过操作系统发回到我的软件。这一切出现在短短几秒钟内。

那是大概20年前的事了。现在的学生会有全然不同的体验,一切都不一样。旋转介质的微机械方面被固态硬盘(SSD)取代。SSD是固态的,它们没有电机或驱动臂,完全是悄然无声的闪存。不过深入挖掘一番,它们仍模仿旋转磁盘的机械部件。数据库和文件系统仍然是为旋转磁盘世界设计的――大多数数据库软件专门设计成在移动介质世界的机械局限性范围内提供持久性。

现在,快进到20年后的2039年。我确信我们今天所做的事情将来看起来像拨号连接一样愚蠢。我不是未来学家,而是数据库人士。我考虑的是数据、如何存储和检索数据。

由于如今持久性内存技术成为现实,应用程序摆脱了物理介质所带来的束缚。随着我们对于数据库执行的操作的认识发生转变,情况开始变得模糊起来。持久性内存运行起来更像RAM,而不是像其他任何东西。此外,文件概念变得不那么重要了,因为文件系统(旋转磁盘时代的另一个遗迹)并不总是掉电的持久性数据所必不可少的。

有鉴于此,由于没有旋转介质的负担,数据库有点不一样。以下是内存计算未来的几个基本要素:


  • 集群――持久性内存会比SSD更昂贵(至少最初是这样)。因此,对于即使中等大小的数据而言,仍然需要有一个跨多台机器的数据集。这需要出现在可以安全地提供数据持久性的最少数量的机器上。
  • 协议和网络的优化――如果你消除了一个系统的所有类别的瓶颈,网络之类的部分就变得非常显然。开销很低的协议以及客户端与服务器之间可以异步访问的持久性连接,可确保内存数据存储的优势没有丢失。
  • 高可用性――虽然即便基于磁盘的系统也常常需要高可用性,内存系统的更高吞吐量意味着哪怕短暂的中断也可能意味着数十亿个请求未得到处理。

此外,2039年编写的软件的架构将大不相同。现在,以不同方式提供数据的服务之间有着非常严格的界限。你可能有一个数据库来处理关系查询。今天,我们可以构建并不总是需要关系数据的应用程序,而是依赖已确立的NoSQL概念。不过,这仅在需要更高性能的情况下才执行,常常默认使用某个关系数据库来提供持久性和丰富的数据访问。如果你可以提供持久性内存以及对不同模型中的单个数据执行操作的方式,那么针对传统关系数据库的需求将仅限于一些非常具体的用途。

数据存储基本面随硬件而变化

在过去的几年,关系模型极其成功。你可以推理分析许多问题,并将它们放入到可以被操作和查询的规范化表中。这一招很管用,但如果你有一个较简单的问题要解决,比如说,通过主键获取某一项,就得解决大部分同样的复杂环节:查询、表和模式等。NoSQL(更具体地说键/值存储系统)使得这种方法看起来很可笑。

的确,考虑其他数据模型时,可以看到类似的模式。如果是时间序列数据,很简单,只需要轻量级摄取和最小模式,但关系数据库中的时间序列数据有负荷。图形数据尤其不适合实现到关系模型的上面,会从功能上破坏任何类型的内表互操作性,无法实现图形节点之间的临时关系。

正是由于这个棘手的问题,NoSQL界众多特殊用途的数据库应运而生。各自以自己的方式提供很出色的访问。然而这带来了自身的问题。每种数据库都必须由某人管理,扩展、监控和保护方面各自有着不同的特点。此外,这些数据库无法以有意义的方式相互联系,因而给依赖这些系统的应用程序带来了负担。

随着我们进入到未来,存储数据这个基本概念将从铁磁材料颗粒翻转极性变成可直接寻址的异常小的硅片层,可以快速操作和读取。由于硬件在变化,我们使用硬件的方式也应该随之变化。

由于数据库接近DRAM的CPU可寻址性,不过数据在掉电情况下保留下来,20年后我们的应用程序很显然会将数据视作又近又快,更类似程序内部的变量而不是远程数据库内部的变量。

数据作为一种最方便和最高效的模型而进入,然后数据库本身就能意识到该数据,以原子方式操纵该数据,并对该数据执行操作。数据改变了模型,可以替换原始样式或与之共存。应用程序可以根据需要立即检索新数据,而不是非得对单个关系模型执行巧妙的处理。再也不必担心如何扩展专用数据库,而是在最基本的层面操纵数据。不过,你仍然要解决传统的问题:集群、协议优化和高可用性,但处理局部性和数据库层内数据的可塑性消除了一大类问题。

2039年,我不知道我们是否会使用喷气式背包。然而,我很确信我们不会以1999年所熟悉的方式来使用数据库或编写应用程序。


推荐阅读
  • 在Java分层设计模式中,典型的三层架构(3-tier application)将业务应用细分为表现层(UI)、业务逻辑层(BLL)和数据访问层(DAL)。这种分层结构不仅有助于提高代码的可维护性和可扩展性,还能有效分离关注点,使各层职责更加明确。通过合理的设计和实现,三层架构能够显著提升系统的整体性能和稳定性。 ... [详细]
  • 提升 Kubernetes 集群管理效率的七大专业工具
    Kubernetes 在云原生环境中的应用日益广泛,然而集群管理的复杂性也随之增加。为了提高管理效率,本文推荐了七款专业工具,这些工具不仅能够简化日常操作,还能提升系统的稳定性和安全性。从自动化部署到监控和故障排查,这些工具覆盖了集群管理的各个方面,帮助管理员更好地应对挑战。 ... [详细]
  • SSAS入门指南:基础知识与核心概念解析
    ### SSAS入门指南:基础知识与核心概念解析Analysis Services 是一种专为决策支持和商业智能(BI)解决方案设计的数据引擎。该引擎能够为报告和客户端应用提供高效的分析数据,并支持在多维数据模型中构建高性能的分析应用。通过其强大的数据处理能力和灵活的数据建模功能,Analysis Services 成为了现代 BI 系统的重要组成部分。 ... [详细]
  • Spring框架的核心组件与架构解析 ... [详细]
  • 在探讨Hibernate框架的高级特性时,缓存机制和懒加载策略是提升数据操作效率的关键要素。缓存策略能够显著减少数据库访问次数,从而提高应用性能,特别是在处理频繁访问的数据时。Hibernate提供了多层次的缓存支持,包括一级缓存和二级缓存,以满足不同场景下的需求。懒加载策略则通过按需加载关联对象,进一步优化了资源利用和响应时间。本文将深入分析这些机制的实现原理及其最佳实践。 ... [详细]
  • PHP自学必备:从零开始的准备工作与工具选择 ... [详细]
  • 初探性能优化:入门指南与实践技巧
    在编程领域,常有“尚未精通编码便急于优化”的声音。为了从性能优化的角度提升代码质量,本文将带领读者初步探索性能优化的基本概念与实践技巧。即使程序看似运行良好,数据处理效率仍有待提高,通过系统学习性能优化,能够帮助开发者编写更加高效、稳定的代码。文章不仅介绍了性能优化的基础知识,还提供了实用的调优方法和工具,帮助读者在实际项目中应用这些技术。 ... [详细]
  • 作为软件工程专业的学生,我深知课堂上教师讲解速度之快,很多时候需要课后自行消化和巩固。因此,撰写这篇Java Web开发入门教程,旨在帮助初学者更好地理解和掌握基础知识。通过详细记录学习过程,希望能为更多像我一样在基础方面还有待提升的学员提供有益的参考。 ... [详细]
  • 在使用 SQL Server 时,连接故障是用户最常见的问题之一。通常,连接 SQL Server 的方法有两种:一种是通过 SQL Server 自带的客户端工具,例如 SQL Server Management Studio;另一种是通过第三方应用程序或开发工具进行连接。本文将详细分析导致连接故障的常见原因,并提供相应的解决策略,帮助用户有效排除连接问题。 ... [详细]
  • CTF竞赛中文件上传技巧与安全绕过方法深入解析
    CTF竞赛中文件上传技巧与安全绕过方法深入解析 ... [详细]
  • 小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限
    小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限 ... [详细]
  • 本文详细介绍了使用 Python 进行 MySQL 和 Redis 数据库操作的实战技巧。首先,针对 MySQL 数据库,通过 `pymysql` 模块展示了如何连接和操作数据库,包括建立连接、执行查询和更新等常见操作。接着,文章深入探讨了 Redis 的基本命令和高级功能,如键值存储、列表操作和事务处理。此外,还提供了多个实际案例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 使用SQL命令创建数据库及其语句解析
    使用 `CREATE DATABASE` 命令可以创建一个新的数据库,并指定其名称。该 SQL 语句用于初始化数据库结构,执行后将生成一个新的数据库实例,用于存储相关的数据对象和表。在本例中,通过执行 `CREATE DATABASE 课程管理1`,系统将创建一个名为“课程管理1”的数据库,以便后续的数据管理和操作。 ... [详细]
  • REST与RPC:选择哪种API架构风格?
    在探讨REST与RPC这两种API架构风格的选择时,本文首先介绍了RPC(远程过程调用)的概念。RPC允许客户端通过网络调用远程服务器上的函数或方法,从而实现分布式系统的功能调用。相比之下,REST(Representational State Transfer)则基于资源的交互模型,通过HTTP协议进行数据传输和操作。本文将详细分析两种架构风格的特点、适用场景及其优缺点,帮助开发者根据具体需求做出合适的选择。 ... [详细]
  • 在JavaWeb项目架构中,NFS(网络文件系统)的实现与优化是关键环节。NFS允许不同主机系统通过局域网共享文件和目录,提高资源利用率和数据访问效率。本文详细探讨了NFS在JavaWeb项目中的应用,包括配置、性能优化及常见问题的解决方案,旨在为开发者提供实用的技术参考。 ... [详细]
author-avatar
L-壹_413
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有