8

thực hành fBetter cho kích thước khổng lồ của bảng trên Ruby on Rails 4/ActiveRecordthực hành tốt hơn cho kích thước khổng lồ của bảng trên Ruby on Rails 4/ActiveRecord

Làm thế nào tôi có thể phân vùng một big table trong postgreSQL với Active Record on Rails 4

Tôi thích PostgreSQL hoặc RDBMS khác, bởi vì tôi đã thử nó trong MongoDB. Nó thực sự chậm trên nó.

Rails 4 có hỗ trợ giải pháp tốt cho cả một bàn lớn không?

(trường hợp của tôi: hơn 50 billions hồ sơ, kích thước khoảng 20TB)

mô tả dữ liệu

Có một bảng User chứa name, personal_data, year lĩnh vực.

Dữ liệu có thể được chia cho year và dữ liệu sẽ được chia đều.

Ý tưởng

Tôi nghĩ rằng đó là not practical để tạo ra nhiều mô hình như User_1950, User_2001,..., User_2015

Tôi muốn partition toàn bộ dữ liệu bằng cách year

Có hai tiếp cận tôi có thể nghĩ đến

  • được chia thành physical table khác nhau trong cùng một cơ sở dữ liệu. (sharding?)
  • được chia thành physical database khác nhau trên các cơ sở dữ liệu khác nhau. (Có thể nó hoạt động tốt với Rails)

Tôi muốn các giải pháp có thể tương thích với Active Record

nó sẽ hoạt động như

User.find(name: xxx, year: 1988) User.find(name: xxx, year: 2012)

Vì vậy mà tôi không quan tâm về cách để truy cập vào nhiều bảng được phân đoạn.

Theo như tôi biết

Tôi tìm thấy một viên ngọc partitioned nhưng mà không được hỗ trợ Rails 4

+2

Sử dụng [thừa kế] (http://www.postgresql.org/docs/current/static/tutorial-inheritance.html) để phân vùng các bảng: http : //www.depesz.com/2015/06/07/partitioning-what-why-how/ –

+0

@a_horse_with_no_name Xin chào, nhưng nó cũng có thể hỗ trợ hoạt động ghi trên đường ray 4. có vẻ như không có may mắn về nó? – newBike

+0

Có vẻ như viên đá quý “phân vùng” mà bạn đang tìm kiếm có thể hỗ trợ Rails 4 bây giờ https://github.com/fiksu/partitioned/issues/44 –

Trả lời

3

Vì bạn đang lưu trữ các dữ liệu bằng cách năm, có lẽ bạn có thể sử dụng dữ liệu sharded dựa trên năm. Tôi sẽ đề nghị octopus để sử dụng với activerecord.

truy vấn của bạn sẽ trở thành cái gì đó như:

User.using(:year_2012).find(name: xxx) 
+0

viên đá quý này sẽ đặt dữ liệu theo năm trong bảng vật lý khác nhau trên postgreSQL? – newBike

+0

Bạn sẽ phải tự tạo mảnh vỡ. Nhưng có nó sẽ hoạt động như một cá thể cơ sở dữ liệu riêng biệt – usmanali

+0

Cảm ơn bạn tôi sẽ xem xét nó. – newBike

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