Do SSD ช่วยลดประโยชน์ของฐานข้อมูล


28

ฉันเพิ่งได้ยินเกี่ยวกับ Robert Martin วันนี้และดูเหมือนว่าเขาเป็นบุคคลสำคัญในโลกซอฟต์แวร์ดังนั้นฉันไม่ได้ตั้งใจให้ชื่อของฉันปรากฏราวกับว่ามันเป็นเหยื่อคลิกหรือฉันใส่คำเข้าไปในปากของเขา ฉันตีความสิ่งที่ฉันได้ยินจากเขาด้วยประสบการณ์และความเข้าใจที่ จำกัด ของฉันได้อย่างไร

ฉันกำลังดูวิดีโอวันนี้ (ในสถาปัตยกรรมซอฟต์แวร์) จากการพูดคุยของ Robert C. Martin และในช่วงครึ่งหลังของวิดีโอหัวข้อของฐานข้อมูลเป็นจุดสนใจหลัก

จากความเข้าใจในสิ่งที่เขาพูดดูเหมือนว่าเขาจะบอกว่า SSD นั้นจะลดประโยชน์ของฐานข้อมูล ( อย่างมาก )

เพื่ออธิบายวิธีที่ฉันมาถึงการตีความนี้:

เขากล่าวถึงวิธีที่มี HDDs / ดิสก์หมุนการดึงข้อมูลช้า อย่างไรก็ตามทุกวันนี้เราใช้ SSD เขาตั้งข้อสังเกต เขาเริ่มต้นด้วย "RAM กำลังมา" จากนั้นดำเนินการต่อโดยการกล่าวถึงดิสก์ RAM แต่แล้วก็บอกว่าเขาไม่สามารถเรียกมันว่าดิสก์ RAM ได้ดังนั้นจึงต้องบอกว่า RAM ดังนั้นสำหรับ RAM เราไม่ต้องการดัชนีเพราะทุกไบต์ต้องใช้เวลาเท่ากันในการรับ ( ย่อหน้านี้ถอดความจากฉัน )

ดังนั้นเขาแนะนำ RAM (เหมือนในหน่วยความจำคอมพิวเตอร์) แทน DBs (นั่นคือสิ่งที่ฉันตีความคำแถลงของเขาในฐานะ) ไม่สมเหตุสมผลเพราะมันเหมือนกับการบอกว่าระเบียนทั้งหมดเป็นหน่วยความจำในการประมวลผลตลอดอายุการใช้งานของแอปพลิเคชัน ยกเว้นว่าคุณดึงจากดิสก์ไฟล์ตามต้องการ)

ดังนั้นฉันจึงใช้วิธีคิดโดยแรมเขาหมายถึง SSD ดังนั้นในกรณีนี้เขาบอกว่า SSD ช่วยลดประโยชน์ของฐานข้อมูล เขายังกล่าวอีกว่า "ถ้าฉันเป็นออราเคิลฉันก็จะกลัวพื้นฐานที่ว่าทำไมฉันถึงมีชีวิตอยู่นั้นระเหยไปหมด"

จากความเข้าใจเล็ก ๆ น้อย ๆ ของฉันเกี่ยวกับ SSD ซึ่งแตกต่างจาก HDD ที่O(n)หาเวลา (ฉันคิดว่า) SSD อยู่ใกล้O(1)หรือเกือบจะสุ่ม ดังนั้นคำแนะนำของเขาก็น่าสนใจสำหรับฉันเพราะฉันไม่เคยคิดมาก่อนเลย ครั้งแรกที่ฉันได้รับการแนะนำให้รู้จักกับฐานข้อมูลเมื่อไม่กี่ปีที่ผ่านมาเมื่ออาจารย์อธิบายถึงประโยชน์ของระบบไฟล์ปกติฉันสรุปว่าบทบาทหลักของฐานข้อมูลคือการเป็นระบบไฟล์ที่มีการจัดทำดัชนีเป็นอย่างมาก ฯลฯ ) ดังนั้นหากดัชนีไม่จำเป็นสำหรับ SSD สิ่งนี้จะทำให้ฐานข้อมูลมีประโยชน์น้อยลง

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

หมายเหตุ : ฉันดูจนจบเพื่อให้แน่ใจว่าเขาไม่ได้พูดอะไรที่แตกต่างออกไป

