ใช้ native bulk-load path ของ database (Postgres COPY, MySQL ), แยกไฟล์เป็น chunk ที่โหลด เข้า ที่ปิด index และ constraint จากนั้น rebuild index หนึ่งครั้งแล้ว merge — และทำให้ทั้งงาน เพื่อให้ crash สามารถ resume ต่อได้โดยไม่สร้าง row ซ้ำ
ใช้ native bulk-load path ของ database (Postgres COPY, MySQL ), แยกไฟล์เป็น chunk ที่โหลด เข้า ที่ปิด index และ constraint จากนั้น rebuild index หนึ่งครั้งแล้ว merge — และทำให้ทั้งงาน เพื่อให้ crash สามารถ resume ต่อได้โดยไม่สร้าง row ซ้ำ
LOAD DATA100M-row CSV
│ split by byte offset
▼
[chunk 1] [chunk 2] ... [chunk N] N parallel workers
│ │ │
└──── COPY / LOAD DATA (no indexes) ────▶ staging_table (UNLOGGED)
│
rebuild indexes + validate
│
INSERT ... SELECT (upsert) into target
INSERT แบบ naive ต่อ row จ่าย round-trip, การ parse, การเขียน WAL/redo และการ update index 100 ล้านครั้ง แม้แค่ 1ms ต่อครั้งก็เกินหนึ่งวัน bulk path ชนะด้วยการเฉลี่ยต้นทุนทั้งหมดนี้: COPY stream row ในข้อความ protocol เดียว, batch WAL และข้าม per-statement planning บนฮาร์ดแวร์จริง COPY เดียวทำได้ 100k–500k row/วินาที เทียบกับไม่กี่พันสำหรับ INSERT
UNLOGGED ใน Postgres ข้าม WAL ทั้งหมด) ไม่ใช่ลงตาราง live ตรง ๆ สิ่งนี้แยกการโหลดออกจากผู้อ่านและให้คุณ validate ก่อน publishCREATE INDEX หนึ่งครั้ง — การ build index แบบ bulk (เรียงแล้ว) ถูกกว่าการ update ทีละน้อย 100M ครั้งมากCOPY stream throughput scale ตาม I/O และ CPU จนกว่าคุณจะทำให้ disk หรือ WAL อิ่มตัว จับคู่ N กับ core/IOPS ไม่ใช่ "มากที่สุดเท่าที่ทำได้"INSERT ... ON CONFLICT DO NOTHING/UPDATE (upsert) เพื่อให้ re-run ไม่ insert ซ้ำผู้สัมภาษณ์ตรวจว่าคุณรู้ว่า bulk path มีอยู่ และ ทำไม มันเร็วกว่าหลายเท่าตัว — ไม่ใช่ syntax ของ COPY ดี: "ใช้ COPY" เยี่ยม: "COPY เข้า UNLOGGED staging table, drop index, chunk ขนาน, rebuild ทีหลัง, upsert เพื่อ publish, resume ได้ด้วย chunk id" กับดักคลาสสิกคือวน INSERT (หรือ ORM saveAll) แล้วแปลกใจที่ใช้เวลาหลายชั่วโมง กับดักที่สองคือโหลดลงตาราง live ตรง ๆ และบล็อก production
maintenance_work_mem/temp space การ build index 100M row สามารถล้นลง diskคลังคำถามสัมภาษณ์งาน IT พร้อมคำตอบโดยละเอียด — ตั้งแต่ระดับ Junior ถึง Senior
บริจาค