Tôi có một Ruby on Rails ứng dụng với một cơ sở dữ liệu PostgreSQL trong đó có cấu trúc này:cơ sở dữ liệu theo chiều ngang rộng trong Ruby on Rails
class A < ActiveRecord::Base
has_many :B
end
class B < ActiveRecord::Base
has_many :C
end
class C < ActiveRecord::Base
attr_accessible :x, :y :z
end
Các chỉ là một vài A, và họ phát triển chậm (nói 5 tháng) . Mỗi A có hàng ngàn B, và mỗi B có hàng chục ngàn C (vì vậy mỗi A có hàng triệu C).
A là độc lập và B và C từ A khác nhau sẽ không bao giờ cần thiết cùng nhau (nghĩa là trong cùng một truy vấn).
Vấn đề của tôi là bây giờ tôi chỉ có một vài truy vấn A, ActiveRecord mất khá nhiều thời gian. Khi bảng cho C có hàng chục triệu hàng, truy vấn sẽ mất vĩnh viễn.
Tôi đang suy nghĩ về việc mở rộng quy mô cơ sở dữ liệu theo chiều ngang (nghĩa là bảng cho A, một bảng B và một bảng C cho mỗi A). Nhưng tôi không biết phải làm thế nào. Đó là một loại sharding tôi đoán, nhưng tôi không thể tìm ra cách để tạo ra các bảng DB động và sử dụng ActiveRecord để truy cập dữ liệu nếu bảng phụ thuộc vào đó một im làm việc với.
Cảm ơn bạn rất nhiều.
Nếu bạn làm điều này, bạn có thể muốn phân vùng vào lược đồ khác nhau, do đó bạn không thực hiện một bảng kajillion trong 'công khai'. – tadman
Cảm ơn bạn, tôi không biết về các lược đồ. Tuy nhiên, tôi sẽ làm điều đó như thế nào? – Nicolas
Nếu tôi là bạn, tôi sẽ tìm kiếm một số loại tiện ích hoặc plugin cung cấp cho bạn một nơi để bắt đầu. Tôi không quen thuộc với không gian Postgres, nhưng có những thứ như [Octopus] (https://github.com/tchandy/octopus) có thể phục vụ như là một điểm nhảy. – tadman