อะไรทำให้ฐานข้อมูลแบบคอลัมน์เหมาะสำหรับวิทยาศาสตร์ข้อมูล?


23

อะไรคือข้อดีของการเก็บข้อมูลคอลัมน์ซึ่งทำให้พวกเขาเหมาะสำหรับวิทยาศาสตร์ข้อมูลและการวิเคราะห์?

คำตอบ:


27

ฐานข้อมูลแบบ column-oriented (= columnar data-store) จัดเก็บข้อมูลของคอลัมน์ table ตามคอลัมน์บนดิสก์ในขณะที่ฐานข้อมูลแบบ row-oriented เก็บข้อมูลของแถวแบบแถวต่อแถว

มีข้อดีสองประการที่สำคัญของการใช้ฐานข้อมูลแบบคอลัมน์เมื่อเปรียบเทียบกับฐานข้อมูลแบบแถว ข้อได้เปรียบครั้งแรกเกี่ยวข้องกับปริมาณข้อมูลที่คนต้องการอ่านในกรณีที่เราดำเนินการกับคุณสมบัติเพียงไม่กี่อย่าง พิจารณาคำถามง่ายๆ:

SELECT correlation(feature2, feature5)
FROM records

ผู้ดำเนินการดั้งเดิมจะอ่านทั้งตาราง (เช่นคุณสมบัติทั้งหมด):

ป้อนคำอธิบายรูปภาพที่นี่

โดยใช้วิธีการตามคอลัมน์ของเราเราต้องอ่านคอลัมน์ที่สนใจ:

ป้อนคำอธิบายรูปภาพที่นี่

ข้อได้เปรียบที่สองซึ่งมีความสำคัญมากสำหรับฐานข้อมูลขนาดใหญ่ก็คือพื้นที่เก็บข้อมูลแบบคอลัมน์อนุญาตให้ทำการบีบอัดได้ดีกว่าเนื่องจากข้อมูลในคอลัมน์หนึ่งนั้นมีความเหมือนกันมากกว่าในทุกคอลัมน์

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

RDMS บางตัวมีตัวเลือกเครื่องมือจัดเก็บข้อมูลแบบคอลัมน์ ตัวอย่างเช่น PostgreSQL ไม่มีตัวเลือกในการจัดเก็บตารางในรูปแบบคอลัมน์ แต่กำเนิด Greenplum ได้สร้างแหล่งข้อมูลปิด (DBMS2, 2009) ที่น่าสนใจคือ Greenplum ยังอยู่หลังห้องสมุดโอเพ่นซอร์สสำหรับการวิเคราะห์ในฐานข้อมูลที่ปรับขนาดได้ MADlib (Hellerstein et al., 2012) ซึ่งไม่ใช่เรื่องบังเอิญ เมื่อเร็ว ๆ นี้ CitusDB การเริ่มต้นทำงานกับความเร็วสูงฐานข้อมูลการวิเคราะห์ได้เปิดตัวส่วนขยายเก็บคอลัมน์โอเพนซอร์สของตนเองสำหรับ PostgreSQL, CSTORE (มิลเลอร์, 2014) ระบบของ Google สำหรับการเรียนรู้เครื่องขนาดใหญ่ Sibyl ยังใช้รูปแบบข้อมูลเชิงคอลัมน์ (Chandra et al., 2010) แนวโน้มนี้สะท้อนให้เห็นถึงความสนใจที่เพิ่มขึ้นรอบ ๆ หน่วยเก็บข้อมูลเชิงคอลัมน์สำหรับการวิเคราะห์ขนาดใหญ่ Stonebraker และคณะ (2005) อภิปรายเพิ่มเติมเกี่ยวกับข้อดีของ DBMS เชิงคอลัมน์

กรณีใช้งานที่เป็นรูปธรรมสองกรณี: ชุดข้อมูลส่วนใหญ่สำหรับการเรียนรู้เครื่องขนาดใหญ่ถูกเก็บไว้อย่างไร

(คำตอบส่วนใหญ่มาจากภาคผนวก C ของ: BeatDB: แนวทางแบบครบวงจรเพื่อเปิดเผย saliencies จากชุดข้อมูลสัญญาณขนาดใหญ่ Franck Dernoncourt, SM, วิทยานิพนธ์, MIT Dept of EECS )


1
นั่นคือคำตอบที่ยอดเยี่ยม อธิบายอย่างสวยงาม ขอขอบคุณ.
Dawny33

1
นี่เป็นคำตอบที่เขียนได้ดีมากและไดอะแกรมมีประโยชน์มาก การอ้างอิงยังชื่นชม
Shawn Mehan

ตอนนี้พิจารณา k หมายถึงการจัดกลุ่มหรือ SVM กับรูปแบบคอลัมน์ ...
anony-มูส