สำหรับการอ้างอิง: 42:22คือเมื่อหัวข้อฐานข้อมูลทั้งหมดเกิดขึ้น 43:52คือเมื่อเขาเริ่มด้วย "ทำไมเราถึงมีฐานข้อมูล"

นี้คำตอบที่ไม่พูดดีบีเอส SSDs ความเร็วขึ้นอย่างมาก คำถามนี้ถามเกี่ยวกับการเปลี่ยนแปลงการปรับให้เหมาะสม

ถึงTL; DRคำถามของฉันการถือกำเนิดของ SSD ที่แพร่หลายใช้ในตลาดเซิร์ฟเวอร์ (ไม่ว่าจะเกิดขึ้นหรือเกิดขึ้นแล้ว) ลดประสิทธิภาพของฐานข้อมูลหรือไม่?

ดูเหมือนสิ่งที่ผู้นำเสนอพยายามถ่ายทอดคือด้วย SSD ผู้ใช้หนึ่งสามารถจัดเก็บข้อมูลบนดิสก์และไม่ต้องกังวลกับความล่าช้าในการดึงข้อมูลเช่นเดียวกับ HDD ที่เก่ากว่าเช่นเดียวกับ SSD ค้นหาเวลาใกล้เข้ามาO(1)(ฉันคิด). ดังนั้นในกรณีที่เป็นจริงที่จะสูญเสียข้อได้เปรียบอย่างหนึ่งอย่างใดอย่างหนึ่ง: การสร้างดัชนีเนื่องจากความได้เปรียบของการมีดัชนีสำหรับเวลาในการค้นหาที่เร็วขึ้นจึงหายไป

คำตอบ:


59

มีบางสิ่งในฐานข้อมูลที่ควรปรับแต่งเมื่อคุณใช้ SSD ยกตัวอย่างเช่นการพูดสำหรับ PostgreSQL คุณสามารถปรับและeffective_io_concurrency random_page_costอย่างไรก็ตามการอ่านที่เร็วขึ้นและการเข้าถึงแบบสุ่มที่เร็วกว่านั้นไม่ใช่สิ่งที่ฐานข้อมูลทำ มันทำให้มั่นใจ

เขาผิดเกี่ยวกับดัชนี หากทั้งตารางสามารถอ่านลงในหน่วยความจำดัชนียังคงมีประโยชน์ ไม่เชื่อฉัน มาทำการทดลองทางความคิดกันเถอะ

  • ลองนึกภาพคุณมีตารางที่มีคอลัมน์หนึ่งคอลัมน์

    CREATE TABLE foobar ( id text PRIMARY KEY );
  • ลองนึกภาพว่ามี 500 ล้านแถวในตารางนั้น

  • ลองนึกภาพแถวทั้งหมด 500 ล้านแถวถูกต่อกันเป็นไฟล์

มีอะไรเร็วกว่า

  1. grep 'keyword' file
  2. SELECT * FROM foobar WHERE id = 'keyword'

มันไม่ได้เกี่ยวกับว่าข้อมูลอยู่ที่ใดมันเกี่ยวกับวิธีการสั่งซื้อและการดำเนินการที่คุณสามารถทำได้ PostgreSQL รองรับดัชนี B-tree, Hash, GiST, SP-GiST, GIN และ BRIN (และ Bloom ผ่านส่วนขยาย) คุณคงโง่ที่จะคิดว่าคณิตศาสตร์และฟังก์ชั่นทั้งหมดนั้นหายไปเพราะคุณเข้าถึงแบบสุ่มได้เร็วขึ้น


31
เพียงแค่ภาคผนวก - OP ควรระวังอย่าทำให้ "การเข้าถึงแบบสุ่ม" กับ "การเข้าถึงที่อยู่เนื้อหา" ดังที่ OP กล่าวไว้ "การเข้าถึงแบบสุ่ม" หมายความว่าการเข้าถึงหน่วยความจำแต่ละไบต์คือ O (1) อย่างไรก็ตามการค้นหาข้อมูลใน "หน่วยความจำเข้าถึงโดยสุ่ม" ยังคงต้องค้นหาตามลำดับ นั่นคือคุณไม่สามารถถามหน่วยความจำ "ค้นหาข้อมูลที่มีลักษณะเช่นนี้ " และส่งให้คุณอย่างน่าอัศจรรย์
Bob Jarvis - Reinstate Monica

