บล็อกขนาดใดสำหรับไฟล์ขนาดเล็กนับล้าน


10

ฉันมีดิสก์ 4 x 4TB ในฮาร์ดแวร์ RAID1 (อาจเป็น LSI MegaRaid) ใน Debian Wheezy ขนาดบล็อกทางกายภาพคือ 4kB ฉันจะเก็บไฟล์ขนาดเล็ก 150-200 ล้านไฟล์ (ระหว่าง 3 ถึง 10kB) ฉันไม่ได้ขอประสิทธิภาพ แต่เพื่อระบบไฟล์และขนาดบล็อกที่ดีที่สุดเพื่อประหยัดพื้นที่จัดเก็บ ฉันได้คัดลอกไฟล์ขนาด 8200 ไบต์ไปยัง ext4 ด้วยขนาดบล็อก 4kB นี่ใช้ดิสก์ขนาด 32kB! กำลังบันทึกเหตุผลสำหรับสิ่งนั้นหรือไม่ ดังนั้นมีตัวเลือกอะไรบ้างในการบันทึกพื้นที่เก็บข้อมูลส่วนใหญ่สำหรับไฟล์ขนาดเล็กเช่นนี้?


คำตอบ:


1

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

อีกทางหนึ่งคุณสามารถดูขนาดไฟล์ที่ร้อยละ 60 - 70 และลองปรับขนาดไฟล์ให้ตรงกับโหนดต้นไม้ของระบบแฟ้มแทนที่จะแยกบล็อกบนดิสก์ การจัดเก็บ 10k ในแต่ละโหนดอาจเป็นการถามที่ยิ่งใหญ่ แต่ถ้าคุณได้รับไฟล์ 60% -70% ในนั้นนั่นอาจเป็นชัยชนะครั้งใหญ่

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

และไม่ต้องกังวลกับวารสาร พวกเขามีขีด จำกัด ขนาดบนอยู่แล้ว


4
ไม่ไม่ไม่ไม่ไม่ไม่ไม่ ... ไม่ถึงย่อหน้าที่ 1 ของคุณ ฉันทำผิดพลาดมาหลายปีแล้วและต้องยกเลิกในภายหลัง ฉันยังสืบทอดระบบที่ใช้รูปแบบการออกแบบนี้ ไฟล์ที่อยู่ในระบบไฟล์หรือเป็นประนีประนอมในวัตถุ SQL Server FileStream ถ้าคุณต้องรวมพวกเขา (ดังนั้นอาจเป็นไดรเวอร์ FUSE ของคุณ แต่ก็ยังไม่ได้) มีข้อควรพิจารณาอื่น ๆ เมื่อทำงานในระบบไฟล์เช่นอย่าใส่ 4 ล้านไฟล์ลงในโฟลเดอร์เดียว (ฉันทำผิดพลาดไปด้วย)
Mark Henderson

2
@ MarkHenderson แต่ปัญหาคือการกำหนดสิ่งที่ควรเป็นไฟล์และสิ่งที่ควรจะเป็นบันทึก หากไม่มีการให้รายละเอียดเพิ่มเติมสิ่งเล็ก ๆ น้อย ๆ หลายร้อยล้านเสียงก็ยิ่งเหมือนกับบันทึกของฉัน เพียงเพราะตอนนี้เขามีไฟล์เป็นมันไม่ได้หมายความว่าพวกเขาต้องการที่จะอยู่แบบนั้นหรือควรจะเป็นแบบนั้น นอกจากนี้ฉันไม่เคยแนะนำที่สองโดยใช้ SQL Server สำหรับงาน;)

2
5 ปีที่แล้วฉันได้รับมรดกระบบที่มี 1 ล้านไฟล์ในโฟลเดอร์เดียวและประมาณ 1-4KB ไฟล์ใหม่ทุกวัน ฉันตัดสินใจที่จะโยนพวกเขาทั้งหมดลงในตาราง ISAM เพราะ "เฮ้พวกเขาเป็นเพียงข้อความธรรมดาสำหรับการวิเคราะห์!" และนั่นกลายเป็นความผิดพลาดครั้งใหญ่เพราะตอนนี้ฉันมีตารางขนาด 12GB เดียวซึ่งมีจำนวนถึงหนึ่งล้านแถวซึ่งส่วนใหญ่ไม่ได้ทำอะไรหลังจากที่พวกมันถูกประมวลผล ดังนั้นฉันจึงเปลี่ยนกลับไปวางไว้ในระบบไฟล์ด้วยโฟลเดอร์ heirachial ตาม GUID ของชื่อไฟล์
Mark Henderson

(เพราะเหตุใดตาราง 12GB เดียวที่มีแถวตอลลิออนเป็นปัญหาก็เป็นอีกเรื่องหนึ่งที่ฉันจะไม่เข้าไป)
Mark Henderson

2
@ MarkHenderson: มันไม่ใช่ปัญหาที่แตกต่างนั่นคือเหตุผลที่คุณพูดว่ามันเป็นทางออกที่ไม่ถูกต้อง ("... ความผิดพลาดครั้งใหญ่เพราะตอนนี้ฉันมีตาราง 12GB เดียวที่มีแถวเป็นล้านแถว .... ") คุณเลือกเครื่องมือฐานข้อมูล / รูปแบบตารางที่ไม่ถูกต้อง แต่แนวคิดของการวางสิ่งเล็ก ๆ จำนวนมากไว้ในไฟล์เดียวด้วย INDEX นั้นเป็นเสียงตราบใดที่คุณทำถูกต้อง สิ่งที่คุณต้องการคือฐานข้อมูลที่เก่งที่ร้านค้าคีย์ / ค่าสำหรับวัตถุขนาดเล็กนับล้าน ๆ ชิ้นพร้อมการจัดเรียงอัตโนมัติ นอกจากนี้โปรดทราบว่าเขาไม่ได้สนใจเรื่องการแสดงเป็นพิเศษแค่เรื่องอวกาศ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.