กำลังจัดเก็บรูปภาพใน SQL Server หรือไม่


191

ฉันสร้างเว็บไซต์ตัวอย่างเล็ก ๆ ขึ้นมาและฉันเก็บรูปภาพไว้ในคอลัมน์รูปภาพบนเซิร์ฟเวอร์ sql คำถามสองสามข้อที่ฉันมี ...

  • นี่เป็นความคิดที่ไม่ดีเหรอ?

  • มันจะส่งผลกระทบต่อประสิทธิภาพการทำงานในเว็บไซต์ของฉันเมื่อมันเติบโต?

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


5
มีการเพิ่มใหม่สำหรับปัญหานี้ในปี 2560 หรือไม่ วันนี้ยังใช้ได้หรือไม่
Haikal Nashuha

คำตอบ:


272

มีกระดาษที่ดีจริงๆโดย Microsoft Research เรียกว่าเป็นการหยดหรือไม่ที่จะหยด

ข้อสรุปของพวกเขาหลังจากการทดสอบและวิเคราะห์ประสิทธิภาพเป็นจำนวนมากคือ:

  • หากรูปภาพหรือเอกสารของคุณมีขนาดต่ำกว่า 256KB การจัดเก็บในฐานข้อมูลคอลัมน์ VARBINARY นั้นมีประสิทธิภาพมากกว่า

  • หากรูปภาพหรือเอกสารของคุณมีขนาดเกินกว่า 1 MB การจัดเก็บไว้ในระบบไฟล์จะมีประสิทธิภาพมากกว่า (และด้วยคุณสมบัติ FILESTREAM ของ SQL Server 2008 ภาพเหล่านั้นจะยังคงอยู่ภายใต้การควบคุมธุรกรรมและส่วนหนึ่งของฐานข้อมูล)

  • ในระหว่างสองเหล่านี้มันเป็นการโยนขึ้นอยู่กับการใช้งานของคุณ

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

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

ตอนนี้เมื่อใดก็ตามที่คุณมีตารางใหม่เพื่อสร้างสิ่งที่ต้องจัดเก็บคอลัมน์ VARCHAR (MAX) หรือ VARBINARY (MAX) คุณสามารถระบุกลุ่มไฟล์นี้สำหรับข้อมูลขนาดใหญ่:

 CREATE TABLE dbo.YourTable
     (....... define the fields here ......)
     ON Data                   -- the basic "Data" filegroup for the regular data
     TEXTIMAGE_ON LARGE_DATA   -- the filegroup for large chunks of data

ลองเข้าไปที่ MSDN intro บนกลุ่มไฟล์แล้วสนุกไปกับมัน!


สิ่งนี้เป็นสิ่งที่ดีหรือไม่ดี .... ถ้ารูปภาพหรือเอกสารของคุณมีขนาดเกิน 1 MB การจัดเก็บไว้ในระบบไฟล์จะมีประสิทธิภาพมากกว่า (และด้วยคุณสมบัติ FILESTREAM ของ SQL Server 2008 พวกเขายังคงอยู่ภายใต้การควบคุมธุรกรรม และเป็นส่วนหนึ่งของฐานข้อมูล)
htm11h

คำตอบที่ดี ถ้าคุณรู้สึกว่าการอธิบายในรายละเอียดว่าทำไมคุณแนะนำให้ใช้ตารางเฉพาะสำหรับข้อมูลภาพผมได้สร้างคำถามที่แยกต่างหากสำหรับการว่าเมื่อวันที่ dba.SE
Heinzi

15

ฉันตกลงไปในภาวะที่กลืนไม่เข้าคายไม่ออกนี้ครั้งเดียวและทำการวิจัยบน google เล็กน้อยสำหรับความคิดเห็น สิ่งที่ฉันพบคือหลายคนเห็นภาพบันทึกลงดิสก์ดีกว่าสำหรับภาพขนาดใหญ่ในขณะที่ mySQL ช่วยให้เข้าถึงได้ง่ายขึ้นโดยเฉพาะจากภาษาเช่น PHP

ฉันพบคำถามที่คล้ายกัน

ไฟล์ MySQL BLOB เทียบกับการจัดเก็บรูปภาพ PNG ขนาดเล็ก?

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

หวังว่ามันจะช่วย


14

ฉันต้องการเก็บภาพในไดเรกทอรีจากนั้นจัดเก็บการอ้างอิงไปยังไฟล์ภาพในฐานข้อมูล

อย่างไรก็ตามหากคุณเก็บรูปภาพไว้ในฐานข้อมูลคุณควรแบ่งพาร์ติชันฐานข้อมูลของคุณเพื่อให้คอลัมน์รูปภาพอยู่ในไฟล์แยกต่างหาก

คุณสามารถอ่านเพิ่มเติมเกี่ยวกับการใช้ filegroups นี่http://msdn.microsoft.com/en-us/library/ms179316.aspx


11

ทำไมการเก็บรูปภาพไว้ในฐานข้อมูลจึงไม่ดีในแคตตาล็อกบนเว็บเซิร์ฟเวอร์

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

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

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

หากคุณบันทึกรูปภาพใน SqlServer ทุกอย่างจะทำงานเหมือนเดิม

แค่ 2 เซ็นต์ของฉัน


3
จุดดี. การสำรองข้อมูลของภาพมีความสำคัญเท่ากับการสำรองฐานข้อมูล ... บางครั้งมากกว่านั้น
Chris Catignani

อิมเมจบนระบบไฟล์ต้องการสิทธิ์เครือข่ายเช่นกัน
Chris Catignani

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



7

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


0

จากประสบการณ์ของฉันการจัดเก็บ URL ไปยังรูปภาพที่เก็บไว้ในตำแหน่งอื่นเป็นวิธีที่ดีที่สุดสำหรับโครงการที่เรียบง่าย

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