11

มันขึ้นอยู่กับสิ่งที่คุณทำ

การจัดเก็บคอลัมน์มีประโยชน์ที่สำคัญสองประการ:

  • คอลัมน์ทั้งหมดสามารถข้ามได้
  • การบีบอัดแบบรันไทม์ใช้งานได้ดีกับคอลัมน์ (สำหรับข้อมูลบางประเภทโดยเฉพาะกับค่าที่แตกต่างกันเล็กน้อย)

อย่างไรก็ตามพวกเขาก็มีข้อเสีย:

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

การจัดเก็บคอลัมน์เป็นที่นิยมอย่างมากสำหรับ OLAP หรือที่รู้จักว่า "การวิเคราะห์โง่" (Michael Stonebraker) และแน่นอนสำหรับการดำเนินการล่วงหน้าซึ่งคุณอาจสนใจทิ้งคอลัมน์ทั้งหมด (แต่คุณต้องมีข้อมูลที่มีโครงสร้างก่อน - คุณไม่ต้องจัดเก็บ JSONs ในคอลัมน์ รูปแบบ) เนื่องจากรูปแบบคอลัมน์เป็นสิ่งที่ดีมากสำหรับการนับจำนวนแอปเปิ้ลที่คุณขายเมื่อสัปดาห์ที่แล้ว

สำหรับกรณีการใช้งานทางวิทยาศาสตร์ / วิทยาศาสตร์ส่วนใหญ่ฐานข้อมูลอาเรย์ดูเหมือนจะเป็นวิธีที่จะไป (แน่นอนว่าข้อมูลอินพุตที่ไม่มีโครงสร้าง) เช่น SciDB และ RasDaMan

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


3

ฉันไม่ได้ใช้ฐานข้อมูลแบบเรียงเป็นแนว แต่ฉันใช้รูปแบบไฟล์เรียงเป็นแบบโอเพ่นซอร์สเรียกว่า Parquet และฉันคิดว่าประโยชน์อาจจะเหมือนกัน - การประมวลผลข้อมูลที่รวดเร็วยิ่งขึ้นเมื่อคุณต้องการสืบค้นชุดย่อยขนาดเล็ก จำนวนคอลัมน์ ฉันมีแบบสอบถามทำงานบนไฟล์ Avro ประมาณ 50 เทราไบต์ (รูปแบบไฟล์ที่มุ่งเน้นแถว) ด้วยคอลัมน์ 673 คอลัมน์ที่ใช้เวลาประมาณหนึ่งชั่วโมงครึ่งในคลัสเตอร์ Hadoop 140 โหนด ด้วย Parquet การค้นหาเดียวกันใช้เวลาประมาณ 22 นาทีเพราะฉันต้องการเพียง 5 คอลัมน์

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

ลิงค์นี้จะอธิบายรายละเอียดเพิ่มเติม


0

หมายเหตุ: นี่คือคำถามของฉันและฉันขอบคุณจริงๆสำหรับคำตอบที่ยอดเยี่ยมที่นี่ซึ่งช่วยให้ฉันเข้าใจแนวคิด

ดังนั้นฉันจะอธิบายแนวคิดในแบบที่ฉันเข้าใจ:

โดยทั่วไปแล้วข้อมูลในฐานข้อมูลจะถูกเก็บไว้ในหน่วยความจำในรูปแบบต่อไปนี้:

พิจารณาข้อมูลนี้:

           X1         X2
1   0.7091409 -1.4061361
2  -1.1334614 -0.1973846
3   2.3343391 -0.4385071

ในที่เก็บแถวสัมพันธ์จะถูกเก็บไว้ในลักษณะนี้:

1, 0.7091409, -1.4061361, 2, -1.1334614, -0.1973846, 3, 2.3343391, -0.4385071 

ในรูปแบบของแถว

ในการจัดเก็บคอลัมน์มันจะถูกเก็บไว้เช่นนี้:

1, 2, 3, 0.7091409 ,-1.1334614, 2.3343391, -1.4061361, -0.1973846, -0.4385071

ในรูปแบบของคอลัมน์

ดังนั้นสิ่งนี้หมายความว่าอย่างไร

ซึ่งหมายความว่าการแทรก (และการอัปเดต) และการลบนั้นรวดเร็วในการจัดเก็บคอลัมน์ตามแถวเนื่องจากเป็นการลบค่าเพียงไม่กี่ค่าล่าสุดหรือค่าสองสามค่าแรก อย่างไรก็ตามไม่ใช่ในร้านค้าแบบเสาเนื่องจากต้องลบค่าในที่เก็บบล็อกแต่ละรายการ

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

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