У меня есть таблица базы данных PostgreSQL, где я храню все системные журналы.В настоящее время в таблице около 5,5 млн строк.Это его структура:
create_table "app_logs", force: :cascade do |t|
t.bigint "admin_id"
t.datetime "received_at"
t.datetime "created_at"
t.datetime "updated_at"
t.string "admin_name"
t.string "event_type"
t.jsonb "event_data"
t.string "trackable_type"
t.integer "trackable_id"
t.index "date(received_at)", name: "index_activity_logs_date_received_at"
t.index ["admin_id"], name: "idx_18712_index_activity_logs_on_admin_id"
t.index ["event_type"], name: "index_activity_logs_on_event_type"
t.index ["received_at"], name: "index_activity_logs_on_received_at"
t.index ["trackable_type", "trackable_id"], name: "index_activity_logs_on_trackable_type_and_trackable_id"
end
И вот как я пытаюсь извлечь данные из таблицы (и попытка заканчивается ошибкой - слишком долго, чтобы отвечать / возвращать данные):
@data = AppLog
.by_event_type(params[:event_type])
.by_admin(params[:admin_id])
.by_date_from(params[:logs_from])
.by_date_to(params[:logs_to])
.page(params[:page]).per(100)
.order('received_at DESC')
Могу ли я управлять такой структурой с помощью Rails + PostgreSQL (и надлежащей индексации) или было бы более подходящим (и масштабируемым) сосредоточиться на стороннем решении, таком как Elastic?