数据库的前世今生( 二 )


第二个硬件趋势是从提高单核CPU时钟速度到多核CPU的转变 。时钟频率已保持了几十年的增长,但现在增长已经停止,因为硬功率限制和复杂性的问题 。复杂的、无序的、超标量的处理器正在被简单的、有序的、单问题核心所取代 。在DBMS中利用这种增加的并行性是很困难的,因为协调数百个线程的共享数据的访问非常复杂 。现代DBMS使用低开销并发控制和其他无锁技术来提高系统的可伸缩性 。
第三个趋势是商品硬件的成本降低 。这在云计算平台中尤为明显 。现在可以部署一个大型集群,其处理和存储能力只相当于十年前的一小部分 。这种变化与1980-1990年代相比,过去十年中没有共享的DBMS的数量在不断增加 。
尽管取得了这些进展,但仍然存在一些重大问题,由此阻碍了许多人部署数据密集型应用程序 。所有这些的一个主要主题是,数据库仍然是计算系统(例如,部署、配置、管理)的人工密集型组件 。使用两个独立的DBMS分离OLTP和OLAP工作负载,以避免其中一个工作负载减慢另一个工作负载的速度,但是它需要额外的进程来将数据从系统传输到另一个工作负载 。除此之外,调优DBMS以获得特定应用程序的最佳性能是出了名的困难 。许多组织求助于雇佣专家来为预期的工作量配置系统 。但是,随着数据库的规模和复杂性的增长,优化DBMS以满足这些应用程序的需求已经超出了人类的能力 。
3.数据库的未来
在接下来的50年里,就像之前一样,我们将看到数据库领域的重大变化 。除了存储的数据量和速度明显增大之外,数据库在应用程序中的使用方式以及它们所部署的硬件类型也将发生重大变化 。很难预测该领域的主要范式转变是什么,预测哪些数据库公司和产品仍然可用也是不现实的 。因此,我发表一下对几个广泛主题的看法 。
关系模型仍将主导大多数应用程序,但开发人员将不再需要过于担心其应用程序使用的数据模型 。编程框架和DBMS之间的耦合将更加紧密,这样所有的数据库交互都将是透明的(并且是最佳的) 。同样,SQL(或它的某种方言)将仍然是与DBMS交互的实际语言,但人类真实上永远不会编写SQL 。相反,他们会用自然语言询问有关数据的问题 。这些变化将导致我们编写程序的方式发生重大转变;开发人员以一种最容易被人类理解的方式对其数据进行建模,然后框架(与DBMS一起)将自动为其生成最佳存储方案 。所有程序都将使用强一致的ACID事务执行 。也就是说,在当今基于Web的应用程序中使用的最终一致性方法将避免增加管理的复杂性 。在网络通信、并发控制和资源管理方面将会有重大的改进,这将使用ACID事务变得更好并具有可伸缩性 。
将来会有越来越多的应用程序更自然地将数据存储在数组或矩阵中 。这是因为组织需要分析大量的非结构化信息,尤其是视频 。我们将掌握将所有非结构化数据转换成半结构化格式的能力,这种格式在DBMS中更容易组织和索引 。作为其中的一部分,时效性也将变得重要,因为它关系到信息如何随时间的变化 。目前的系统无法解释这一点,因为在一个时间序列中存储提取的每个视频帧的信息的开销很大 。
无处不在的“物联网”将意味着每台设备都能够收集有关其环境的数据 。这将包括从小型嵌入式传感器到大型自主机器人 。小型设备将使用片上DBMS,就像手机现在包含片上视频解码器一样 。所有这些系统的数据库将完全可以通过一些标准API(可能是SQL)进行组合和简易的联合 。这意味着DBMS将以零配置彼此通信 。你只需将两个DBMS相互指向对方,它们就会立即传递它们的信息,并确保它们是同步的 。某些管理器服务将能够根据需要跨设备分发查询执行 。人们将不需要手动配置提取-转换-加载实用程序或其他工具来保持不同系统上的数据一致 。以这种方式使所有不同的DBMS可组合和可互操作将是一项重要的工程工作 。因此,将会有一个使用人工智能或机器学习的工具包来自动地将不同的DBMS变体映射到彼此以进行相同的操作 。
对于新的硬件,更灵活和可编程的制程将更普遍 。DBMS将把程序的关键部分(例如锁管理器)编译到一个硬件加速器中 。我们还将看到易失性和非易失性内存之间的二分法的消失 。DBMS将假定所有内存都是快速和持久的,不需要维护变化无常的缓存 。这种新存储器将比今天可用的存储器大几个数量级 。因此,DBMS将在预先计算的物化视图中存储其数据的多个副本,以便快速响应任何可能的查询 。


推荐阅读