2
@BobJarvis คุณถูกต้อง ความคิดเห็นของคุณช่วยให้ชัดเจนมากขึ้น @ ตัวอย่างของ EvanCarroll ว่า "มีอะไรเร็ว" ในการทำดัชนีและแม้แต่การทำดัชนีเนื้อหาย่อยและเพียงแค่การจับO(1)ไม่เพียงพอสำหรับกรณีการใช้งานที่ DB ให้
Abdul

12

จากการโพสต์ของคุณดูเหมือนว่าข้อความที่ชัดเจนคือการเพิ่มประสิทธิภาพเวลาค้นหา RDBMS จะถูกแทนที่ด้วยฮาร์ดแวร์ซึ่งทำให้เวลา IO เล็กน้อย

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

ค่าหลักสำหรับระบบ RDBMS โดยทั่วไปคือความสอดคล้องของข้อมูลความพร้อมใช้งานของข้อมูลและการรวมข้อมูล การใช้สเปรดชีต excel, ไฟล์ csv หรือวิธีอื่นในการรักษา "data base" จะไม่มีการรับประกันใด ๆ

SSD ไม่ได้ปกป้องคุณจากเซิร์ฟเวอร์หลักไม่สามารถใช้งานได้ไม่ว่าด้วยเหตุผลใดก็ตาม (เครือข่าย, ความเสียหายของระบบปฏิบัติการ, การสูญเสียพลังงาน) SSD ไม่ได้ปกป้องคุณจากการดัดแปลงข้อมูลที่ไม่ดี SSD ไม่ได้ทำให้การเรียกใช้การวิเคราะห์เร็วขึ้นเมื่อเทียบกับ "แค่มี"


ถึงแม้ว่าผมจะได้รับความเข้าใจที่ดีกว่าฉันถูกถามในบริบทของการจัดเก็บข้อมูล SSD ดิบเทียบกับการจัดเก็บข้อมูลใน DB w / HDD และคำตอบของคุณอยู่ในบริบทของฐานข้อมูลใน SSD (เนื่องจากการใช้ถ้อยคำคำถามยากจนจากฉัน)
Abdul

4
@Abdul การเปรียบเทียบนั้นเป็นสะพานเชื่อมต่อระหว่างแอปเปิ้ลและระงับ อุปกรณ์ดิบช่วยให้คุณมีพื้นที่เก็บข้อมูลขนาดใหญ่ ฐานข้อมูลทำให้คุณสามารถจัดระเบียบและเข้าถึงที่เก็บข้อมูลตามรูปแบบข้อมูลได้ จุดของ Josh ที่นี่คือถ้าคุณเข้าไปในนี้ด้วยความคิดที่เต็มไปด้วยดวงดาวที่ SSD แบบดิบนั้นเป็นสิ่งที่ยอดเยี่ยมเพราะมัน "เร็ว" และคุณเพิ่งจะเขียนโค้ดเพื่อเก็บข้อมูลทั้งหมดของคุณบนไดรฟ์ข้อมูลดิบนั้น คุณจะต้องเขียนฐานข้อมูลในที่สุด
Blrfl

8

ลุงบ๊อบก็อาจจะพูดคุยเกี่ยวกับฐานข้อมูลในหน่วยความจำเช่นRedisหรือGemFire ในฐานข้อมูลเหล่านี้ทุกสิ่งในฐานข้อมูลนั้นมีอยู่ใน RAM จริงๆ ฐานข้อมูลอาจเริ่มว่างเปล่าและยื่นด้วยข้อมูลระยะสั้น (ใช้เป็นแคช) หรือเริ่มต้นด้วยการโหลดทุกอย่างจากดิสก์และจุดตรวจเปลี่ยนเป็นระยะเป็นดิสก์

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

