เราต้องการจัดเก็บไฟล์ข้อความหลายล้านไฟล์ในระบบไฟล์ลินุกซ์โดยมีวัตถุประสงค์เพื่อให้สามารถซิปขึ้นและให้บริการคอลเลกชันโดยพลการเป็นบริการ เราได้ลองใช้วิธีแก้ไขปัญหาอื่น ๆ เช่นฐานข้อมูลคีย์ / ค่า แต่ข้อกำหนดของเราสำหรับการทำงานพร้อมกันและความเท่าเทียมทำให้การใช้ระบบไฟล์ดั้งเดิมเป็นทางเลือกที่ดีที่สุด
วิธีที่ตรงไปตรงมาที่สุดคือการจัดเก็บไฟล์ทั้งหมดในโฟลเดอร์:
$ ls text_files/
1.txt
2.txt
3.txt
ซึ่งควรจะเป็นไปได้ในระบบไฟล์ EXT4ซึ่งไม่ จำกัด จำนวนไฟล์ในโฟลเดอร์
กระบวนการ FS ทั้งสองจะเป็น:
- เขียนไฟล์ข้อความจากเว็บขูด (ไม่ควรได้รับผลกระทบจากจำนวนไฟล์ในโฟลเดอร์)
- ซิปไฟล์ที่เลือกกำหนดโดยรายการชื่อไฟล์
คำถามของฉันคือการจัดเก็บไฟล์ได้มากถึงสิบล้านไฟล์ในโฟลเดอร์จะส่งผลต่อประสิทธิภาพของการดำเนินการข้างต้นหรือประสิทธิภาพของระบบทั่วไปแตกต่างจากการสร้างแผนผังย่อยสำหรับไฟล์ที่จะใช้งาน
ls -l
หรือสิ่งอื่นใดที่stat
inode ในไดเรกทอรี (เช่นการทำให้bash
กลม / แท็บเสร็จ) จะเร็วขึ้น กว่าหลังจากการสึกหรอ (ลบไฟล์บางไฟล์เขียนไฟล์ใหม่) ext4 อาจทำได้ดีกว่าด้วย XFS เนื่องจาก XFS จัดสรรพื้นที่สำหรับ inodes เทียบกับข้อมูลแบบไดนามิกดังนั้นคุณจึงสามารถจบลงด้วย inodes ที่กระจัดกระจายมากขึ้นฉันคิดว่า (แต่นั่นเป็นการคาดเดาที่บริสุทธิ์โดยอาศัยความรู้ที่ละเอียดน้อยมากฉันแทบจะไม่เคยใช้ ext4) ไปกับabc/def/
ตำบล
ZipOutputStream
จะเอาชนะระบบไฟล์ Linux ได้ฟรีฉันสงสัยว่าคุณต้องการจ่ายสำหรับ GPFS ของ IBM การวนซ้ำเพื่อประมวลผลชุดผลลัพธ์ JDBC และทำให้กระแสซิปนั้นน่าจะเป็นเพียงโค้ด 6-8 บรรทัดของโค้ด Java
dir_index
ซึ่งโดยปกติจะเปิดใช้งานตามค่าเริ่มต้นจะช่วยเพิ่มความเร็วในการค้นหา แต่อาจ จำกัด จำนวนไฟล์ต่อไดเรกทอรี