Cách tốt nhất để giải quyết một cơ sở dữ liệu bị phân loại trong Rails là gì? Nếu sharding được xử lý ở lớp ứng dụng, lớp bản ghi hoạt động, lớp trình điều khiển cơ sở dữ liệu, một lớp proxy, hoặc cái gì khác hoàn toàn? Những ưu và nhược điểm của mỗi cái là gì?Cơ sở dữ liệu sharding and Rails
Trả lời
FiveRuns có một viên ngọc tên DataFabric mà không sharding cấp ứng dụng và nhân rộng master/slave. Nó có thể là giá trị kiểm tra ra.
Để suy nghĩ của tôi, cách đơn giản nhất là duy trì 1: 1 giữa các phiên bản đường ray và phân đoạn DB.
Đối với những người bạn như tôi đã không nghe nói về sharding:
http://highscalability.com/unorthodox-approach-database-design-coming-shard
Tôi giả sử với phân đoạn, chúng tôi đang nói về phân vùng nằm ngang và không phân vùng theo chiều dọc (here are the differences on Wikipedia).
Trước hết, phân đoạn theo chiều dọc dọc theo như bạn có thể thực hiện trước khi bạn xem xét phân vùng theo chiều ngang. Thật dễ dàng trong Rails để có các mô hình khác nhau trỏ đến các máy khác nhau và đối với hầu hết các trang Rails, điều này sẽ mang lại cho bạn đủ xa.
Để phân vùng theo chiều ngang, trong một thế giới lý tưởng, điều này sẽ được xử lý ở lớp ứng dụng trong Rails. Nhưng trong khi nó không khó, nó không tầm thường trong Rails, và vào thời điểm bạn cần nó, thường ứng dụng của bạn đã phát triển vượt ra ngoài điểm mà điều này là khả thi vì bạn có các cuộc gọi ActiveRecord rắc khắp nơi. Và không ai, nhà phát triển hoặc quản lý, thích làm việc trên nó trước khi bạn cần vì mọi người sẽ thích làm việc với các tính năng mà người dùng sẽ sử dụng ngay bây giờ thay vì phân vùng có thể không hoạt động trong nhiều năm sau khi lưu lượng truy cập của bạn phát nổ.
ActiveRecord layer ... không dễ dàng từ những gì tôi có thể thấy. Sẽ đòi hỏi rất nhiều khỉ vá vào Rails internals.
Tại Spock, chúng tôi đã xử lý việc này bằng cách sử dụng proxy MySQL tùy chỉnh và mở nguồn trên SourceForge là Spock Proxy. ActiveRecord nghĩ rằng nó đang nói chuyện với một máy cơ sở dữ liệu MySQL khi thực tế nó nói chuyện với proxy, sau đó nói chuyện với một hoặc nhiều cơ sở dữ liệu MySQL, hợp nhất/sắp xếp kết quả và trả về ActiveRecord. Chỉ yêu cầu một vài thay đổi đối với mã Rails của bạn. Hãy xem trang Spock Proxy SourceForge để biết thêm chi tiết và vì lý do của chúng tôi để đi tuyến đường này.
+1 để kéo dài phân đoạn theo chiều dọc ở cấp bảng. Với ActiveRecord, việc chia các bảng thành nhiều bảng có ít cột hơn để phân lập dữ liệu "nóng" với dữ liệu khác là khá dễ dàng. Điều này tạo nên sự khác biệt lớn nếu bạn đang sử dụng MySQL. – casey
Kết nối Rails với nhiều cơ sở dữ liệu không phải là vấn đề lớn - bạn chỉ cần có một lớp con ActiveRecord cho mỗi phân đoạn ghi đè thuộc tính kết nối. Điều đó làm cho nó khá đơn giản nếu bạn cần phải thực hiện các cuộc gọi cross-shard. Sau đó bạn chỉ cần viết một đoạn mã nhỏ khi bạn cần thực hiện cuộc gọi giữa các mảnh.
Tôi không thích ý tưởng của Hank về việc tách các trường hợp đường ray, bởi vì có vẻ khó khăn khi gọi mã giữa các trường hợp trừ khi bạn có một thư viện được chia sẻ lớn.
Ngoài ra, bạn nên xem xét việc thực hiện một cái gì đó như Masochism trước khi bạn bắt đầu sharding.
Đối với đường ray để làm việc với môi trường được sao, tôi sẽ đề nghị sử dụng my_replication Plugin giúp kết nối cơ sở dữ liệu chuyển sang một trong những nô lệ tại thời gian chạy
- 1. chiến lược sharding cơ sở dữ liệu
- 2. Cơ sở dữ liệu sharding và JPA
- 3. Sharding and Transactions với MySQL
- 4. Cơ sở dữ liệu hợp nhất Rails
- 5. Nhiều cơ sở dữ liệu trong Rails
- 6. Định tuyến Rails động dựa trên cơ sở dữ liệu
- 7. Rails cơ sở dữ liệu giá trị boolean
- 8. Nhiều kết nối cơ sở dữ liệu trong Rails
- 9. Rails + PostGIS lỗi di chuyển cơ sở dữ liệu
- 10. Hủy/Xóa cơ sở dữ liệu trong Rails
- 11. Đặt Rails lên trên cơ sở dữ liệu hiện có
- 12. Cơ sở dữ liệu để ứng dụng CRUD, Rails 3
- 13. Rails 3 và cơ sở dữ liệu đồ thị
- 14. Cơ sở dữ liệu đối tượng cho Ruby on Rails
- 15. Di chuyển cơ sở dữ liệu giống như Rails?
- 16. Cách sử dụng nhiều cơ sở dữ liệu trong ứng dụng Rails Sử dụng cơ sở dữ liệu
- 17. Chuyển dữ liệu từ cơ sở dữ liệu này sang cơ sở dữ liệu khác
- 18. Dữ liệu không vào cơ sở dữ liệu SQLite - Ruby on Rails
- 19. Lưu trữ dữ liệu trong Ruby on Rails mà không có cơ sở dữ liệu
- 20. Rails and Devise - Truy cập dữ liệu phiên
- 21. cơ sở dữ liệu node.js
- 22. Cơ sở dữ liệu CUBRID
- 23. Một cơ sở dữ liệu và nhiều cơ sở dữ liệu
- 24. cơ sở dữ liệu theo chiều ngang rộng trong Ruby on Rails
- 25. onUpgrade cơ sở dữ liệu - oldVersion - newVersion
- 26. Tài liệu cơ sở dữ liệu Postgresql
- 27. mangento trong cơ sở dữ liệu hoặc cơ sở oracle?
- 28. Thiết kế cơ sở dữ liệu thời gian trong Cassandra
- 29. Rails 3: Cách chèn Bản ghi vào Cơ sở dữ liệu bằng Rails
- 30. Lớp cơ sở dữ liệu .NET và cơ sở dữ liệu
https://github.com/mperham/ data_fabric là URL mới –
"Bob hiện đang phụ trách": https://github.com/bpot/data_fabric –