论文部分内容阅读
编译 杨勇
数据库多年来一直是由行和列组成的表格,现在看来还会这样下去。
什么是数据库?很久以前,这很简单。数据库是一个现代的Bob Cratchit(狄更斯笔下的人物),把数据放在由非常直的列组成的表格中,每一列的每一行都有一个输入。漫长而无尽的矩形显示的信息会一直延伸下去。
关系型数据库已经成为现代计算的基础。绝大多数网站都只是涂抹在SQL之上的一堆CSS。能让我们感到有所不同的不过是在一张大表中又增加了一行。
随着开发人员逐渐意识到并不是所有的东西都适合放到一张简单的表中,人们对大矩阵式表格的热情正在慢慢消退。而且开发人员非常聪明,热衷于为每一需求寻找解决方案,他们开始创建更好、更新的方式来存储信息。过去的几年里,我们存储数据的其他机制出现了爆炸式的增长。
这些非常棒的新选择还是数据库吗?还是要把数据放到一些大的矩阵中才能成为数据库吗?有些人喜欢用“数据存储”这个词来区分现代机制,因为“数据库”这个词在我们的头脑中已经根深蒂固,认为它就是一种旧的表结构。让我们把这些留给哲学家们吧。我们只是输入数据,然后得到答案。
这里介绍了以新形式和新表格重塑数据库的8种方法。
GPU计算
很久以前,开发了视频卡来为孩子们的游戏描绘出精美的场景,而现在所谓的图形处理单元能够进行大量的非图形处理任务。数据搜索只是这些处理单元能够胜任的非图形操作任务之一。挖掘大量的数据来寻找匹配,其本质上就是并行操作,包括了很多重复数百万次的基本的工作(测试等式)。因此,把工作交给GPU的数千个处理器,完成起来就会非常简单。
最成功之处不是在于回答每一查询(显然要快很多倍),而是在准备工作中,因为几乎不需要预处理。很多数据库通过维护索引来节省时间,这实际上是针对每个可能搜索的预先计算结果。如果这个索引损坏了或者被破坏了,重建它可能需要几个小时、几天,甚至几个月的时间。不过,如果数据可以放在GPU的内存中,通常不需要索引就能够得到数据。如果数据变化很快,大部分索引从未使用过,那么跳过预处理就能够提高效率。
非易失性存储器(NVRAM)
程序员50年前小试牛刀的时候就很容易做到这一点。他们不必采用精心设计的协议来处理RAM和硬盘之间的数据,以确保一致性。这是因为当时的记忆体是铁芯,当电源关闭时数据并没有被清除。这些好时光可能很快又会回来,因为芯片制造商正在讨论用NVRAM,即非易失性存储器来取代RAM。
对于数据库程序员来说,这极大的改变了游戏规则,因为他们最大的挑战(甚至是他们能继续工作下去的最大原因)正在消失。有些人建议,数据库可以更快一些,因为会话语义能更简单些。而有些人的想法则是在数据写入介质之后构建恢复日志,而不是在写入之前。
没有人知道什么时候能尘埃落定。如果人们不再需要永久记录,他们还会使用数据库吗?还是因为需要搜索和索引而再次使用数据库?需要重新思考所有的算法和所有的架构。今后未来十年左右,我们会知道使用NVRAM的最好方式。
扩展SQL
当NoSQL开始大规模应用的时候,一个很大的特点是能够把您的数据存储扩展到多个节点上。像Cassandra和MongoDB这样的NoSQL数据库,看起来具有所有大规模存储的优点,意味着人们可能会放弃以前习惯了的SQL环境。
在现实中,这也不需要付出什么代价。虽然前期很容易在大型数据库中进行一些试验——因为舍弃了SQL的所有负担,但却不能解释SQL为什么不能在大规模运行的多台机器上正常工作。事实上,Oracle这样的企业已经做了很多年。
最新的大型數据库允许您运用所有SQL知识,方便地使用分布在大集群上的一组数据。例如,CockroachDB提供了一个标准的SQL查询引擎,可以访问多个节点上复制的数据,并能够保证ACID。是的,您需要为实现数据一致性的基本支持而付一些费用,但比您预期的少很多。
地理空间数据库
传统的数据库是建立在一维数据集上的,不支持含有地理信息的二维坐标。您可以进行模拟,使用标准数据库,参照地理坐标来完成基本任务。如果您一定要把经度和纬度放在不同的列中,那么并不难搜索由一系列经度和纬度定义的框架中的所有行。但是,一旦您想超越这个基本框架,标准SQL查询就无能为力了。
地理空间数据库增加了一些额外的功能,简化了在二维空间中的搜索、排序和交叉。例如,空间索引一般通过在坐标空间上添加一个网格来进行工作,以便更快地搜索二维和三维环境中相邻的行。
这些索引支持使用“包含”、“重叠”、甚至“触摸”等操作以及由多边形定义的集合来编写查询。所有这一切都使得对现实世界的推理更有效。
图形数据库
表是很多数据结构很好的存储库,但却不适合对一个巨大的、新兴的数据结构进行建模,这一数据结构推动了互联网网络过去10年的发展。当所谓的“社交图”爆发时,我们的计算机中有越来越多的节点,并在它们之间建立了链接。节点之间的链接通常比其中的数据更重要。当然,很容易在经典关系型数据库中存储和检索一对节点之间的链接,但却难以进行更复杂的查询。在一个友谊网络中,Bob经过两跳或者三跳就能到达Chris吗?Mary在和她的一个朋友约会吗?
图形数据库更容易进行这样的查询。由于查询知道怎样查找链接指定的邻域,因此,不会没完没了的去查找表。Neo4J、OrientDB和DataStax等工具便是众多选择中的一些实例。它们也有自己的查询语言。
云数据库
最大的变化之一在于我们怎样购买数据库软件。过去,我们购买自己的机器,签署许可协议,在我们自己的机器上运行软件。而现在,云公司提供服务,把数据存储在我们看不见也摸不着的地方。他们只是说,当我们想要的时候,就会有数据。
数据库多年来一直是由行和列组成的表格,现在看来还会这样下去。
什么是数据库?很久以前,这很简单。数据库是一个现代的Bob Cratchit(狄更斯笔下的人物),把数据放在由非常直的列组成的表格中,每一列的每一行都有一个输入。漫长而无尽的矩形显示的信息会一直延伸下去。
关系型数据库已经成为现代计算的基础。绝大多数网站都只是涂抹在SQL之上的一堆CSS。能让我们感到有所不同的不过是在一张大表中又增加了一行。
随着开发人员逐渐意识到并不是所有的东西都适合放到一张简单的表中,人们对大矩阵式表格的热情正在慢慢消退。而且开发人员非常聪明,热衷于为每一需求寻找解决方案,他们开始创建更好、更新的方式来存储信息。过去的几年里,我们存储数据的其他机制出现了爆炸式的增长。
这些非常棒的新选择还是数据库吗?还是要把数据放到一些大的矩阵中才能成为数据库吗?有些人喜欢用“数据存储”这个词来区分现代机制,因为“数据库”这个词在我们的头脑中已经根深蒂固,认为它就是一种旧的表结构。让我们把这些留给哲学家们吧。我们只是输入数据,然后得到答案。
这里介绍了以新形式和新表格重塑数据库的8种方法。
GPU计算
很久以前,开发了视频卡来为孩子们的游戏描绘出精美的场景,而现在所谓的图形处理单元能够进行大量的非图形处理任务。数据搜索只是这些处理单元能够胜任的非图形操作任务之一。挖掘大量的数据来寻找匹配,其本质上就是并行操作,包括了很多重复数百万次的基本的工作(测试等式)。因此,把工作交给GPU的数千个处理器,完成起来就会非常简单。
最成功之处不是在于回答每一查询(显然要快很多倍),而是在准备工作中,因为几乎不需要预处理。很多数据库通过维护索引来节省时间,这实际上是针对每个可能搜索的预先计算结果。如果这个索引损坏了或者被破坏了,重建它可能需要几个小时、几天,甚至几个月的时间。不过,如果数据可以放在GPU的内存中,通常不需要索引就能够得到数据。如果数据变化很快,大部分索引从未使用过,那么跳过预处理就能够提高效率。
非易失性存储器(NVRAM)
程序员50年前小试牛刀的时候就很容易做到这一点。他们不必采用精心设计的协议来处理RAM和硬盘之间的数据,以确保一致性。这是因为当时的记忆体是铁芯,当电源关闭时数据并没有被清除。这些好时光可能很快又会回来,因为芯片制造商正在讨论用NVRAM,即非易失性存储器来取代RAM。
对于数据库程序员来说,这极大的改变了游戏规则,因为他们最大的挑战(甚至是他们能继续工作下去的最大原因)正在消失。有些人建议,数据库可以更快一些,因为会话语义能更简单些。而有些人的想法则是在数据写入介质之后构建恢复日志,而不是在写入之前。
没有人知道什么时候能尘埃落定。如果人们不再需要永久记录,他们还会使用数据库吗?还是因为需要搜索和索引而再次使用数据库?需要重新思考所有的算法和所有的架构。今后未来十年左右,我们会知道使用NVRAM的最好方式。
扩展SQL
当NoSQL开始大规模应用的时候,一个很大的特点是能够把您的数据存储扩展到多个节点上。像Cassandra和MongoDB这样的NoSQL数据库,看起来具有所有大规模存储的优点,意味着人们可能会放弃以前习惯了的SQL环境。
在现实中,这也不需要付出什么代价。虽然前期很容易在大型数据库中进行一些试验——因为舍弃了SQL的所有负担,但却不能解释SQL为什么不能在大规模运行的多台机器上正常工作。事实上,Oracle这样的企业已经做了很多年。
最新的大型數据库允许您运用所有SQL知识,方便地使用分布在大集群上的一组数据。例如,CockroachDB提供了一个标准的SQL查询引擎,可以访问多个节点上复制的数据,并能够保证ACID。是的,您需要为实现数据一致性的基本支持而付一些费用,但比您预期的少很多。
地理空间数据库
传统的数据库是建立在一维数据集上的,不支持含有地理信息的二维坐标。您可以进行模拟,使用标准数据库,参照地理坐标来完成基本任务。如果您一定要把经度和纬度放在不同的列中,那么并不难搜索由一系列经度和纬度定义的框架中的所有行。但是,一旦您想超越这个基本框架,标准SQL查询就无能为力了。
地理空间数据库增加了一些额外的功能,简化了在二维空间中的搜索、排序和交叉。例如,空间索引一般通过在坐标空间上添加一个网格来进行工作,以便更快地搜索二维和三维环境中相邻的行。
这些索引支持使用“包含”、“重叠”、甚至“触摸”等操作以及由多边形定义的集合来编写查询。所有这一切都使得对现实世界的推理更有效。
图形数据库
表是很多数据结构很好的存储库,但却不适合对一个巨大的、新兴的数据结构进行建模,这一数据结构推动了互联网网络过去10年的发展。当所谓的“社交图”爆发时,我们的计算机中有越来越多的节点,并在它们之间建立了链接。节点之间的链接通常比其中的数据更重要。当然,很容易在经典关系型数据库中存储和检索一对节点之间的链接,但却难以进行更复杂的查询。在一个友谊网络中,Bob经过两跳或者三跳就能到达Chris吗?Mary在和她的一个朋友约会吗?
图形数据库更容易进行这样的查询。由于查询知道怎样查找链接指定的邻域,因此,不会没完没了的去查找表。Neo4J、OrientDB和DataStax等工具便是众多选择中的一些实例。它们也有自己的查询语言。
云数据库
最大的变化之一在于我们怎样购买数据库软件。过去,我们购买自己的机器,签署许可协议,在我们自己的机器上运行软件。而现在,云公司提供服务,把数据存储在我们看不见也摸不着的地方。他们只是说,当我们想要的时候,就会有数据。