Tôi muốn làm việc với các liên kết ActiveRecord được phiên bản. Ví dụ:, tôi muốn tìm đối tượng mà một đối tượng khác thuộc về một ngày trong quá khứ nhất định hoặc đối tượng thuộc về trước đó. Liệu có tồn tại một thư viện phân lớp ActiveRecord của Rails để cung cấp các quan hệ được phiên bản không? Hoặc một số thư viện Ruby khác cung cấp các quan hệ có phiên bản bền vững?Làm cách nào để đạt được các liên kết ActiveRecord được phiên bản?
Trả lời
Hỗ trợ trạng thái lịch sử trong ứng dụng giao dịch là một cách tốt để mở rộng ồ ạt sự phức tạp, làm chậm hiệu suất DB và khiến cuộc sống trở nên khó khăn cho bản thân bạn. Nếu bạn chỉ cần hiển thị hoặc báo cáo về trạng thái lịch sử và không cần đến từng phút, hãy xem xét xây dựng một lược đồ sao với Type-II slowly changing dimensions và một quá trình định kỳ cập nhật nó.
Điều này sẽ ít phức tạp hơn nhiều so với việc xây dựng một ứng dụng có theo dõi lịch sử đặc biệt theo hệ thống chạy qua cơ sở mã. Nếu cách tiếp cận này sẽ làm những gì bạn yêu cầu của ứng dụng, bạn có thể sẽ làm tốt hơn. Nó cũng có nghĩa là cơ sở dữ liệu ứng dụng sẽ chơi độc đáo với các cơ chế truy cập cơ sở dữ liệu vanilla đi kèm với hệ thống.
Nếu bạn cần làm mới hợp lý thường xuyên, bạn có thể triển khai hệ thống chụp dữ liệu đã thay đổi trên cơ sở dữ liệu, điều này tương đối đơn giản nếu ứng dụng chỉ phải quan tâm đến trạng thái hiện tại. Với cơ chế CDC, quá trình tải chỉ phải cập nhật dựa trên các thay đổi và sẽ chạy tương đối nhanh.
Thử ActsAsVersioned Plugin
Miễn là bạn đang phải đối phó với một lượng lớn dữ liệu, và kích thước dương phụ sẽ không đẩy db của bạn trên mép, không có nhược điểm lớn đối với dữ liệu phiên bản lịch sử. Sự phức tạp của truy vấn phụ có thể là một cơn đau nhẹ, nhưng nó không có gì lớn.
Trong trường hợp của tôi, tôi đã viết một plugin ray để xử lý phiên bản, nó bổ sung thêm 5 cột cho mỗi bảng là phiên bản (và giúp xử lý truy vấn/thao tác vv):
valid_from - datetime - datetime rằng phiên bản này là tạo tại
valid_to - datetime - datetime rằng phiên bản này không còn là hợp lệ
root_id - nguyên - id của bản gốc hàng (rằng đây là một phiên bản tiếp theo của)
created_by - nguyên - Các user id của người sử dụng mà thực hiện việc tạo ra các phiên bản này
retired_by - nguyên - Các user id của người sử dụng mà đã gỡ bỏ phiên bản này
Đối với các hàng hiện đang hoạt động, valid_to là null. Thêm một chỉ mục trên valid_to viện trợ trong việc giữ hiệu suất linh hoạt.
- 1. Sử dụng Java drawString để đạt được sự liên kết văn bản sau
- 2. Làm cách nào để kết hợp các đối tượng ActiveRecord?
- 3. Cách đạt được setVideoScalingMode cho các phiên bản đầu tiên của Android
- 4. RAILS: Làm cách nào để có được các liên kết has_many của một mô hình
- 5. Rails phiên được chia sẻ với activerecord
- 6. Làm cách nào để tăng khoảng cách giữa hộp kiểm và văn bản được liên kết?
- 7. Làm cách nào để đạt được kết quả sau bằng cách sử dụng RelativeLayout?
- 8. Làm cách nào để đạt được "kết hợp chuỗi con" trong thời gian O (n)?
- 9. Làm thế nào để đạt được assertDictEqual với assertSequenceEqual được áp dụng cho các giá trị
- 10. Làm cách nào để loại trừ bản ghi khỏi mô hình được liên kết trong CakePHP?
- 11. Cách để đạt được các đặc điểm Java hiệu quả?
- 12. Làm thế nào để đạt được tải chậm với RequireJS?
- 13. Làm thế nào để đạt được vào cuối của TextArea
- 14. Làm cách nào để xử lý mã cho các dịch vụ web SOAP được phiên bản?
- 15. Làm thế nào để đạt được mặt nạ UIView động?
- 16. Làm thế nào để chọn phiên bản của VC 2008 DLLs ứng dụng nên được liên kết đến?
- 17. Làm thế nào để có được phiên bản PHP?
- 18. Làm cách nào để "chuỗi" các bảng được liên kết trong Access?
- 19. Làm thế nào để java.awt.dialog đạt được phương thức?
- 20. Làm cách nào để kiểm soát các Thành phần được liên kết nào được xuất bản khi xuất bản một Thành phần cụ thể?
- 21. làm thế nào để đạt được phân trang trong lucene?
- 22. Làm cách nào để wget chỉ lưu các loại tệp được liên kết đến từ các trang được liên kết đến bởi trang đích?
- 23. Bản ghi được liên kết với bất kỳ bảng nào?
- 24. Rails ActiveRecord Model Danh sách liên kết
- 25. Làm cách nào để sử dụng các phiên bản được tham số hóa của Jenkins?
- 26. ActiveRecord to_json: có điều kiện bao gồm các liên kết
- 27. Làm cách nào để tìm URL liên kết bằng văn bản liên kết với XPath?
- 28. Có phiên bản nào của os.getcwd() không liên quan đến các liên kết tượng trưng không?
- 29. Làm cách nào để kiểm tra các bảng được liên kết với khóa ngoài?
- 30. Liên kết mã vùng để kiểm soát phiên bản
Không đồng ý với 'nhẹ'. Trên một hệ thống bảo hiểm bảo lãnh tôi hơi quen thuộc với các ước tính là theo dõi lịch sử được thêm vào trong một phiên bản cụ thể chiếm khoảng 70% nỗ lực phát triển. – ConcernedOfTunbridgeWells
Thú vị, trải nghiệm cá nhân của tôi sẽ thay đổi theo cách khác, nhưng tôi đã thiết kế hệ thống để được phiên bản từ đầu. Tôi không muốn tưởng tượng nỗi đau nó sẽ mất để thêm nó trong một phiên bản sau này. Hệ thống có khoảng 20 bảng được phiên bản, 10 bảng không phiên bản. – Michael
Hm, điều này nghe rất thú vị! Bạn đã phát hành plugin của mình ở đâu đó?Bạn có thể tải nó lên github không? Tôi rất muốn nhìn vào nó để có được một số ý tưởng, v.v. – reto