传统观点认为,关系型数据库的可伸缩性和健壮性都不足以支撑需要大量连接且吞吐量巨大的物联网,以及物联网应用程序所需的各种特性。但我知道这不是真的,因为Oracle的客户多年来就一直在这么做。他们是怎么做到的呢?
首先,让我们确保在物联网的含义上达成一致。官方的定义是通过互联网实现万物互联,并使它们能够发送和接收数据。物联网涉及到各种各样的设备,从手表、电视、电话到烤箱、冰箱,以及专为连接和共享数据而制成的“智能”煤气表。并且在某些时候,需要收集这些数据用于信息挖掘。
从数据库的角度来看,组织需要捕获从物联网设备发送的大量数据,消化这些数据,然后根据业务需要进行数据挖掘。对于企业来说,提取和快速分析这些数据对于保持其在当今需要全天候、100%正常运行的商业世界中保持其竞争优势至关重要。要实现这个目标可以采用许多不同的形式,而其中的大多数都可以很好地与经过优化的关系数据库和硬件一起工作。
到底是使用SQL还是NoSQL?
一个常见的误解是要想支撑起物联网的工作负载就必须使用NoSQL数据库,因为其所需的数据摄取率超过了传统关系数据库的能力。但事实并非如此,Oracle的许多客户都证明了这一点。我们发现,一个经过优化的关系数据库在Oracle RAC集群的单个节点中摄取的数据比在某些整个NoSQL环境中摄取的数据还要多。注意,我说的是一个优化了的关系数据库。
总体而言,物联网工作负载的特征是需要进行大量小型、轻量级的数据转换,通常包括复杂的数据类型,如地理空间数据和非结构化数据(视频或音频记录)。因此,例如,从腕带收集健身数据的公司将会使用地理空间数据(记录步行路线)以及步数、心率等。
尽管最近被大肆宣传,但高摄取量的工作负载并不是一个新概念。例如,我们的一个电信客户每秒处理着数百万个呼叫记录,每天增加多达18TB的数据。
在关系数据库上运行的股票交易所每秒将记录180,000条消息,每天增加多达15TB的数据。
那么他们又是怎么做到的呢?关键是保证数据库的可伸缩性、灵活性以及提供实时分析的速度。在筛选非结构化数据时使用经过优化的硬件也是获得成功的重要因素。
搭建大规模物联网的关键1:数据库的可伸缩性
可伸缩性是指系统提供的与可用硬件资源成比例的吞吐量的能力,并且仅受可用硬件资源的限制。扩展Oracle数据库系统有两种不同的方法:实时应用集群(Real Application Clusters)和数据库分片(sharding)。
实时应用集群( RAC )可以使任何打包或定制的应用程序都能够不加修改的在连接到共享存储的服务器池中运行。如果池中的服务器出现故障,数据库将继续在其余服务器上运行。当需要更多的处理能力时,您只需将另一台服务器添加到池中,而不会导致任何停机。
Sharding则允许将大型数据库分为较小的数据库或分片,每个数据库或分片都可以存储在不同的硬件上。想象一下,一家全球零售公司拥有一个庞大的关系数据库,其中包含所有可用商品的分片数据;数据库的每个分片都将包含目录的一部分。
当查询请求特定窗口的小部件时,数据库服务器知道这些小部件类型存储在哪个分片上并将直接从那里检索数据。这种模式在全球经济下的另一个好处是,可以为每个国家创建一个分片,并将当地法规应用于该特定分片。例如,德国要求将所有德国数据物理存储在本国境内。使用分片技术就很容易做到这一点。
目前,大多数大规模操作的数据库都提供分片技术,包括MongoDB、Microsoft SQL Server和PostgreSQL。但仅仅将数据进行分片是不够的。同样重要的是能够有效地运行跨分片查询,因为这将大大减少获得完整业务视图所需的时间。
物联网的一个关键要求是能够快速获取大量数据。因此,无论数据在何处暂存,该存储的带宽需要比数据库本身更能控制负载的速度。毕竟,数据的加载速度永远不会超过读取速度。如果网络读取速度不能超过每秒200兆字节,那么数据的加载速度也就不能超过每秒200兆字节。
可伸缩性的其他重要组成部分是数组插入的使用(与单行插入不同)、并行执行和外部表的使用。
搭建大规模物联网的关键2:数据库的灵活性
灵活性是指能够快速、轻松地适应变化的能力。当下的物联网仍处于起步阶段,每台设备都可能有新的使用案例。能够轻松地适应数据格式的变化是至关重要的。当遇到这种需求时,开发人员通常会转向JSON。JSON极大地简化了应用程序开发,因为它允许在应用程序和数据库中使用相同的无模式表示。
分区也是实现灵活性的关键。分区使大量数据更易于管理,提高整体性能,并且对应用程序完全透明。分区的另一个好处是可以将历史数据存储在单独的分区中,从而可以将数据压缩并移动到较低的存储层。这样,即使将数据用于数据挖掘,也不会减慢实时查询的速度。
搭建大规模物联网的关键3:实时分析
如果无法及时分析数据以达到影响业务成果的目的,所有这些加快数据接收和数据存储的技巧都将毫无用处。在一天结束时,企业必须使用数据,这意味着需要将数据取出。
对于一个全球性的零售组织来说,其中的一个目标可能是需要及时汇总所有分片上销售的产品,以确定当下全球最受欢迎的10种产品。
而对于一家国际电信公司来说,同样的数据库体系结构可能在几个不同的方面都有所帮助。它们的大多数查询来自客户,因此它们可以使用分片和分区技术来从查询的执行中消除大部分的数据存储,从而满足客户所期望的速度。
在内部,业务经理则希望能够减少客户流失并提高盈利能力,因此他们挖掘分片和分区中的数据,寻找特定模式来确定哪些客户可能会取消他们的服务,或者他们可以主动向客户提供哪些额外的产品(如国际化的数据计划)。
例如,他们可能会提取被取消账单并分析客户的历史账单。分析在客户离开之前发生了什么?有什么共同的模式吗?在他们转到另一家供应商之前,是否有很大一部分人透支了他们的数据并连续收到了三笔大额账单?
一旦确定了这些模式,就可以采取积极主动的步骤来保持他们的业务。例如,在客户经历了两次数据超支后,客户代表就可以联系他们,提供一个包含更多数据的不同计划,以避免客户流失。
要进一步了解关于简化数据库设计和针对物联网工作负载进行优化的硬件,可以查看 Oracle提供的有关于此的白皮书。
原文标题:How to achieve large-scale IoT with relational databases,作者:Maria Colgan