Beyond NoSQL: กรณีสำหรับ SQL แบบกระจาย

ในช่วงแรกมีไฟล์ ต่อมามีฐานข้อมูลการนำทางตามไฟล์ที่มีโครงสร้าง จากนั้นก็มี IMS และ CODASYL และประมาณ 40 ปีที่แล้วเรามีฐานข้อมูลเชิงสัมพันธ์แรก ๆ ตลอดช่วงทศวรรษที่ 1980 และ 1990“ ฐานข้อมูล” หมายถึง“ ฐานข้อมูลเชิงสัมพันธ์” อย่างเคร่งครัด SQL ปกครอง 

จากนั้นด้วยความนิยมที่เพิ่มขึ้นของภาษาการเขียนโปรแกรมเชิงวัตถุบางคนคิดว่าวิธีแก้ปัญหา "ความต้านทานไม่ตรงกัน" ของภาษาเชิงวัตถุและฐานข้อมูลเชิงสัมพันธ์คือการแมปวัตถุในฐานข้อมูล ดังนั้นเราจึงลงเอยด้วย "ฐานข้อมูลเชิงวัตถุ" สิ่งที่น่าตลกเกี่ยวกับฐานข้อมูลออบเจ็กต์ก็คือในหลาย ๆ กรณีพวกเขาเป็นฐานข้อมูลปกติที่มีตัวทำแผนที่วัตถุในตัว สิ่งเหล่านี้ลดลงไปในความนิยมและความพยายามในตลาดมวลชนที่แท้จริงต่อไปคือ“ NoSQL” ในปี 2010

การโจมตี SQL

NoSQL โจมตีทั้งฐานข้อมูลเชิงสัมพันธ์และ SQL ในหลอดเลือดดำเดียวกัน ปัญหาหลักในครั้งนี้คืออินเทอร์เน็ตได้ทำลายโครงสร้างพื้นฐานของสถาปัตยกรรมระบบจัดการฐานข้อมูลเชิงสัมพันธ์ (RDBMS) อายุ 40 ปี ฐานข้อมูลเหล่านี้ได้รับการออกแบบมาเพื่อประหยัดเนื้อที่ดิสก์อันมีค่าและปรับขนาดในแนวตั้ง ตอนนี้มีผู้ใช้จำนวนมากเกินไปและมากเกินกว่าที่เซิร์ฟเวอร์ตัวเดียวจะจัดการได้ ฐานข้อมูล NoSQL กล่าวว่าหากคุณมีฐานข้อมูลที่ไม่มีการรวมไม่มีภาษาแบบสอบถามมาตรฐาน (เนื่องจากการใช้ SQL ต้องใช้เวลา) และไม่มีความสมบูรณ์ของข้อมูลคุณสามารถปรับขนาดในแนวนอนและจัดการกับโวลุ่มนั้นได้ สิ่งนี้ช่วยแก้ปัญหาของมาตราส่วนแนวตั้ง แต่นำเสนอปัญหาใหม่

