今天的数据驱动的业务不仅需要对实时数据做出快速响应,还必须执行复杂的查询来解决复杂的业务问题。例如,客户个性化系统需要将历史数据集与实时数据流相结合,以立即为客户提供最相关的产品推荐。对于提供关键任务、实时业务可见性的运营分析系统来说,情况也是如此——例如,在线支付提供商需要监控其在全球范围内的交易,以发现可能预示着金融欺诈的异常情况。或者想象一个在线学习平台需要为学区客户和内部客户团队提供有关学生和教师使用情况的最新见解。或者,市场新闻提供商需要监控并确保其金融客户在狭窄的窗口内收到准确、相关的更新以进行有利可图的交易。NoSQL的局限性SQL支持复杂的查询,因为它非常具有表现力。是一种成熟的语言。复杂的SQL查询在商业智能(BI)中早已司空见惯。当像Hadoop和Hive这样的系统出现时,它首次将复杂查询与大数据结合起来。Hive在Hadoop的原生MapReduce编程范例之上实现了一个SQL层。这些第一代基于SQL的大数据系统的权衡是它们以更高的查询延迟为代价增加了数据处理吞吐量。因此,这些用例仍然以批处理模式运行。当像键值和文档存储这样的NoSQL数据库出现时,情况发生了变化。设计目标是低延迟和规模。公司现在可以将大型数据集组织成简单的键值对或文档对,并立即执行查找和其他简单查询。这些大规模、可扩展的键值存储或文档数据库的设计者认为,只有当查询的性质很简单时,规模和速度才有可能。在键值存储中查找值可以快如闪电。相比之下,由于过滤器、排序和聚合的固有复杂性,SQL查询在技术上太具有挑战性,无法在大量数据上快速执行。不要关注幕后黑手不幸的是,由于上述原因,当查询复杂、嵌套且必须返回精确答案时,NoSQL数据库往往会出现问题。这不是他们的强项。他们的查询语言,无论是CQL(Cassandra)和DruidSQL等类似SQL的变体,还是MQL(MongoDB)等完全自定义的语言,都不支持join等复杂的查询命令。NoSQL数据库的供应商就像绿野仙踪,用烟雾弹和镜子来分散您的注意力,大谈狭隘的速度定义,这样您就不会注意到NoSQL数据库在实时分析方面的实际弱点。使用NoSQL数据库的开发人员最终被迫将连接和其他数据逻辑嵌入到他们自己的应用程序代码中——从从单独的表中获取数据到进行连接优化和其他分析工作的一切。虽然可以走NoSQL道路,但它既麻烦又缓慢。以申请抵押贷款的人为例。为了分析他们的信用度,您将创建一个数据应用程序来计算个人的信用历史、未偿贷款和还款历史等数据。为此,您需要组合几张数据表,其中一些数据可能会被归一化,哪些数据是真实的哪些不是。您还可以分析当前和历史抵押贷款利率以确定提供的利率。使用SQL,您可以简单地将信用历史和贷款支付表连接在一起,并聚合大型历史数据集,例如每日抵押贷款利率。但是,与SQL相比,使用Python或Java之类的工具手动重新创建连接和聚合可能会为您的应用程序添加数十行甚至上百行代码。更多的应用程序代码不仅需要更多的时间来创建,而且几乎总是导致更慢的查询。如果不使用基于SQL的查询优化器,则加速查询既困难又耗时,因为应用程序中的业务逻辑与应用程序使用的基于查询的数据访问路径之间没有分界。SQL可以高效、优雅地处理的常见连接表之类的东西在其他语言中可能是一个臃肿的内存消耗者。最后,用应用程序代码编写的查询很脆弱,需要不断维护、测试,如果数据量发生变化,还可能需要重写。大多数开发人员缺乏时间和专业知识来进行这种持续维护。我认为只有一种NoSQL系统可以合理地处理复杂的查询。图QL。GraphQL系统可以将数据类型与特定数据字段相关联,并提供检索文档选定字段的功能。它的查询API支持复杂的操作,例如根据一组匹配字段过滤文档,并有选择地返回匹配文档中的字段子集。GraphQL的主要分析缺陷是缺乏基于数据集中特定字段值连接两个不同数据集的表现力。大多数分析查询都需要这种在查询时连接多个数据源的能力。选择最适合工作的工具-SQL在技术和生活中,每项工作都有为其设计的最佳工具。对于复杂的分析查询,SQL无疑是最好的工具。SQL拥有经过半个多世纪发展起来的丰富而强大的命令集。创建查询很容易,甚至更容易调整和优化它们以获得更快的结果、更小的中间表和更低的查询成本。有一些关于SQL数据库的神话,但它们基于1990年代的传统关系系统。事实上,现代云原生SQL数据库支持实时分析所需的所有关键功能,包括.可变数据可实现难以置信的快速数据摄取和顺利处理延迟事件。灵活的架构,可以根据传入的流式数据的结构自动调整。立即扩展数据写入或查询以处理突发数据。SQL仍然非常流行,在所有编程语言中排名最高。正如我们所见,它支持复杂的查询,这是现代实时数据分析的要求。相比之下,NoSQL数据库在执行连接和其他复杂查询命令方面较弱。此外,寻找鲜为人知的自定义查询语言方面的专家可能既费时又费钱。最重要的是,您可以轻松找到熟悉SQL及其复杂查询功能的熟练数据工程师和数据操作人员。他们将能够利用这些知识和能力来推动您的组织从批量分析到实时分析的飞跃。
