Tags:
Node Thumbnail

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

No Description

Get latest news from Blognone

Comments

By: whitebigbird
Contributor
on 7 February 2023 - 23:18 #1276720
whitebigbird's picture

ข่าวนี้คุณ lew เขียนดีมากนะ ใช้คำที่เข้าใจง่ายต่อคนทั่วไปดี ผมเองพยายามฝึกคุยเป็นภาษามนุษย์แบบนี้ แต่ยังไม่สำเร็จซะที ไปคุยกับไฟแนนซ์ แค่ไฟแนนซ์ถามว่า database คืออะไรก็ใบ้รับทานแล้ว

By: btoy
ContributorAndroidWindows
on 8 February 2023 - 08:29 #1276730
btoy's picture

ขอบคุณสำหรับข่าวและความรู้ดีๆครับ

ปล. ปี 2023 rust นี่กลายมาเป็นภาษาหลักแบบเต็มตัวแล้วมั้ยนะ


..: เรื่อยไป

By: lew
FounderJusci's WriterMEconomicsAndroid
on 8 February 2023 - 09:39 #1276737 Reply to:1276730
lew's picture

ถ้าเป็น native app + เป็นโครงการใหม่เพียวๆ ไม่ใช่การแก้ของเก่าน่าจะใช่ครับ ตอนนี้น่าจะเป็น default ไปแล้ว


lewcpe.com, @wasonliw

By: EThaiZone
ContributorAndroidUbuntuWindows
on 8 February 2023 - 14:19 #1276795
EThaiZone's picture

ขอบคุณพระเจ้า ทุกวันนี้จะหา source code คือต้อง clone ทั้งหมดเลย มีบางเคสมันหาไม่เจอจริงๆ


มันไม่ง่ายเลยที่จะทำ GIF ให้มีขนาดน้อยกว่า 20kB