8

fBetter Praxis für große Größe Tabelle auf Ruby on Rails 4/ActiveBessere Praxis für enorme Größe der Tabelle auf Ruby on Rails 4/Active

Wie kann ich ein big table im postgreSQL mit Active Record on Rails partitionieren 4

Ich bevorzuge PostgreSQL oder andere RDBMS, weil ich es in MongoDB versuchte. Es ist sehr langsam.

Ist Rails 4 Unterstützung gute Lösung für eine ganze große Tabelle?

(meinem Fall: mehr als 50 billions von Datensätzen, die Größe ist etwa 20TB)

Datenbeschreibung

Es gibt eine User Tabelle mit name, personal_data, year Felder aus.

Die Daten können durch geteilt werden und die Daten werden gleichmäßig aufgeteilt. mehrere Modell zu erstellen, wie User_1950, User_2001,..., User_2015

Ich möchte partition ganze Daten von year

Es gibt zwei näherte ich denken kann

    Ideen

    Ich denke, es not practical ist

  • aufgeteilt in verschiedene physical table in der gleichen Datenbank. (sharding?)
  • aufgeteilt in verschiedene physical database auf den verschiedenen Datenbanken. (Konnte es funktioniert gut mit Rails)

Ich möchte die Lösung kompatibel mit Active Record

es wird wie wirken

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

Damit ich nicht egal, wie um auf die partitionierten multiplen Tabellen zuzugreifen.

Soweit ich weiß,

ich ein Juwel partitioned gefunden, aber die unterstützt nicht Rails 4

+2

Verwenden [Erbe] (http://www.postgresql.org/docs/current/static/tutorial-inheritance.html) die Tabellen zu partitionieren:

werden Ihre Anfragen so etwas wie werden http : //www.depesz.com/2015/06/07/partitioning-what-why-how/ –

+0

@a_horse_with_no_name Hallo aber könnte es auch aktive Aufzeichnung auf Schienen unterstützen 4. Es scheint kein Glück darauf zu sein? – newBike

+0

Es sieht so aus, als ob das "partitionierte" Juwel, das du dir angeschaut hast, nun Rails 4 unterstützt https://github.com/fiksu/partitioned/issues/44 –

Antwort

3

Da Sie die Daten von Jahren speichern, vielleicht können Sie sharded Daten verwenden, basierend auf Jahre. Ich würde vorschlagen, octopus für die Verwendung mit ActiveRecord.

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

wird dieses Juwel die Daten nach Jahren in verschiedene physische Tabellen auf postgreSQL stellen? – newBike

+0

Sie müssen selbst Shards erstellen. Aber ja, es soll sich wie eine separate Datenbankinstanz verhalten – usmanali

+0

Danke, ich werde darüber nachdenken. – newBike