10

Trong một thời gian dài, chúng tôi đã lưu trữ dữ liệu của chúng tôi trong kho lưu trữ của dự án. Chúng tôi chỉ tổ chức mọi thứ theo dữ liệu/sql, và mỗi bảng có các tệp create_tablename.sql và data_tablename.sql riêng của nó.Mã & theo dõi/triển khai dữ liệu

Chúng tôi hiện đã triển khai dự án thứ 2 của mình lên Scalr và chúng tôi đã nhận ra rằng có một chút lộn xộn.

Cách chúng tôi triển khai:

Chúng tôi có một "packageup" tập hợp các kịch bản mà xé ngoài dự án thành 3 tài liệu lưu trữ (dữ liệu, mã, các tập tin tĩnh) mà chúng tôi sau đó lưu trữ trong 3 xô riêng biệt trên S3. Mỗi khi một vai trò khởi động, nó sẽ tải xuống một trong các tệp (tùy thuộc vào vai trò: dữ liệu, nfs hoặc web) và sau đó tập lệnh "giải nén" thiết lập mọi thứ cho từng vai trò, tải dữ liệu vào mysql, thiết lập Chúng tôi làm điều này vì chúng tôi không muốn lưu hình ảnh máy chủ, chúng tôi luôn bắt đầu từ các trường hợp vanilla mà chúng tôi cài đặt mọi thứ từ đầu bằng cách sử dụng các tập lệnh được tạo trong nhà khác nhau. Thời gian khởi động không phải là vấn đề (chúng tôi sẵn sàng sử dụng trang trại trong 9 phút).

Vấn đề là đau khi cố gắng tìm phiên bản cơ sở dữ liệu phù hợp bất cứ khi nào chúng tôi cố gắng thiết lập xây dựng phát triển mới (tại bất kỳ thời điểm nào, chúng tôi có khoảng 4 bản dựng cho một dự án). Ngoài ra, git đang bắt đầu bị nghẹt thở một khi chúng tôi đi vào sản xuất, như các tập tin sql kết thúc lên tổng cộng khoảng 500mb.

Câu hỏi đặt ra là:

Mọi người khác quản lý cơ sở dữ liệu như thế nào? Tôi đã tìm kiếm một cái gì đó mà làm cho nó dễ dàng để đưa dữ liệu ra khỏi sản xuất vào dev, và cũng di chuyển dữ liệu từ dev vào sản xuất, nhưng đã không vấp vào bất cứ điều gì.

+0

Tại sao bạn muốn di chuyển dữ liệu từ dev sang sản phẩm? –

+1

@shsimsimulator - rất nhiều khung công tác (ví dụ: Magento, ATG, vv) lưu trữ dữ liệu cấu hình trong cơ sở dữ liệu cần được chuyển để nhân bản môi trường dev/dàn dựng –

Trả lời

4

Bạn nên nghiêm túc xem xét dbdeploy (dbdeploy.com). Nó được chuyển sang nhiều ngôn ngữ, những ngôn ngữ chính là Java và PHP.Nó được tích hợp trong các công cụ xây dựng như Ant và Phing, đồng thời cho phép chia sẻ dễ dàng các tệp delta.

Tệp delta luôn bao gồm phần triển khai nhưng cũng có thể chứa phần hoàn tác. Khi bạn cam kết tệp delta của bạn và một nhà phát triển khác kiểm tra nó, anh ta chỉ có thể chạy dbdeploy và tất cả các thay đổi mới được tự động áp dụng cho cơ sở dữ liệu của mình.

Tôi đang sử dụng dbdeploy cho blog mã nguồn mở của tôi, vì vậy bạn có thể có một cái nhìn trên được tổ chức như thế nào file đồng bằng: http://site.svn.dasprids.de/trunk/sql/deltas/

+0

có một điểm chính ở đây "hoàn tác". Bất kỳ quá trình triển khai DB nào cũng phải có chức năng quay ngược một bước nếu không bạn sẽ * bị bắt trong một ngày ... –

+0

