5

Tworzę aplikację Rails, która będzie zawierała wiele "wyliczonych" lub "zagregowanych" danych, tj. Informacji, która jest obliczana przez wykonywanie kosztownych operacji na danych przechowywanych przez użytkownika. Myślę, że potrzebuję jakiegoś sposobu przechowywania tych danych, więc: A. Nie będę stale wykonywać drogich operacji DB, oraz B. Tak, że mogę wypluć "raporty" z ładnymi wykresami w czasie itp. Dla podanych atrybutów.Szyny przechowujące zbiorcze informacje

Zastanawiam się, jaki jest najlepszy sposób realizacji tego? Musiałbym obliczać i zapisywać wartości (numeryczne) dla danego modelu i ich zmiany w czasie. Chcę, aby było to skuteczne i unikaj duplikowania danych. Rekordy zostaną naprawione po utworzeniu, więc nie muszę się martwić o to, że coś się zmieniło, chociaż trzeba to wziąć pod uwagę.

Po prostu zastanawiałem się, jakie jest najczęstsze podejście do tego problemu i jak powinienem go wdrożyć w aplikacji Rails?

Odpowiedz

1

Pracowałem nad podobnym problemem i pracowałem również nad aplikacjami, które zrobiły to w niewłaściwy sposób.

Oto moje najlepsze praktyki zalecenie:

  • przechowywać surowe dane w modelu, nazwijmy to Feed
  • Skonfiguruj stowarzyszenie jeden-na-jednego do innego modelu, który przechowuje wartości obliczone np FeedStats. Może to być również stowarzyszenie jeden do wielu lub wiele do jednego, w zależności od dokładnego przypadku; możesz zindywidualizować niektóre pojedyncze rekordy Feed do pewnego rodzaju agregatu itp.
  • Zachowaj wszystkie oryginalne nieprzetworzone dane. Będzie to niezwykle przydatne, jeśli później chcesz przełączyć obliczenia na inny algorytm i konieczne może być ponowne obliczenie starych danych lub wykrycie błędów w obliczeniach itp.
  • Skonfiguruj obliczenia na podstawie zadania tła, używając narzędzia takie jak Resque (z lub bez Scheduler), DelayedJob lub podobne.

Jeśli możesz być trochę bardziej konkretny i podać przykłady dokładnego problemu, mogę podać kilka bardziej szczegółowych wskazówek. Powodzenia.

+0

Dzięki za odpowiedź, mam kilka modeli, każdy z atrybutami numerycznymi (niektóre kolumny db, niektóre metody obliczania wartości). Chcę zobrazować zmiany w tych okresach. Sądzę, że najprostszą metodą byłoby po prostu wybranie wszystkich wartości z zakresu i buforowanie tego zapytania za pomocą szyn wbudowanych w pamięć podręczną. Zastanawiałem się tylko, czy istnieje standardowa metoda tworzenia takich statystyk? Widziałem ten klejnot, który wygląda wzdłuż właściwych linii: https://github.com/acatighera/statistics - Jeszcze raz dziękuję :) – Fred

+0

Nie natknąłem się na to, ale wygląda interesująco. –