2009-12-07 29 views
6

Sau khi đọc Storing Images in DB - Yea or Nay? Tôi nghĩ rằng hệ thống tệp là nơi phù hợp để lưu trữ hình ảnh. Nhưng tôi muốn biết làm thế nào bạn xử lý sao lưu/phiên bản kiểm soát của hình ảnh tải lên trong môi trường khác nhau của bạn (dev/giai đoạn/prod) và cân bằng tải mạng?Kiểm soát phiên bản ảnh đã tải lên hệ thống tệp

Các sự cố này khá dễ xử lý khi làm việc với cơ sở dữ liệu, ví dụ: để tạo bản sao lưu từ môi trường sản xuất và khôi phục DB trong môi trường phát triển.

Bạn nghĩ gì về việc sử dụng ví dụ git để xử lý kiểm soát phiên bản tệp đã tải lên, ví dụ:

Môi trường sản xuất:

  • Một hình ảnh được tải lên một thư mục chia sẻ tại máy chủ web.
  • dữ liệu Meta được lưu trữ trong cơ sở dữ liệu
  • Những hình ảnh được tự động thêm vào một kho git

Developer tại nơi làm việc:

  • Kiểm tra ra mã nguồn.
  • Chạy tập lệnh để khôi phục cơ sở dữ liệu.
  • Chạy tập lệnh để tải các hình ảnh mới nhất.

Tôi nghĩ giải pháp trên khá trơn tru cho nhà phát triển, hình ảnh sẽ nằm dưới sự kiểm soát phiên bản và môi trường có thể được tách biệt với nhau.

+0

Âm thanh như ý tưởng hay. – grenade

+0

"sử dụng kho lưu trữ hoàn toàn tách biệt với mã nguồn": điều này không tương thích với cách tiếp cận mô-đun con: ý tưởng vẫn là mã repo nguồn để tham chiếu một cam kết đã cho của repo hình ảnh, nhưng sau đó (repo hình ảnh) vẫn một repo "hoàn toàn tách biệt". – VonC

Trả lời

2

Đối với chúng tôi, điều khiển phiên bản không quan trọng như phân phối. Dữ liệu meta được thêm thông qua quản trị viên web và hình ảnh sẽ bị xóa trên máy chủ quản trị. Các tập lệnh Rsync đẩy chúng ra ngoài cụm để phục vụ hình ảnh prod. Đối với dev/test, chúng tôi chỉ cần rsync từ máy chủ chính trở về máy chủ dev.

rsync rất tốt để cân bằng tải và phân phối. Nếu bạn phụ trong git cho admin/master server, bạn có một giải pháp khá tốt.

Nếu bạn đồng ý với bản sao lưu lưu trữ lịch sử tệp tại thời điểm sao lưu (trái ngược với điều khiển phiên bản với mỗi lần sửa đổi), thì một số điều chỉnh có thể hữu ích: Automated Snapshot-style backups with rsync.

+0

Cảm ơn phản hồi và tôi cho rằng phân phối và sao lưu quan trọng hơn đối với chúng tôi so với phiên bản. – orjan

2

Nó có thể hoạt động, nhưng tôi sẽ lưu trữ những hình ảnh đó trong một kho git mà sau đó sẽ là submodule of the git repo với mã nguồn.
Bằng cách đó, mối quan hệ mạnh mẽ tồn tại giữa mã và hình ảnh, mặc dù hình ảnh nằm trong repo của riêng họ.
Ngoài ra, nó tránh các vấn đề với git gc hoặc git prune kém hiệu quả hơn với số lượng tệp nhị phân lớn: nếu hình ảnh nằm trong repo của riêng mình và với một vài biến thể cho mỗi lần, việc bảo trì trên repo đó khá nhẹ. Trong khi repo mã nguồn có thể phát triển tự động hơn nhiều, với các lệnh bảo trì git thông thường trong khi chơi.

+0

Cảm ơn bạn đã phản hồi về git.Ý tưởng đầu tiên của tôi là sử dụng một kho lưu trữ hoàn toàn tách biệt với mã nguồn nhưng các mô đun con dường như là một tùy chọn khác. Tôi cảm thấy khá tự tin rằng nó sẽ đáng để chạy một cành để xem có thể không. – orjan

Các vấn đề liên quan