Điều đó có vẻ khá tốt. Ngoài ra, tôi có thể chia nhỏ hai chi nhánh (dev, prod) và chúng tôi có thể dễ dàng theo dõi thay đổi riêng biệt với thay đổi sản xuất, vì thay đổi của dev có nhiều khả năng được hoàn nguyên hơn và không phải lúc nào cũng thành sản phẩm. Tôi tự hỏi nó sẽ quản lý các phiên bản như thế nào trong trường hợp đó. –

+0

Vâng, như một tập tin delta thường bao gồm một tính năng cụ thể thay vì một phiên bản, bạn chỉ có thể loại bỏ tập tin delta từ kiểm soát phiên bản và bạn sẽ được tốt sau đó (chắc chắn sau khi áp dụng một phần hoàn tác, không trước). – DASPRiD

0

Khám phá capistrano. Đó là một công cụ mà cộng đồng ruby ​​sử dụng để triển khai cho các môi trường khác nhau và tôi thấy nó thực sự hữu ích.

Ngoài ra nếu triển khai của bạn đang bắt đầu bị nghẹt, hãy thử một công cụ twitter được xây dựng có tên là Murder.

+0

Tôi không lo lắng về bước triển khai, như tôi về triển khai kết hợp với môi trường sản xuất/phát triển. Chúng tôi thường xuyên phải chia sẻ cơ sở dữ liệu (cấu trúc + dữ liệu) giữa chúng tôi cũng như với môi trường sống. Ngoài ra, git đang nghẹt thở trên các tệp sql của chúng tôi. –

2

Làm thế nào tôi hiểu câu hỏi chính của bạn là sự hết hạn của những người khác trong việc di chuyển dữ liệu SQL từ việc đưa vào sản xuất.

Tôi sử dụng Microsoft SQL Server thay vì SQL của tôi, vì vậy tôi không chắc chắn, rằng sự hết hạn của tôi bạn có thể sử dụng trực tiếp. Tuy nhiên cách này hoạt động rất tốt.

Tôi sử dụng phiên bản Visual Studio 2010 Ultimate để so sánh dữ liệu trong hai cơ sở dữ liệu. Tính năng tương tự cũng tồn tại trong Vinsual Studio Team Edition 2008 (hoặc phiên bản cơ sở dữ liệu). Bạn có thể đọc http://msdn.microsoft.com/en-us/library/dd193261.aspx để hiểu cách hoạt động. Bạn có thể so sánh hai cơ sở dữ liệu (dev và prod) và tạo ra SQL Script để sửa đổi dữ liệu. Bạn có thể dễ dàng loại trừ một số bảng hoặc một số cột so sánh. Bạn cũng có thể kiểm tra kết quả và loại trừ một số mục từ việc tạo tập lệnh. Vì vậy, người ta có thể dễ dàng và linh hoạt tạo ra các kịch bản có thể được sử dụng để triển khai các thay đổi trong cơ sở dữ liệu. Bạn có thể so sánh một cách tách biệt dữ liệu của hai cơ sở dữ liệu từ sructure (so sánh lược đồ). Vì vậy, bạn có thể làm mới dữ liệu trong dev với dữ liệu từ prod hoặc tạo các kịch bản lệnh sửa đổi cơ sở dữ liệu prod thành phiên bản cuối cùng của cơ sở dữ liệu dev. Tôi khuyên bạn nên xem xét các tính năng này và một số sản phẩm của http://www.red-gate.com/ (như http://www.red-gate.com/products/SQL_Compare/index.htm).

0

Cá nhân tôi muốn nhìn vào Toad

http://www.toadworld.com/

Less hơn 10k;) ... sẽ phân tích cấu trúc cơ sở dữ liệu, tạo kịch bản để sửa đổi chúng và cũng sẽ di chuyển dữ liệu.

0

Một phần của giải pháp là chụp phiên bản của từng mô-đun mã và tài nguyên dữ liệu tương ứng của chúng ở một vị trí và so sánh chúng để đảm bảo tính nhất quán. Ví dụ: số gia tăng trong số phiên bản của bạn, mô-đun customer_comments sẽ yêu cầu tệp delta SQL tương ứng để nâng cấp các bảng DB có liên quan lên số phiên bản bằng nhau cho dữ liệu.

Ví dụ, hãy xem số core_resourceapproach của Magento như được tài liệu bởi @AlanStorm.

Chúc mừng, JD

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