พัฒนาควบคู่ไปกับระบบประมวลผลธุรกรรมออนไลน์ (OLTP) เป็นฐานข้อมูลเชิงสัมพันธ์ส่วนใหญ่อีกประเภทหนึ่งที่เรียกว่าระบบประมวลผลการวิเคราะห์ออนไลน์ (OLAP) ฐานข้อมูลเหล่านี้รองรับโครงสร้างเชิงสัมพันธ์ แต่ดำเนินการสืบค้นด้วยความเข้าใจว่าจะส่งคืนข้อมูลจำนวนมหาศาล ธุรกิจในช่วงปี 1980 และ 1990 ส่วนใหญ่ยังคงขับเคลื่อนด้วยการประมวลผลแบบกลุ่ม นอกจากนี้ระบบ OLAP ยังพัฒนาความสามารถสำหรับนักพัฒนาและนักวิเคราะห์ในการจินตนาการและจัดเก็บข้อมูลเป็นลูกบาศก์ n มิติ หากคุณลองนึกภาพอาร์เรย์สองมิติและการค้นหาตามดัชนีสองดัชนีเพื่อที่ว่าคุณจะมีประสิทธิภาพเท่ากับเวลาคงที่โดยทั่วไป แต่ให้ใช้เวลานั้นและเพิ่มมิติอื่นหรืออย่างอื่นเพื่อที่คุณจะสามารถค้นหาปัจจัยสามอย่างขึ้นไปโดยพื้นฐานได้ (พูด อุปทานอุปสงค์และจำนวนคู่แข่ง) - คุณสามารถวิเคราะห์และคาดการณ์สิ่งต่างๆได้อย่างมีประสิทธิภาพมากขึ้น อย่างไรก็ตามการสร้างสิ่งเหล่านี้เป็นเรื่องยากและเป็นความพยายามที่มุ่งเน้นเป็นกลุ่ม

ในช่วงเวลาเดียวกันกับที่ NoSQL ปรับขนาดฐานข้อมูลกราฟก็ปรากฏขึ้น หลายสิ่งไม่ได้เป็น "เชิงสัมพันธ์" หรือไม่ได้ขึ้นอยู่กับทฤษฎีเซตและพีชคณิตเชิงสัมพันธ์ แต่เป็นความสัมพันธ์ระหว่างแม่ลูกหรือเพื่อนของเพื่อนแทน ตัวอย่างคลาสสิกคือสายผลิตภัณฑ์ไปยังแบรนด์ผลิตภัณฑ์ไปจนถึงโมเดลไปยังส่วนประกอบในโมเดล หากคุณต้องการทราบว่า“ เมนบอร์ดในแล็ปท็อปของฉันคืออะไร” คุณพบว่าผู้ผลิตมีการจัดหาที่ซับซ้อนและหมายเลขยี่ห้อหรือรุ่นอาจไม่เพียงพอ หากคุณต้องการทราบว่ามาเธอร์บอร์ดชนิดใดที่ใช้ในกลุ่มผลิตภัณฑ์ใน SQL แบบคลาสสิก (ไม่ใช่ CTE หรือ Common Table Expression) คุณต้องเดินตารางและออกแบบสอบถามในหลายขั้นตอน ในขั้นต้นฐานข้อมูลกราฟส่วนใหญ่ไม่ได้แยกส่วนเลย ความจริงการวิเคราะห์กราฟหลายประเภทสามารถทำได้โดยไม่ต้องเก็บข้อมูลเป็นกราฟจริงๆ

NoSQL สัญญาและสัญญาว่าจะเสีย