ทำไมสิ่งนี้จึงน่าเป็นห่วงเรื่อง Oracle? ข้อมูลกำลังเติบโตและไม่น่าเป็นไปได้ที่ RDBMSes จะหายไป อย่างไรก็ตามเวลาทางวิศวกรรมของออราเคิลในช่วงหลายปีที่ผ่านมามีวิธีการในการดึงข้อมูลจากดิสก์หมุนเร็วมาก Oracle จะต้องปรับให้เข้ากับระดับการจัดเก็บที่แตกต่างอย่างสิ้นเชิง พวกเขาพร้อมกับOracle Database In Memoryแต่พวกเขามีการแข่งขันที่แตกต่างกว่าในอดีต ลองคิดดูว่าเวลามากน้อยเพียงใดในการตรวจสอบให้แน่ใจว่าเครื่องมือเพิ่มประสิทธิภาพการสืบค้นเลือกกลยุทธ์ที่เหมาะสมตามรูปแบบของสิ่งต่าง ๆ บนดิสก์ ....


อา ฉันไม่เคยรู้ว่ามีสิ่งต่าง ๆ เช่นฐานข้อมูลในหน่วยความจำ
Abdul

1
เป็นอีกตัวอย่างหนึ่งของ SQLite ที่สามารถรันในหน่วยความจำได้ดังนั้นไม่จำเป็นต้องใช้ฐานข้อมูลอื่น
user151019

8

โพสต์ Wiki ชุมชนที่รวบรวมคำตอบแรกเริ่มทิ้งไว้เป็นความคิดเห็นของคำถาม


ฉันจะบอกว่าตรงกันข้าม เนื่องจากความเร็วในการอ่าน / เขียนนั้นเร็วมากตอนนี้คุณสามารถรับฐานข้อมูล GPU ที่เร่งความเร็ว (เช่นBlazingDBหรือAlenka ) เพื่อทำให้ตัวเลขกระทืบเร็วยิ่งขึ้น ตอนนี้คุณสามารถมีคิวรีที่ซับซ้อนยิ่งขึ้นได้เร็วขึ้น ตอนนี้เคียวรีที่ผู้คนไม่คิดแม้แต่จะรันสามารถรันด้วยความเร็วที่สมเหตุสมผล ยิ่งซับซ้อนและมีข้อมูลมากเท่าไหร่คุณก็ยิ่งดี - ไซเบอร์นาร์ด

ในขณะที่บ็อบมาร์ตินอยู่มาเป็นเวลานานและความคิดเห็นของเขาก็น่าฟัง (ถ้าไม่เห็นด้วยกับ :-) ในกรณีนี้ฉันคิดว่าเขาดำดิ่งลงไปในฝูงชน ฉันเป็นสมาชิกสมทบ :-) สำหรับบางสิ่งภายใต้สถานการณ์ที่ จำกัดข้อโต้แย้งที่น่าเชื่อถือสามารถเกิดขึ้นได้ที่เทคโนโลยีฐานข้อมูลที่ไม่เกี่ยวข้องสามารถให้ความได้เปรียบ ที่ได้รับการกล่าวว่า แต่ IMO แบบจำลองเชิงสัมพันธ์มีข้อบกพร่องในรูปแบบต่าง ๆ และมันอาจจะยังคงให้รูปแบบฐานข้อมูลวัตถุประสงค์ทั่วไปที่ดีที่สุดในปัจจุบัน YMMV - บ็อบจาร์วิส

เหตุผลหลักที่เราใช้ฐานข้อมูลไม่ได้เพราะดิสก์จะช้า (ที่จริงเดิมที่ถูกอ้างว่าเป็นเหตุผลไม่ได้ไปยังฐานข้อมูลการใช้งาน) แต่เนื่องจากข้อมูลที่มีความซับซ้อน วัตถุประสงค์หลักของฐานข้อมูลคือเพื่อให้แอพ / ผู้ใช้หลายคนสามารถค้นหาข้อมูลที่ถูกต้องและสามารถเปลี่ยนแปลงได้พร้อมกันในลักษณะที่ควบคุม การทำเช่นนั้นเป็นเพียงเป้าหมายรองของฐานข้อมูล - RBarryYoung

RDBMS จะไม่หายไปทุกเวลาเร็ว ๆ นี้; เป็นตัวเลือกที่ดีที่สุดสำหรับแอปพลิเคชั่นบางประเภทและ NoSQL (Mongo เป็นต้น) เป็นตัวเลือกที่ดีที่สุดสำหรับผู้อื่น ม้าสำหรับหลักสูตร - sh1rts

ฐานข้อมูลช่วยจัดระเบียบข้อมูล มันไม่ได้ถูกออกแบบมาเพื่อการเข้าถึงข้อมูลอย่างรวดเร็วตั้งแต่แรก - JI Xiang

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.