ไมโครซอฟท์เปิดตัวระบบไฟล์เสมือน GVFS (Git Virtual File System) ใช้เก็บข้อมูลในระบบ Git โดยเฉพาะ เพื่อให้ Git มีประสิทธิภาพมากขึ้นสำหรับเก็บซอร์สโค้ดขนาดใหญ่มากๆ
ไมโครซอฟท์อธิบายว่า Git ไม่ได้ถูกออกแบบมาให้เก็บไฟล์จำนวนมาก (ตัวอย่างคือซอร์สโค้ดของ Windows มีขนาด 270GB และจำนวนไฟล์ 3.5 ล้านไฟล์) เวลาทำงานกับไฟล์จำนวนมากๆ บางคำสั่งอย่าง git checkout หรือ git status ที่ต้องทำงานกับไฟล์ทั้งหมด ต้องใช้เวลานานเป็นหลายชั่วโมงกว่าจะเสร็จ
แต่ในทางปฏิบัติแล้ว การมี repo ใหญ่ขนาดนี้ไม่มีใครสั่งคอมไพล์ซอร์สโค้ดทั้งหมดอยู่แล้ว ใน repo ขนาด 3 ล้านไฟล์ อาจมีไฟล์ที่เราต้องใช้งานจริงๆ เพียงแค่ 50,000-100,000 ไฟล์เท่านั้น เราไม่ควรต้องรอนานขนาดนั้น
GVFS จึงถูกออกแบบมาให้เป็นระบบไฟล์เสมือน (virtual file system) ที่อยู่ใต้ชั้นของ repo อีกที เพื่อให้ดูเหมือนว่า repo ของเราดาวน์โหลดไฟล์มาครบทั้งหมดแล้ว (fully hydrated repo) แต่ในความเป็นจริง ไฟล์จะถูกดาวน์โหลดมาใช้งานตอนถูกเรียกใช้ครั้งแรกแทน ประสิทธิภาพในการใช้งานจึงดีขึ้น ลดระยะเวลาจากหลักหลายชั่วโมงมาเหลือหลักนาที-วินาทีเท่านั้น
ข้อดีอีกอย่างของ GVFS คือมันทำงานในระดับที่อยู่ใต้ Git อีกที ดังนั้นเครื่องมือต่างๆ ที่เรียกใช้งาน Git จึงไม่ต้องปรับแต่งแก้ไขใดๆ เพราะมองไม่เห็นชั้นของ GVFS นั่นเอง
ตอนนี้ GVFS ยังอยู่ระหว่างการพัฒนา แต่เปิดซอร์สโค้ดแล้วบน GitHub และยังจำเป็นต้องใช้กับ Git for Windows เวอร์ชันของไมโครซอฟท์ที่ดัดแปลงให้ทำงานร่วมกับ GVFS ได้
ที่มา - MSDN
Comments
โอ้ว Windows 200 กว่ากิ๊ก เพิ่งรู้เลย
อยากรู้ว่าใช้จริงๆ กี่ไฟล์
กี่คนที่มีโอกาสเข้าถึงซอร์สโค้ดพวกนั้น
เจอโค้ด 50+ ล้านบรรทัดของ Windows 270GB เข้าไปรอมแอนดรอยด์ 20GB (โค้ด 10+ ล้านบรรทัด) กลายเป็นเรื่องจิ๊บๆ ไปเลย
นึกถึงตอนคอมไพล์รอมแอนดรอยด์
- ตอนเห็นขนาดซอร์สโค้ดครั้งแรก: เฮ้ย ซอร์สโค้ดรอมแอนดรอยด์มันขนาดตั้ง 20GB เลยหรอวะเนี่ย คอมไพล์ได้รอมออกมาขนาดติ๊ดเดียะเนี่ยนะ(ถ้าเทียบกับขนาดซอร์สโค้ด)
- อารมณ์หลังจากอ่านข่าวนี้แล้ว: มันก็แค่ 20 GB เองนี่หว่า ฮ่าๆ
จริงๆ Windows มีหลาย version นะครับ แถมพัฒนามานาน dependency/module หลายๆตัวก็น่าจะ deprec'd ไปบ้างแล้ว
Gabe Aul [MSFT]:
คือ scale มันใหญ่หว่า Android แน่ๆอยู่แล้วครับ แต่ผมสงสัยเหมือนคุณ icez นะว่าใช้จริงๆเท่าไหร่
Russia is just nazi who accuse the others for being nazi.someone once said : ผมก็ด่าของผมอยู่นะ :)
โอ้ อย่างนี้นี่เอง ขอบคุณมากๆ ครับ ผมดันไปทึกทักเอาเองว่าหมายถึงตัว Windows อย่างเดียว เลยเทียบจำนวนบรรทัดโค้ดกับ Windows version ที่ผ่านๆ มา (50+ ล้าน) เลยรู้สึกว่าอัตราส่วนขนาดต่อจำนวนบรรทัดโค้ดมันต่างจากแอนดรอยด์เกินไป อย่างนี้ถ้ารวมๆ ทั้งหมดแล้วจำนวนบรรทัดโค้ด 100+ ล้าน ก็แปลว่ายังอยู่ในอัตราส่วนใกล้เคียงกันกับแอนดรอยด์ จะได้เก็บเป็นข้อมูลว่าขนาดต่อจำนวนบรรทัดโค้ดปกติมันน่าจะอยู่ที่ประมาณนี้
แต่ที่สงสัยคือ 20GB ~ 20ล้านKB ~ 10+ ล้าน lines of code ~ 2+KB per 1 line of code
หรือ 270GB ~ 270ล้านKB ~ (90-135) ล้าน lines of code ~ 2-3KB per 1 line of code
ทำไมอัตราส่วนมันถึงอยู่หลัก KB ต่อ 1 บรรทัดโค้ด
คือต่อให้คำนึงถึง cluster size มันก็ไม่น่าจะมีกรณีที่เป็นไปได้
แปลว่าต้องมีบางอย่างที่พลาดไปหรือยังไม่เคยรู้มาก่อน
git repository มันไม่ได้มีแต่ current version source code นี่ครับ ตัว git เองก็เป็น VCS โดยตรงอยู่แล้ว นอกจากนี้ตัว repository เองมันยังเก็บอย่างอื่นที่ไม่ใช่ source code+history ไว้อีกด้วย เช่นไฟล์รูปภาพต่างๆ ดังนั้นจะเอาขนาดไปเทียบกับจำนวนบรรทัดโดยตรงไม่ได้ครับ
Russia is just nazi who accuse the others for being nazi.someone once said : ผมก็ด่าของผมอยู่นะ :)
เริ่มพอเห็นภาพแล้วครับ คือมันต้องมี diff ของแต่ละ version ยิ่งมี version history เยอะก็ยิ่งมีขนาดมากขึ้น ไหนจะข้อมูลอื่นๆ ของแต่ละ version อย่าง md5 อะไรอย่างนี้อีกใช่ไหมครับ ส่วนเรื่องไฟล์รูปภาพนี่ผมไม่ได้นึกถึงเลย นึกว่ามีแต่โค้ดล้วนๆ ขอบคุณมากๆ ครับที่ให้ความรู้