ฐานข้อมูล NoSQL ปรับขนาดได้ดีกว่า Oracle Database, DB2 หรือ SQL Server มากซึ่งทั้งหมดนี้ใช้การออกแบบที่มีอายุ 40 ปี อย่างไรก็ตามฐานข้อมูล NoSQL แต่ละประเภทมีข้อ จำกัด ใหม่:

  • ที่เก็บคีย์ - ค่า: ไม่มีการค้นหาที่ง่ายไปกว่า db.get (คีย์) อย่างไรก็ตามข้อมูลส่วนใหญ่ของโลกและกรณีการใช้งานไม่สามารถจัดโครงสร้างด้วยวิธีนี้ได้ นอกจากนี้เรากำลังพูดถึงกลยุทธ์การแคช การค้นหาคีย์หลักทำได้รวดเร็วในทุกฐานข้อมูล มันเป็นเพียงสิ่งที่อยู่ในความทรงจำที่สำคัญ ในกรณีที่ดีที่สุดมาตราส่วนเหล่านี้เหมือนแผนที่แฮช อย่างไรก็ตามหากคุณต้องทำการเดินทางฐานข้อมูล 30 ครั้งเพื่อรวบรวมข้อมูลของคุณกลับมารวมกันหรือทำแบบสอบถามที่ซับซ้อนสิ่งนี้จะไม่ได้ผล ตอนนี้สิ่งเหล่านี้ถูกนำไปใช้บ่อยขึ้นเป็นแคชที่อยู่หน้าฐานข้อมูลอื่น ๆ (ตัวอย่าง: Redis)
  • ฐานข้อมูลเอกสาร: สิ่งเหล่านี้ได้รับความนิยมเนื่องจากใช้ JSON และอ็อบเจ็กต์นั้นง่ายต่อการต่ออนุกรมกับ JSON เวอร์ชันแรกของฐานข้อมูลเหล่านี้ไม่มีการรวมและการรวม "เอนทิตี" ทั้งหมดของคุณไว้ในเอกสารขนาดยักษ์เดียวมีข้อเสียในตัวเอง หากไม่มีการค้ำประกันการทำธุรกรรมคุณก็มีปัญหาด้านความสมบูรณ์ของข้อมูล ปัจจุบันฐานข้อมูลเอกสารบางส่วนรองรับรูปแบบการทำธุรกรรมที่มีประสิทธิภาพน้อยกว่า แต่ก็ไม่ใช่การรับประกันในระดับเดียวกับที่คนส่วนใหญ่คุ้นเคย นอกจากนี้แม้สำหรับข้อความค้นหาง่ายๆสิ่งเหล่านี้มักจะช้าในแง่ของเวลาแฝงแม้ว่าจะขยายขนาดได้ดีกว่าในแง่ของตลอดก็ตาม (ตัวอย่าง: MongoDB, Amazon DocumentDB)
  • ที่เก็บคอลัมน์: สิ่งเหล่านี้เร็วพอ ๆ กับที่เก็บคีย์ - ค่าสำหรับการค้นหาและสามารถจัดเก็บโครงสร้างข้อมูลที่ซับซ้อนมากขึ้นได้ อย่างไรก็ตามการทำอะไรบางอย่างที่ดูเหมือนการเข้าร่วมในสามตาราง (ในภาษา RDBMS) หรือสามคอลเลกชัน (ในภาษา MongoDB) นั้นเจ็บปวดที่สุด สิ่งเหล่านี้ยอดเยี่ยมมากสำหรับข้อมูลอนุกรมเวลา (ให้ข้อมูลทุกอย่างที่เกิดขึ้นระหว่าง 13:00 น. ถึง 14:00 น.)

และยังมีฐานข้อมูล NoSQL อื่น ๆ ที่ลึกลับกว่า อย่างไรก็ตามสิ่งที่ฐานข้อมูลเหล่านี้มีเหมือนกันคือการขาดการสนับสนุนสำหรับสำนวนฐานข้อมูลทั่วไปและมีแนวโน้มที่จะมุ่งเน้นไปที่ "วัตถุประสงค์พิเศษ" ฐานข้อมูล NoSQL ยอดนิยมบางตัว (เช่น MongoDB) เขียนฐานข้อมูลส่วนหน้าและเครื่องมือระบบนิเวศที่ยอดเยี่ยมซึ่งทำให้นักพัฒนาสามารถนำมาใช้งานได้ง่ายมาก แต่ได้กำหนดข้อ จำกัด ที่ร้ายแรงในระบบจัดเก็บข้อมูลของตนโดยไม่ต้องพูดถึงข้อ จำกัด ในด้านความยืดหยุ่นและความสามารถในการปรับขนาด

มาตรฐานฐานข้อมูลยังคงมีความสำคัญ

สิ่งหนึ่งที่ทำให้ฐานข้อมูลเชิงสัมพันธ์มีความโดดเด่นคือมีระบบนิเวศของเครื่องมือร่วมกัน อย่างแรกมี SQL แม้ว่าภาษาถิ่นอาจแตกต่างกัน - ในฐานะนักพัฒนาหรือนักวิเคราะห์หากคุณเปลี่ยนจาก SQL Server 6.5 ไปเป็น Oracle 7 คุณอาจต้องแก้ไขคำถามและใช้“ (+)” สำหรับการรวมภายนอก - แต่สิ่งที่เรียบง่ายใช้งานได้และสิ่งที่ยากก็ทำได้ง่ายพอสมควร แปล.

