1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        SQL 已死,但 SQL 將永存!

        共 3385字,需瀏覽 7分鐘

         ·

        2021-09-19 03:02

        點(diǎn)擊關(guān)注上方“逆鋒起筆”,
        設(shè)為“置頂或星標(biāo)”,第一時(shí)間送達(dá)干貨
        在 SQL 被引入的 48 年中,它經(jīng)歷了許多數(shù)據(jù)庫(kù)的誕生和消亡,也經(jīng)歷了許多數(shù)據(jù)處理方式的誕生和消亡。
        以下為譯文:
        四十八年前,兩位年輕的IBM研究人員在數(shù)據(jù)庫(kù)上提出了一種新的語(yǔ)言,這是一種關(guān)系型語(yǔ)言,它奉行一切數(shù)據(jù)可以被聲明性地操作和容易操作的思想。自Don Chamberlin和Ramond Boyce出版《SEQUEL:結(jié)構(gòu)化英語(yǔ)查詢語(yǔ)言》一書后的幾年里,關(guān)系模型和SQL已經(jīng)擴(kuò)展并被大量的技術(shù)所采納,如OLTP、OLAP、對(duì)象數(shù)據(jù)庫(kù)、對(duì)象關(guān)系數(shù)據(jù)庫(kù),甚至NoSQL等等。SQL同時(shí)也啟發(fā)了非關(guān)系數(shù)據(jù)庫(kù)的查詢語(yǔ)言設(shè)計(jì):如SQL for Object-Database(用于對(duì)象數(shù)據(jù)庫(kù)的SQL),SQL for Object-Relational(用于對(duì)象關(guān)系型數(shù)據(jù)庫(kù)的SQL),SQL for XML、SQL for Spatial、SQL for Search、SQL for JSON、SQL for Timeseries、SQL for Streams等等。每個(gè)BI工具都使用各種各樣的SQL與數(shù)據(jù)交互。實(shí)際上,SQL是最成功的第四代語(yǔ)言。
        “SQL是一種只有它自己的力量才能超越它的神秘手段?!薄狶ukas Eder
        正如Don最近所說(shuō)的,SQL是基于關(guān)系代數(shù)的基礎(chǔ),目的是通過(guò)提供一個(gè)類似于英語(yǔ)的查詢語(yǔ)言來(lái)更簡(jiǎn)單地實(shí)現(xiàn)以下目標(biāo):
        • 聲明性的語(yǔ)言和流程(而不是程序性的)
        • 使語(yǔ)言可組合以幫助輕松編寫復(fù)雜的查詢
        • 和Edger F Codd開發(fā)的關(guān)系模型共同工作
        雖然大數(shù)據(jù)試圖為數(shù)據(jù)倉(cāng)庫(kù)擴(kuò)展和替換關(guān)系型系統(tǒng),但它們?cè)噲D使用相同的SQL語(yǔ)言。Hive, Impala、Drill、BigSQL使用的語(yǔ)言都深受SQL啟發(fā),優(yōu)化器和執(zhí)行類似于SQL的MPP執(zhí)行。他們還定期添加新的SQL功能。所有這些都發(fā)生在你能想到的每種類型的數(shù)據(jù)存儲(chǔ)和模型上。SQL中數(shù)據(jù)存儲(chǔ)格式、數(shù)據(jù)模型和查詢處理的分離帶來(lái)了顯著的好處。
        在SQL被引入的48年中,它經(jīng)歷了許多數(shù)據(jù)庫(kù)的誕生和消亡,也經(jīng)歷了許多數(shù)據(jù)處理方式的誕生和消亡。支持NoSQL運(yùn)動(dòng)的一些人暗示SQL和SQL數(shù)據(jù)庫(kù)不能將會(huì)消亡,即使是無(wú)意的。但SQL陣營(yíng)已經(jīng)邁步前進(jìn),Don Chamberlin最近說(shuō)道:“當(dāng)一種語(yǔ)言得到了普遍認(rèn)可,以至于其他語(yǔ)言開始將自己定義為不是那種語(yǔ)言時(shí),它必須做得非常好。”
        另一方面,數(shù)據(jù)庫(kù)只是轉(zhuǎn)向了No-SQL。雖然目前對(duì)No-SQL的定義是“Not Only SQL”,但最初的想法是不使用SQL,而代之以其他語(yǔ)言和框架,如map-reduce。然而十年后,每個(gè)流行的NoSQL數(shù)據(jù)庫(kù)都有了一個(gè)SQL變體:如Couchbase的N1QL,Cassandra的CQL,Elastic的ElasticSearch。你會(huì)說(shuō),“MongoDB沒(méi)有SQL”。我會(huì)說(shuō),“瞇眼想一想!你會(huì)看到一個(gè)非常簡(jiǎn)單的SQL實(shí)現(xiàn)。” 通過(guò)在MongoDB中使用一個(gè)簡(jiǎn)單的,有些程序化的,特別的設(shè)計(jì),一些松散組合性的查詢,優(yōu)化以及許多創(chuàng)新都可以使用SQL完成。
        雖然關(guān)系模型非常成功,但是數(shù)據(jù)庫(kù)支持各種數(shù)據(jù)模型:如JSON, Graph, XML, Timeseries, Spatial, Wide-column, Columnar, Document等等。大多數(shù)(如果不是全部)數(shù)據(jù)庫(kù)都有自己的SQL版本。如N1Q1(SQL for Jason)、SQL/XML、SQL from InfluxDB、SQL/Spatial、CQL in Cassandra等等,甚至NoSQL數(shù)據(jù)庫(kù)也實(shí)現(xiàn)了SQL和SQL啟發(fā)的查詢語(yǔ)言。即使在新的酷炫的“數(shù)據(jù)科學(xué)”世界中,SQL技能也是強(qiáng)烈推薦的。Lukas Eder在他的“must-see”談話中闡述了這一點(diǎn)。有關(guān)他的談話,請(qǐng)參見(jiàn)相關(guān)鏈接。
        現(xiàn)在,NoSQL數(shù)據(jù)庫(kù)相關(guān)的SQL項(xiàng)目要比SQL數(shù)據(jù)庫(kù)的項(xiàng)目多。

        SQL 為何會(huì)成功?
        1. 聲明性:你只需要聲明輸出,查詢引擎就會(huì)找出執(zhí)行查詢的最佳方式。優(yōu)化器,特別是1979年P(guān)at Selinger等人發(fā)明的基于成本的優(yōu)化器,幫助持續(xù)地改進(jìn)性能。這為每個(gè)新進(jìn)入者提供了一個(gè)很高的標(biāo)準(zhǔn)。最近一篇關(guān)于Apache Hive的論文就是一個(gè)復(fù)雜性和完善涉及的例子為什么SQL如此成功?
        2. SQL不僅用于“查詢”,還用于更新數(shù)據(jù)、執(zhí)行事務(wù)。存儲(chǔ)過(guò)程,UDF通過(guò)將過(guò)程語(yǔ)言與聲明性SQL相結(jié)合來(lái)擴(kuò)展訪問(wèn)范圍。
        3. SQL具有可塑性。它已經(jīng)多次標(biāo)準(zhǔn)化,每次都會(huì)添加一本功能齊全的書,一個(gè)充滿語(yǔ)法的商店,以及一個(gè)充滿關(guān)鍵詞的詞典。當(dāng)然,并非所有的SQL都是相同的。即使是RDBMS上的傳統(tǒng)SQL實(shí)現(xiàn)也不完全兼容,除非您小心地編寫SQL使其兼容。通過(guò)所有這些,SQL的原始精神得以保留。SQL的一個(gè)進(jìn)化的例子是SQL++。Don Chamberlin和Mike Carey教授討論了支持復(fù)雜數(shù)據(jù)模型的需求,使用戶和開發(fā)人員可以輕松訪問(wèn)JSON中的數(shù)據(jù)。Don寫的書《SQL++ for SQL users:A Tutorial》介紹了SQL++的最新發(fā)展,SQL++這種語(yǔ)言是為靈活的JSON數(shù)據(jù)模型上的數(shù)據(jù)處理而設(shè)計(jì)的,它保持了與SQL的兼容。
        4. 就像它所借用的英語(yǔ)一樣,SQL對(duì)新數(shù)據(jù)類型、訪問(wèn)方法和用例的新思想和擴(kuò)展持開放態(tài)度。
        5. SQL與數(shù)據(jù)表示的獨(dú)立性使其可以用于非關(guān)系數(shù)據(jù):CSV, JSON和所有大數(shù)據(jù)格式。有些人把關(guān)系模型表示的剛性和SQL的剛性混為一談。實(shí)際上,對(duì)于任何給定的Schema,SQL允許你對(duì)任何數(shù)據(jù)格式執(zhí)行select-join-group-aggregate-project操作。

        評(píng)估SQL支持
        既然SQL無(wú)處不在,那么你就需要在支持級(jí)別上進(jìn)行盡職調(diào)查。
        1. 找出每個(gè)工作負(fù)載的特征和目標(biāo)。例如,交互式應(yīng)用程序,或交互式分析,或批量分析,或BI工作負(fù)載等等。
        2. 支持的聲明反映了操作能力。
        3. 在表達(dá)式(標(biāo)量、聚合、布爾值)、聯(lián)接(內(nèi)聯(lián)、左聯(lián)/右聯(lián)/全聯(lián))、子查詢、派生表、排序和分頁(yè)(LIMIT / OFFSET)方面的語(yǔ)言能力。
        4. 索引:沒(méi)有正確索引的SQL只是一個(gè)圖靈機(jī)器原型。
        5. 優(yōu)化器:查詢重寫,選擇正確的訪問(wèn)路徑,創(chuàng)建最佳執(zhí)行路徑是使得SQL語(yǔ)言成為成功的第4代語(yǔ)言的原因。有些具有基于規(guī)則的優(yōu)化器,有些具有基于成本的優(yōu)化器,而有些則兩者都有。評(píng)估優(yōu)化器的質(zhì)量至關(guān)重要。典型的基準(zhǔn)(TPC-C、TPC-DS、YCSB、YCSB-JSON)在這里對(duì)你沒(méi)有幫助。
        6. 正如我們常說(shuō):“數(shù)據(jù)庫(kù)有三個(gè)重要方面:性能、性能和性能”。測(cè)量工作負(fù)載的性能很重要。YCSB和擴(kuò)展的YCSB-JSON將使評(píng)估更容易。
        7. SDK:豐富的SDK和語(yǔ)言支持,加快你的開發(fā)速度。
        8. BI工具支持:對(duì)于大型數(shù)據(jù)分析,通過(guò)標(biāo)準(zhǔn)數(shù)據(jù)庫(kù)連接驅(qū)動(dòng)程序來(lái)支持BI工具通常非常重要。
        N1QL的創(chuàng)建者Gerald Sangudi曾經(jīng)說(shuō)過(guò),SQL是成功的,因?yàn)樗砹藬?shù)據(jù)處理的基本操作。SQL支持一組豐富的操作:select-join-nest-unnest-group-aggregate-having-window-order-paginate-set-ops。這是我們(或機(jī)器)在指定數(shù)據(jù)操作時(shí)的想法嗎?雖然還有待觀察,但像Python和Java這樣的語(yǔ)言正在為數(shù)據(jù)的這些操作添加運(yùn)算符。也許,其他人也會(huì)效仿。SQL已經(jīng)進(jìn)入了關(guān)系型數(shù)據(jù)庫(kù)模型不曾涉足的領(lǐng)域??梢院敛豢鋸埖卣f(shuō):
        SQL已死,但SQL將永存!

        逆鋒起筆是一個(gè)專注于程序員圈子的技術(shù)平臺(tái),你可以收獲最新技術(shù)動(dòng)態(tài)最新內(nèi)測(cè)資格、BAT等大廠的經(jīng)驗(yàn)、精品學(xué)習(xí)資料、職業(yè)路線副業(yè)思維,微信搜索逆鋒起筆關(guān)注!

        MySQL 5.7 vs 8.0,哪個(gè)性能更牛?
        大廠 MySQL 規(guī)范,從入門到精通!
        MySQL 中的反斜杠 \\,真是太坑了??!
        Java 程序員常犯的 10 個(gè) SQL 錯(cuò)誤!
        52 條 SQL 語(yǔ)句性能優(yōu)化策略,建議收藏!


        記得點(diǎn)贊」「在看」
        愛(ài)你們
        瀏覽 41
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            乳色吐息观看 | 五月天婷婷六月丁香激情网 | 黄片av在线免费看 | 欧美成人一区二区三区高清 | 欧美一级婬片A片免费有限公司 | 在线免费观看小黄片 | 91av成人电影 | 在电影院嗯啊挺进去了啊 | 中国老太婆一级A片免费 | 操操干干 |