8

fBetter praktyką ogromnej wielkości stołu na Ruby on Rails 4/ActiveRecordLepsze praktyki dla ogromnej wielkości stołu na Ruby on Rails 4/ActiveRecord

Jak mogę podzielić się big table w postgreSQL z Active Record on Rails 4

Preferuję PostgreSQL lub inny RDBMS, ponieważ próbowałem go w MongoDB. Jest bardzo powolny.

Czy Rails 4 obsługuje dobre rozwiązanie dla jednego całego dużego stołu?

(mój przypadek: więcej niż 50 billions zapisów, rozmiar jest o 20TB)

opis danych

Istnieje User tabela zawierająca name, personal_data, year pól.

Dane można podzielić przez year, a dane zostaną podzielone równomiernie.

Pomysły

myślę, że jest not practical tworzenia kilku modelu jak User_1950, User_2001,..., User_2015

Chcę partition całego danych przez year

Istnieją dwa zbliżył mogę myśleć

  • podzielić na różne physical table w tej samej bazie danych. (sharding?)
  • podzielone na różne physical database na różnych bazach danych. (Może to działa dobrze z Rails)

Chcę rozwiązanie może zgodną z Active Record

będzie działać jak

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

Tak, że nie dbam o tym, jak uzyskać dostęp do partycjonowanych wielu tabel.

O ile wiem

znalazłem gem partitioned ale która nie wspiera Rails 4

+2

Użyj [dziedzictwo] (http://www.postgresql.org/docs/current/static/tutorial-inheritance.html) partycjonowanie tabel: http : //www.depesz.com/2015/06/07/partitioning-what-why-how/ –

+0

@a_horse_with_no_name Hi, ale czy może również wspierać aktywny rekord na szynach 4. nie wydaje się na to szczęście? – newBike

+0

Wygląda na to, że 'partycjonowany' klej, który oglądałeś, może obsługiwać Rails 4 teraz https://github.com/fiksu/partitioned/issues/44 –

Odpowiedz

3

Ponieważ jesteś przechowywania danych przez lata, może użyć danych sharded opartych na lat. Sugerowałbym, aby octopus używać z activerecord.

Twoje pytania staną się coś takiego:

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

czy ten klejnot umieści dane po roku w innej fizycznej tabeli na postgreSQL? – newBike

+0

Musisz samodzielnie tworzyć odłamki. Ale tak będzie działać jak oddzielna instancja bazy danych – usmanali

+0

Dziękuję, że to rozważę. – newBike