ประการที่สองคุณมี ODBC และต่อมา JDBC และอื่น ๆ เครื่องมือเกือบทุกชนิดที่สามารถเชื่อมต่อกับ RDBMS หนึ่งตัว (เว้นแต่จะทำขึ้นเพื่อจัดการ RDBMS นั้นโดยเฉพาะ) สามารถเชื่อมต่อกับ RDBMS อื่น ๆ มีผู้คนมากมายที่เชื่อมต่อกับ RDBMS ทุกวันและดูดข้อมูลลงใน Excel เพื่อวิเคราะห์ ฉันไม่ได้หมายถึง Tableau หรือเครื่องมืออื่น ๆ อีกนับร้อย ฉันกำลังพูดถึง "ความเป็นแม่" ของ Excel

NoSQL ทำได้ตามมาตรฐาน MongoDB ไม่ได้ใช้ SQL เป็นภาษาหลัก เมื่อ Couchbase คู่แข่งที่ใกล้เคียงที่สุดของ MongoDB กำลังมองหาภาษาคิวรีเพื่อแทนที่เฟรมเวิร์ก mapreduce ที่ใช้ Java พวกเขาได้สร้างภาษา SQL ของตนเองขึ้นมา

มาตรฐานมีความสำคัญไม่ว่าจะเป็นการสนับสนุนระบบนิเวศของเครื่องมือหรือเนื่องจากผู้คนจำนวนมากที่ค้นหาฐานข้อมูลไม่ใช่นักพัฒนา - และพวกเขารู้จัก SQL

GraphQL และการเพิ่มขึ้นของการจัดการสถานะ

คุณรู้ไหมว่าใครมีสองนิ้วโป้งและต้องการให้สถานะของแอปเข้าสู่ฐานข้อมูลและไม่สนใจว่าจะทำอย่างไร? ผู้ชายคนนี้. และกลายเป็นนักพัฒนารุ่นใหม่ทั้งหมด GraphQL - ซึ่งไม่มีส่วนเกี่ยวข้องกับฐานข้อมูลกราฟ - เก็บกราฟวัตถุของคุณไว้ในที่เก็บข้อมูลพื้นฐาน ช่วยให้นักพัฒนาไม่ต้องกังวลกับปัญหานี้

ความพยายามก่อนหน้านี้คือเครื่องมือการทำแผนที่เชิงสัมพันธ์กับวัตถุหรือ ORM เช่น Hibernate พวกเขารับวัตถุและเปลี่ยนเป็น SQL โดยพื้นฐานจากการตั้งค่าการแมปวัตถุกับตาราง สองสามรุ่นแรกนี้ยากที่จะกำหนดค่า ยิ่งไปกว่านั้นเราอยู่ในช่วงการเรียนรู้

การใช้งาน GraphQL ส่วนใหญ่ทำงานร่วมกับเครื่องมือการทำแผนที่เชิงสัมพันธ์กับวัตถุเช่น Sequelize หรือ TypeORM แทนที่จะทำให้ความกังวลด้านการจัดการสถานะรั่วไหลไปทั่วโค้ดของคุณการใช้งาน GraphQL ที่มีโครงสร้างดีและ API จะเขียนและส่งคืนข้อมูลที่เกี่ยวข้องเมื่อมีการเปลี่ยนแปลงเกิดขึ้นกับกราฟวัตถุของคุณ ใครในระดับแอปพลิเคชันสนใจวิธีจัดเก็บข้อมูลจริงหรือ?

