GitHub เล่าถึงประสบการณ์การพัฒนาระบบค้นหาโค้ดแบบใหม่ชื่อว่า Blackbird ที่ทำให้นักพัฒนาสามารถค้นหาโค้ดด้วยคำสั่งที่ซับซ้อนแบบ regular expression กับโค้ดทั้งหมดในฐานข้อมูลของ GitHub ที่มีขนาดถึง 115TB ได้
GitHub เคยใช้ Elasticsearch สำหรับการค้นหามาก่อน และการทำดัชนี (indexing) ข้อมูลโค้ด 8 ล้านโครงการใช้เวลานานหลายเดือน ทุกวันนี้โค้ดรวมบน GitHub มีทั้งหมด 200 ล้านโครงการ ขนาดโค้ดรวม 115TB หากรัน ripgrep บนโค้ดทั้งหมดจะใช้ซีพียู 2,048 คอร์เป็นเวลา 96 วินาที ทำให้ต้องเขียนเอนจินค้นหาขึ้นมาใหม่เองโดยใช้ภาษา Rust
Blackbird เก็บข้อมูลแบบ inverted index (หาว่ามีข้อความที่กำหนดในเอกสารใดบ้าง) โดยเก็บเป็นส่วนย่อยของคำ (ngram) ขนาด 3 ตัวอักษร และการเพิ่มเอกสารจะเก็บดัชนีแยกเป็นส่วนๆ (sharding) โดยแจ้งความเปลี่ยนแปลงข้อมูลด้วย Kafka เมื่อผู้ใช้ส่งคำสั่งค้น Blackbird จะแปลงคำสั่งเป็นภาษาค้นหาเฉพาะกำหนดเงื่อนไข เช่น จะค้นหาใน repository ที่ไม่ได้เปิด public ส่วนใดบ้างและแปลงคำค้นจาก regular expression ไปเป็นคำสั่งเฉพาะที่หาจาก ngram
ตอนนี้ 99% แรกของคำค้นรันในแต่ละ shard โดยใช้เวลาระดับ 100ms โดยรวมเซิร์ฟเวอร์ 64 คอร์แต่ละเครื่องรองรับการคิวรีได้ 640 คิวรีต่อวินาที
ตอนนี้ระบบค้นหาแบบใหม่ของ GitHub ยังอยู่ในสถานะเบต้า และต้องสมัครก่อนใช้งาน
ที่มา - GitHub
Comments
ข่าวนี้คุณ lew เขียนดีมากนะ ใช้คำที่เข้าใจง่ายต่อคนทั่วไปดี ผมเองพยายามฝึกคุยเป็นภาษามนุษย์แบบนี้ แต่ยังไม่สำเร็จซะที ไปคุยกับไฟแนนซ์ แค่ไฟแนนซ์ถามว่า database คืออะไรก็ใบ้รับทานแล้ว
ขอบคุณสำหรับข่าวและความรู้ดีๆครับ
ปล. ปี 2023 rust นี่กลายมาเป็นภาษาหลักแบบเต็มตัวแล้วมั้ยนะ
..: เรื่อยไป
ถ้าเป็น native app + เป็นโครงการใหม่เพียวๆ ไม่ใช่การแก้ของเก่าน่าจะใช่ครับ ตอนนี้น่าจะเป็น default ไปแล้ว
lewcpe.com, @wasonliw
ขอบคุณพระเจ้า ทุกวันนี้จะหา source code คือต้อง clone ทั้งหมดเลย มีบางเคสมันหาไม่เจอจริงๆ
มันไม่ง่ายเลยที่จะทำ GIF ให้มีขนาดน้อยกว่า 20kB