Nơi tốt nhất để lưu trữ các tệp nhị phân có liên quan đến dữ liệu trong cơ sở dữ liệu của bạn là gì? Bạn có nên:
- Lưu trữ trong cơ sở dữ liệu với một đốm màu
- Lưu trữ trên hệ thống tập tin với một liên kết trong cơ sở dữ liệu
- Lưu trữ trong hệ thống tệp nhưng đổi tên thành hàm băm của nội dung và lưu trữ hàm băm trên cơ sở dữ liệu
- Một cái gì đó tôi không nghĩ đến
Ưu điểm của (1) là (trong số những thứ khác) rằng tính nguyên tử của các giao dịch được bảo tồn. Chi phí là bạn có thể tăng đáng kể các yêu cầu về lưu trữ (và liên kết / sao lưu)
Mục tiêu của (3) là duy trì tính nguyên tử ở một mức độ nào đó - nếu bạn có thể thực thi rằng hệ thống tệp bạn đang viết không cho phép các tệp bị thay đổi hoặc bị xóa và luôn có hàm băm chính xác như tên tệp. Ý tưởng sẽ là ghi tệp vào hệ thống tệp trước khi cho phép chèn / cập nhật tham chiếu hàm băm - nếu giao dịch này thất bại sau khi hệ thống tệp ghi nhưng trước cơ sở dữ liệu DML, điều đó tốt vì hệ thống tệp đang 'giả mạo' là kho lưu trữ của tất cả các tệp và băm có thể - không thành vấn đề nếu có một số tệp trong đó không được trỏ đến (và bạn có thể dọn sạch chúng định kỳ nếu bạn cẩn thận)
BIÊN TẬP:
Có vẻ như một số RDBMS có điều này được trình bày theo cách riêng của họ - tôi rất muốn biết những người khác làm điều đó như thế nào - và đặc biệt là trong một giải pháp cho các postgres