รากฐานอย่างหนึ่งของฐานข้อมูลเชิงวัตถุและฐานข้อมูล NoSQL คือผู้พัฒนาแอปพลิเคชันต้องตระหนักถึงความซับซ้อนของวิธีการจัดเก็บข้อมูลในฐานข้อมูล โดยปกติแล้วสิ่งนี้เป็นเรื่องยากสำหรับนักพัฒนาที่จะเชี่ยวชาญกับเทคโนโลยีใหม่ ๆ แต่ก็ไม่ใช่เรื่องยากอีกต่อไป เนื่องจาก GraphQL ขจัดข้อกังวลนี้โดยสิ้นเชิง

ป้อน NewSQL หรือ SQL แบบกระจาย

Google มีปัญหาเกี่ยวกับฐานข้อมูลและเขียนเอกสารและต่อมามีการใช้งานที่เรียกว่า "Spanner" ซึ่งอธิบายว่าฐานข้อมูลเชิงสัมพันธ์ที่กระจายไปทั่วโลกจะทำงานอย่างไร Spanner จุดประกายคลื่นลูกใหม่แห่งนวัตกรรมเทคโนโลยีฐานข้อมูลเชิงสัมพันธ์ จริงๆแล้วคุณสามารถมีฐานข้อมูลเชิงสัมพันธ์และปรับขนาดได้ไม่ใช่แค่กับเศษ แต่ทั่วโลกหากจำเป็น และเรากำลังพูดถึงมาตราส่วนในความหมายที่ทันสมัยไม่ใช่วิธี RAC / Streams / GoldenGate ที่น่าผิดหวังและซับซ้อน

ดังนั้นสมมติฐานของ "การจัดเก็บวัตถุ" ในระบบเชิงสัมพันธ์จึงไม่ถูกต้อง จะเกิดอะไรขึ้นถ้าปัญหาหลักเกี่ยวกับฐานข้อมูลเชิงสัมพันธ์คือส่วนหลังไม่ใช่ส่วนหน้า? นี่คือแนวคิดเบื้องหลังที่เรียกว่า“ NewSQL” หรือฐานข้อมูล“ SQL แบบกระจาย” ที่เหมาะสมมากกว่า แนวคิดคือการรวมการเรียนรู้ที่เก็บข้อมูล NoSQL และแนวคิด Spanner ของ Google กับส่วนหน้าแบบโอเพ่นซอร์ส RDBMS ที่เป็นผู้ใหญ่เช่น PostgreSQL หรือ MySQL / MariaDB

นั่นหมายความว่าอย่างไร? หมายความว่าคุณสามารถมีเค้กและทานได้ด้วย หมายความว่าคุณสามารถมีหลายโหนดและปรับขนาดตามแนวนอน - รวมทั้งในโซนความพร้อมใช้งานบนคลาวด์ หมายความว่าคุณสามารถมีศูนย์ข้อมูลหรือพื้นที่ทางภูมิศาสตร์บนคลาวด์ได้หลายแห่งด้วยฐานข้อมูลเดียว หมายความว่าคุณสามารถมีความน่าเชื่อถือที่แท้จริงซึ่งเป็นคลัสเตอร์ฐานข้อมูลที่ไม่เคยล่มสลายเท่าที่ผู้ใช้กังวล

ในขณะเดียวกันระบบนิเวศ SQL ทั้งหมดยังคงใช้งานได้! คุณสามารถทำได้โดยไม่ต้องสร้างโครงสร้างพื้นฐานไอทีใหม่ทั้งหมด แม้ว่าคุณจะไม่สามารถ "ฉีกและแทนที่" RDBMS แบบเดิมของคุณได้ แต่ บริษัท ส่วนใหญ่ไม่ได้พยายามใช้ Oracle มากขึ้น และที่ดีที่สุดคือคุณยังสามารถใช้ SQL และเครื่องมือทั้งหมดของคุณได้ทั้งในระบบคลาวด์และทั่วโลก