“The Case Against pgvector” – เมื่อเวกเตอร์ใน Postgres ไม่ง่ายอย่างที่คิด
Alex Jacobs เล่าประสบการณ์ตรงจากการพยายามใช้ pgvector ในระบบโปรดักชันจริง เพื่อสร้างระบบค้นหาเอกสารด้วยเวกเตอร์ แต่กลับพบว่าแม้ pgvector จะดูดีในเดโม แต่เมื่อใช้งานจริงกลับเต็มไปด้วยปัญหาทางเทคนิคและการจัดการที่ซับซ้อน
เขาไม่ได้บอกว่า pgvector “แย่” แต่ชี้ให้เห็นว่า blog ส่วนใหญ่พูดถึงแค่การติดตั้งและ query เบื้องต้น โดยไม่พูดถึงปัญหาเรื่อง index, memory, query planner, และการจัดการข้อมูลที่เปลี่ยนแปลงตลอดเวลา
ความเข้าใจผิดจากบล็อกทั่วไป
ส่วนใหญ่ทดสอบแค่ 10,000 vectors บนเครื่อง local
ไม่พูดถึงปัญหา memory, index rebuild, หรือ query planner
ปัญหาเรื่อง Index
pgvector มี 2 แบบ: IVFFlat และ HNSW
IVFFlat สร้างเร็วแต่คุณภาพลดลงเมื่อข้อมูลเพิ่ม
HNSW แม่นยำแต่ใช้ RAM สูงมากและสร้างช้า
การจัดการข้อมูลใหม่
การ insert vector ใหม่ทำให้ index เสียสมดุล
ต้อง rebuild index เป็นระยะ ซึ่งใช้เวลาหลายชั่วโมง
การ update HNSW graph ทำให้เกิด lock contention
ปัญหา query planner
Postgres ไม่เข้าใจ vector search ดีพอ
การ filter ก่อนหรือหลัง vector search ส่งผลต่อคุณภาพและความเร็ว
การใช้ LIMIT อาจทำให้ผลลัพธ์ไม่ตรงกับความต้องการ
การจัดการ metadata
ต้อง sync vector กับข้อมูลอื่น เช่น title, user_id
การ rebuild index ทำให้ข้อมูลอาจไม่ตรงกัน
การทำ hybrid search
ต้องเขียนเองทั้งหมด เช่น การรวม full-text กับ vector
ต้อง normalize score และจัดการ ranking ด้วยตัวเอง
ทางเลือกใหม่: pgvectorscale
เพิ่ม StreamingDiskANN และ incremental index
ยังไม่รองรับบน AWS RDS
เป็นหลักฐานว่า pgvector เดิมยังไม่พร้อมสำหรับโปรดักชัน
ข้อเสนอจากผู้เขียน
ใช้ vector database โดยตรง เช่น Pinecone, Weaviate
ได้ query planner ที่ฉลาดกว่า
มี hybrid search และ real-time indexing ในตัว
ราคาถูกกว่าการ over-provision Postgres และจ้างทีม optimize
อย่าหลงเชื่อ “แค่ใช้ Postgres ก็พอ”
pgvector ไม่ได้ออกแบบมาสำหรับ high-velocity ingestion
ต้องจัดการ memory, index, และ query เองทั้งหมด
การใช้ HNSW ในโปรดักชัน
สร้าง index ใช้ RAM มากกว่า 10 GB
อาจทำให้ database ล่มระหว่างการสร้าง
การ filter หลัง vector search
อาจได้ผลลัพธ์ไม่ตรงกับความต้องการ
ต้อง oversample และ filter เองใน application
การใช้ pgvector บน RDS
ไม่สามารถใช้ pgvectorscale ได้
ต้องจัดการ Postgres เองทั้งหมด
นี่คือเสียงเตือนจากคนที่เคยเชื่อว่า “รวมทุกอย่างไว้ใน Postgres จะง่ายกว่า” แต่พบว่าในโลกของ vector search—ความง่ายนั้นอาจซ่อนต้นทุนที่สูงกว่าที่คิดไว้มาก.
https://alex-jacobs.com/posts/the-case-against-pgvector/
Alex Jacobs เล่าประสบการณ์ตรงจากการพยายามใช้ pgvector ในระบบโปรดักชันจริง เพื่อสร้างระบบค้นหาเอกสารด้วยเวกเตอร์ แต่กลับพบว่าแม้ pgvector จะดูดีในเดโม แต่เมื่อใช้งานจริงกลับเต็มไปด้วยปัญหาทางเทคนิคและการจัดการที่ซับซ้อน
เขาไม่ได้บอกว่า pgvector “แย่” แต่ชี้ให้เห็นว่า blog ส่วนใหญ่พูดถึงแค่การติดตั้งและ query เบื้องต้น โดยไม่พูดถึงปัญหาเรื่อง index, memory, query planner, และการจัดการข้อมูลที่เปลี่ยนแปลงตลอดเวลา
ความเข้าใจผิดจากบล็อกทั่วไป
ส่วนใหญ่ทดสอบแค่ 10,000 vectors บนเครื่อง local
ไม่พูดถึงปัญหา memory, index rebuild, หรือ query planner
ปัญหาเรื่อง Index
pgvector มี 2 แบบ: IVFFlat และ HNSW
IVFFlat สร้างเร็วแต่คุณภาพลดลงเมื่อข้อมูลเพิ่ม
HNSW แม่นยำแต่ใช้ RAM สูงมากและสร้างช้า
การจัดการข้อมูลใหม่
การ insert vector ใหม่ทำให้ index เสียสมดุล
ต้อง rebuild index เป็นระยะ ซึ่งใช้เวลาหลายชั่วโมง
การ update HNSW graph ทำให้เกิด lock contention
ปัญหา query planner
Postgres ไม่เข้าใจ vector search ดีพอ
การ filter ก่อนหรือหลัง vector search ส่งผลต่อคุณภาพและความเร็ว
การใช้ LIMIT อาจทำให้ผลลัพธ์ไม่ตรงกับความต้องการ
การจัดการ metadata
ต้อง sync vector กับข้อมูลอื่น เช่น title, user_id
การ rebuild index ทำให้ข้อมูลอาจไม่ตรงกัน
การทำ hybrid search
ต้องเขียนเองทั้งหมด เช่น การรวม full-text กับ vector
ต้อง normalize score และจัดการ ranking ด้วยตัวเอง
ทางเลือกใหม่: pgvectorscale
เพิ่ม StreamingDiskANN และ incremental index
ยังไม่รองรับบน AWS RDS
เป็นหลักฐานว่า pgvector เดิมยังไม่พร้อมสำหรับโปรดักชัน
ข้อเสนอจากผู้เขียน
ใช้ vector database โดยตรง เช่น Pinecone, Weaviate
ได้ query planner ที่ฉลาดกว่า
มี hybrid search และ real-time indexing ในตัว
ราคาถูกกว่าการ over-provision Postgres และจ้างทีม optimize
อย่าหลงเชื่อ “แค่ใช้ Postgres ก็พอ”
pgvector ไม่ได้ออกแบบมาสำหรับ high-velocity ingestion
ต้องจัดการ memory, index, และ query เองทั้งหมด
การใช้ HNSW ในโปรดักชัน
สร้าง index ใช้ RAM มากกว่า 10 GB
อาจทำให้ database ล่มระหว่างการสร้าง
การ filter หลัง vector search
อาจได้ผลลัพธ์ไม่ตรงกับความต้องการ
ต้อง oversample และ filter เองใน application
การใช้ pgvector บน RDS
ไม่สามารถใช้ pgvectorscale ได้
ต้องจัดการ Postgres เองทั้งหมด
นี่คือเสียงเตือนจากคนที่เคยเชื่อว่า “รวมทุกอย่างไว้ใน Postgres จะง่ายกว่า” แต่พบว่าในโลกของ vector search—ความง่ายนั้นอาจซ่อนต้นทุนที่สูงกว่าที่คิดไว้มาก.
https://alex-jacobs.com/posts/the-case-against-pgvector/
📰 “The Case Against pgvector” – เมื่อเวกเตอร์ใน Postgres ไม่ง่ายอย่างที่คิด
Alex Jacobs เล่าประสบการณ์ตรงจากการพยายามใช้ pgvector ในระบบโปรดักชันจริง เพื่อสร้างระบบค้นหาเอกสารด้วยเวกเตอร์ แต่กลับพบว่าแม้ pgvector จะดูดีในเดโม แต่เมื่อใช้งานจริงกลับเต็มไปด้วยปัญหาทางเทคนิคและการจัดการที่ซับซ้อน
เขาไม่ได้บอกว่า pgvector “แย่” แต่ชี้ให้เห็นว่า blog ส่วนใหญ่พูดถึงแค่การติดตั้งและ query เบื้องต้น โดยไม่พูดถึงปัญหาเรื่อง index, memory, query planner, และการจัดการข้อมูลที่เปลี่ยนแปลงตลอดเวลา
✅ ความเข้าใจผิดจากบล็อกทั่วไป
➡️ ส่วนใหญ่ทดสอบแค่ 10,000 vectors บนเครื่อง local
➡️ ไม่พูดถึงปัญหา memory, index rebuild, หรือ query planner
✅ ปัญหาเรื่อง Index
➡️ pgvector มี 2 แบบ: IVFFlat และ HNSW
➡️ IVFFlat สร้างเร็วแต่คุณภาพลดลงเมื่อข้อมูลเพิ่ม
➡️ HNSW แม่นยำแต่ใช้ RAM สูงมากและสร้างช้า
✅ การจัดการข้อมูลใหม่
➡️ การ insert vector ใหม่ทำให้ index เสียสมดุล
➡️ ต้อง rebuild index เป็นระยะ ซึ่งใช้เวลาหลายชั่วโมง
➡️ การ update HNSW graph ทำให้เกิด lock contention
✅ ปัญหา query planner
➡️ Postgres ไม่เข้าใจ vector search ดีพอ
➡️ การ filter ก่อนหรือหลัง vector search ส่งผลต่อคุณภาพและความเร็ว
➡️ การใช้ LIMIT อาจทำให้ผลลัพธ์ไม่ตรงกับความต้องการ
✅ การจัดการ metadata
➡️ ต้อง sync vector กับข้อมูลอื่น เช่น title, user_id
➡️ การ rebuild index ทำให้ข้อมูลอาจไม่ตรงกัน
✅ การทำ hybrid search
➡️ ต้องเขียนเองทั้งหมด เช่น การรวม full-text กับ vector
➡️ ต้อง normalize score และจัดการ ranking ด้วยตัวเอง
✅ ทางเลือกใหม่: pgvectorscale
➡️ เพิ่ม StreamingDiskANN และ incremental index
➡️ ยังไม่รองรับบน AWS RDS
➡️ เป็นหลักฐานว่า pgvector เดิมยังไม่พร้อมสำหรับโปรดักชัน
✅ ข้อเสนอจากผู้เขียน
➡️ ใช้ vector database โดยตรง เช่น Pinecone, Weaviate
➡️ ได้ query planner ที่ฉลาดกว่า
➡️ มี hybrid search และ real-time indexing ในตัว
➡️ ราคาถูกกว่าการ over-provision Postgres และจ้างทีม optimize
‼️ อย่าหลงเชื่อ “แค่ใช้ Postgres ก็พอ”
⛔ pgvector ไม่ได้ออกแบบมาสำหรับ high-velocity ingestion
⛔ ต้องจัดการ memory, index, และ query เองทั้งหมด
‼️ การใช้ HNSW ในโปรดักชัน
⛔ สร้าง index ใช้ RAM มากกว่า 10 GB
⛔ อาจทำให้ database ล่มระหว่างการสร้าง
‼️ การ filter หลัง vector search
⛔ อาจได้ผลลัพธ์ไม่ตรงกับความต้องการ
⛔ ต้อง oversample และ filter เองใน application
‼️ การใช้ pgvector บน RDS
⛔ ไม่สามารถใช้ pgvectorscale ได้
⛔ ต้องจัดการ Postgres เองทั้งหมด
นี่คือเสียงเตือนจากคนที่เคยเชื่อว่า “รวมทุกอย่างไว้ใน Postgres จะง่ายกว่า” แต่พบว่าในโลกของ vector search—ความง่ายนั้นอาจซ่อนต้นทุนที่สูงกว่าที่คิดไว้มาก.
https://alex-jacobs.com/posts/the-case-against-pgvector/
0 ความคิดเห็น
0 การแบ่งปัน
47 มุมมอง
0 รีวิว