Một lựa chọn khác là thứ mà tôi mới bắt gặp gần đây (được cho phép, tôi vẫn chưa sử dụng nó, nhưng dự định sẽ sớm ra mắt) : rdbms-subsetter
.
Nó đơn giản và nhẹ hơn một chút so với Jailer, với một vài tính năng / đặc quyền tốt đẹp:
- CLI rất dễ dàng kết nối với dụng cụ hiện có
- Mã nguồn mở
- Sẽ theo các khóa ngoại để lấy một tập hợp con dữ liệu
mạch lạc
- Nếu bạn không có khóa ngoại được xác định rõ, các mối quan hệ có thể được cung cấp qua tệp cấu hình JSON. Trong trường hợp của tôi, tôi dự định tạo cấu hình này từ siêu dữ liệu lược đồ được lưu trữ ở nơi khác (cảm ơn, Rails: \)
- Bạn có thể nhắm mục tiêu một hàng cụ thể và nhận tất cả các hồ sơ liên quan (ví dụ: một khách hàng cụ thể đang gặp sự cố, vì vậy bạn có thể kéo xuống mọi thứ để dữ liệu công việc của tài khoản của họ có thể truy cập cục bộ)
- Nó có thể lấy số lượng bản ghi không đổi trên mỗi bảng hoặc lấy logarit để lấy thêm dữ liệu từ các bảng lớn hơn mà không cần quá tải.
Đáng để đề cập đến một tùy chọn khác cho cơ sở dữ liệu Heroku cụ thể, mà tôi đã sử dụng rất nhiều (như tôi đã từng làm việc ở đó).
Heroku thực sự khá nhanh trong việc đưa ra một DB bị bẻ khóa mới khi nó kéo các bản ghi viết trước để chuẩn bị, sau đó kết nối với DB chính để bắt kịp, sau đó dừng theo dõi nó. Bạn có thể tạo các "nhánh" này trên các ứng dụng để tránh ảnh hưởng đến sản xuất quá nhiều:
$ heroku addons:create heroku-postgres[:specific-plan] \
--fork your-production-app::DATABASE \
--app some-other-app-to-own-forked-database \
[--as PRODUCTION_SNAPSHOT]
Sau đó, bạn có thể khởi động ứng dụng của mình cục bộ chỉ vào ảnh chụp nhanh đó. Tôi sử dụng điều này thường xuyên để thực hiện một quá trình di chuyển dữ liệu hoặc lược đồ hoặc gỡ lỗi các vấn đề của khách hàng.
Trong lệnh trên, nếu bạn có một DB truy cập với DATABASE_URL
trên your-production-app
, bạn sẽ kết thúc với một DB truy cập với PRODUCTION_SNAPSHOT_URL
(nếu bạn đã xác định --as
) trên một ứng dụng khác nhau được đặt tên some-other-app-to-own-forked-database
.