BLOB หรือการอ้างอิงใน PostgreSQL


11

ฉันต้องการจัดเก็บไฟล์ข้อมูลไบนารีในฐานข้อมูล PostgreSQL ซึ่งทำงานบนเซิร์ฟเวอร์ Ubuntu ตอนแรกจะมีไฟล์ขนาดไม่กี่โหลประมาณ 250kb ต่อไฟล์ อย่างไรก็ตามจำนวนไฟล์จะเพิ่มขึ้นเมื่อเวลาผ่านไป บางครั้งฉันอาจจำเป็นต้องดึงข้อมูลจากไฟล์สำหรับการวิเคราะห์ดาวน์สตรีมอื่น ๆ

ฉันได้ทำการวิจัยบางอย่างเกี่ยวกับคำถามอายุของการจัดเก็บข้อมูลไบนารีเป็น BLOB หรือการอ้างอิง ทั้งสองเห็นได้ชัดว่ามีข้อดีและข้อเสีย มีปัญหาเฉพาะที่เกี่ยวข้องกับ PostgreSQL ที่ฉันควรทราบหรือไม่? เป็นวิธีหนึ่งหรือวิธีที่ดีกว่าถ้าฉันต้องการดึงข้อมูลจากไฟล์ทั้งผ่านฟังก์ชั่น PostgreSQL หรือผ่านโปรแกรม Python ภายนอก?

ถ้าฉันจะจัดเก็บไฟล์ข้อมูลโดยตรงในฐานข้อมูลมันจะดีกว่าหรือไม่ที่จะเก็บไว้ในตารางที่แยกต่างหากพร้อมกับคีย์ต่างประเทศที่อ้างอิงถึงตาราง "main" แทนที่จะเป็นตารางที่มีฟิลด์อื่นทั้งหมด

ฉันได้อ่านคำถามและคำตอบที่นี่ ; ความคิดเห็นมีแสดงให้เห็นว่าการจัดเก็บไฟล์ไบนารีโดยอ้างอิง (ในระบบไฟล์) บน Linux จะดีกว่า คำถามของฉันเกี่ยวข้องกับ PostgreSQL โดยเฉพาะและเพื่อดึงข้อมูลจากไฟล์สำหรับการวิเคราะห์ที่หลากหลาย

อัปเดต: คล้ายคำถาม


ด้วย PostgreSQl คุณสามารถตั้งค่ากฎที่ลบไฟล์ในระบบไฟล์โดยอัตโนมัติเมื่อบันทึกที่มีการอ้างอิงถูกลบ
jp

ฉันแน่ใจว่ามีคำตอบมากกว่าหนึ่งคำถาม เกิดอะไรขึ้นกับมัน? มีวิธีดูไหมถ้าผู้โพสต์ลบหรือไม่ แล้วความคิดเห็นเกี่ยวกับมันล่ะ?
SabreWolfy

ใช่ฉันลบมันเนื่องจากปัญหาประสิทธิภาพการทำงานของ bytea ที่ฉันเขียนถึงสามารถหลีกเลี่ยงได้ ความคิดเห็นสามารถสรุปได้โดย "ทุกอย่างใช้ได้ดีกับ bytea คุณควรตรวจสอบให้แน่ใจว่าคุณไม่ได้หลบหนีอักขระที่ไม่สามารถพิมพ์ได้ในฐานข้อมูลแล้วยกเลิกการหลบเลี่ยงพวกเขาอีกครั้งในแอปพลิเคชันของคุณตามที่ araqnid แสดงความคิดเห็น การหลบหนีฐานสิบหกที่รองรับโดย libpq "
jp

คำตอบ:


9

ฉันคิดว่าคุณควรเก็บข้อมูลในฐานข้อมูลเป็นbyteaคอลัมน์ปกติ ด้วยวิธีนี้คุณจะได้รับข้อดีทั้งหมดของฐานข้อมูลและคุณสามารถประมวลผลข้อมูลโดยใช้ฟังก์ชั่นฐานข้อมูล (และแม้แต่ PL / Python ถ้าคุณต้องการ) รายการข้อมูลขนาดใหญ่จะถูกจัดเก็บโดยอัตโนมัตินอกบรรทัดดังนั้นจึงไม่มีเหตุผลที่คุณจะแนะนำการอ้างอิงทางอ้อมอื่น

เหตุผลหลักสำหรับการจัดเก็บวัตถุไบนารีขนาดใหญ่นอกฐานข้อมูลจะเป็นเพราะพวกเขามีขนาดใหญ่เกินไปที่จะสามารถจัดเก็บและดึงพวกเขาในเวลาที่น่าพอใจถ้าพวกเขาขยายฐานข้อมูลเกินกว่าการปฏิบัติจริงหรือถ้าคุณต้องการเข้าถึงไฟล์เป็นไฟล์จาก แอปพลิเคชันแยกต่างหาก ไม่มีสิ่งใดที่ตรงนั้นเท่าที่ฉันสามารถบอกได้


ขอบคุณสำหรับรายละเอียด จุดของคุณเกี่ยวกับการเข้าถึงไฟล์จากแอปพลิเคชันแยกต่างหากทำให้ฉันตระหนักว่าในอนาคตฉันอาจต้องการให้ผู้ใช้ดาวน์โหลดไฟล์ไบนารีเพื่อใช้ภายในเครื่องของพวกเขา สามารถทำได้ถ้าไฟล์ถูกเก็บไว้ในฐานข้อมูลหรือไม่
SabreWolfy

แน่ใจ คุณจะต้องเขียนโค้ดเล็กน้อยเพื่อจัดเรียงนั้น (ดึงข้อมูลไฟล์จากฐานข้อมูลการจัดเรียงการดาวน์โหลด HTTP พูด) แต่นั่นไม่ใช่ตัวบล็อก
Peter Eisentraut
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.