Наиболее эффективный способ узнать, обновлена ли таблица базы данных

Вопрос:

Мне интересно, какой самый эффективный способ узнать, обновлена ли таблица db? Я использую Codeigniter в качестве основы. До сих пор метод, который я рассматривал, — использовать таймер и делать запрос на отправку ajax на бэкэнд каждые 15-20 секунд. Однако, если страница оставлена без дела, разве это не замедлит работу сайта? Есть ли другой способ сделать это или это единственный способ.

Лучший ответ:

Для этого есть несколько методов.

Да, вы могли регулярно проводить опросы, чтобы проверять любые даты обновления в своей базе данных, но несколько других решений направлены на обеспечение более последовательных, принудительных, реактивных обновлений обновлений.

Для Javascript я могу думать о MeteorJS: https://www.meteor.com/

MongoDB предлагает функции хвостовика oplog для мониторинга операций с базами данных в реальном времени: https://www.mongodb.com/blog/post/tailing-mongodb-oplog-sharded-clusters, но для этого требуется осколок кластера.

Некоторые другие механизмы БД могут предоставлять функции для обновления в таблицах, строках или документах. Например, взгляните на RethinkDB (в режиме реального времени): https://www.rethinkdb.com

Другой способ справиться с обновлениями — использовать обмен сообщениями (например, с nodejs/websockets или RabbitMQ, Kafka…), чтобы вы могли информировать своих клиентов о любых обновлениях, выполняемых подключенными внутренними службами.

На самом деле, идеальное обнаружение обновлений базы данных немного сложно реализовать и требует выбора технологий.

Вам придется решить, хотите ли вы пожертвовать работой над алтарем сложности. Если вы ожидаете, что многие пользователи сделают много опросов для многих вещей, вы можете организовать свой проект вокруг более согласованной архитектуры.

Оцените статью
TechArks.Ru
Добавить комментарий

Наиболее эффективный способ группировки данных в кварталах и финансовых годах в R

Вопрос:

У меня есть большая база данных (POY) с данными с 2011 по 2017 год, которая содержит столбец даты. Мне нужно было бы сделать две вещи: дать возможность разделить на кварталы и на финансовый год.
К сожалению, наш финансовый год не работает параллельно с календарными годами, но идет с июля по июнь. Что также означает, что мой четвертый квартал работает с июля по сентябрь.

Я написал код, который, кажется, работает нормально, но кажется довольно длинным (особенно вторая часть). Есть ли у кого-нибудь советы для этого новичка, чтобы сделать его более эффективным?

    #Copy of date column and splitting it in 3 columns for year, month and day
library(tidyr)
POY$Date2 <- POY$Date
POY<-separate(POY, Date2, c("year","month","day"), sep = "-", convert=TRUE)


#Making a quarter variable
POY$quarter[POY$month<=3] <- "Q3"
POY$quarter[POY$month>3 & POY$month <=6] <- "Q4"
POY$quarter[POY$month>6 & POY$month <=9] <- "Q1"
POY$quarter[POY$month>9 & POY$month <=12] <- "Q2"
POY$quarter <- as.factor(POY$quarter)

Для переменной финансового года: она работает с июля по июнь, поэтому:
Июнь’15 должен стать FY1415
Июль’15 должен стать FY1516
Или: Q1 и Q2 в 2015 году должны стать FY1516, тогда как Q3 и Q4 2015 года на самом деле являются FY1415.

    #Making a FY variable
for (i in 1:nrow(POY)) {
if (POY$quarter[i] == "Q1" | POY$quarter[i] == "Q2") {
year1 <- as.character(POY$year[i])
year2 <- as.character(POY$year[i] + 1)
} else {
year1 <- as.character(POY$year[i]- 1)
year2 <- as.character(POY$year[i])
}
POY$FY[i] <- paste0("FY", substr(year1, start=3, stop=4),         substr(year2, start=3, stop=4))
}
POY$FY <- as.factor(POY$FY)
summary(POY$FY)

Какие-либо предложения? Спасибо!

Лучший ответ:

Не уверен, что это было доступно в то время, но пакет lubridate содержит четвертную функцию, которая позволяет создавать столбцы финансового квартала и года.

Документация находится здесь.

Примеры для вашего случая:

x <- ymd("2011-07-01")
quarter(x)
quarter(x, with_year = TRUE)
quarter(x, with_year = TRUE, fiscal_start = 7)

Затем вы можете использовать функцию dplyr и paste для изменения ваших собственных столбцов при создании финансовых кварталов и лет.

Ответ №1

Я думаю, вы могли бы использовать это, чтобы заменить цикл for. Если бы вы предоставили некоторые данные, я мог бы проверить их.

#Making a FY variable
POY$year1 <- as.character(POY$year - 1)
POY$year2 <- as.character(POY$year)

POY$year1[(POY$quarter == "Q1") | (POY$quarter == "Q2")] <-
as.character(POY$year[(POY$quarter == "Q1") |(POY$quarter == "Q2")])

POY$year2[(POY$quarter == "Q1") | (POY$quarter == "Q2")] <-
as.character(POY$year[(POY$quarter == "Q1") | (POY$quarter == "Q2")] + 1)

POY$FY <-
paste0("FY", substr(POY$year1, 3, 4), substr(POY$year2, 3, 4))

POY$FY <- as.factor(POY$FY)
summary(POY$FY)

Ответ №2

Я использовал комбинацию base R, lubridate и dplyr;

# make a blank dataframe with sequential dates ...
df <- data.frame(date = seq (as.Date('2011-07-01'), as.Date('2015-07-01'), by = 'month'))

# similar to original poster, separate year/month/day
df <-
df %>%
separate(col = date, into = c('yr', 'mnth', 'dy'), sep = '-', convert = TRUE, remove = FALSE)

# extract last 2 digits of year
df$yr_small <- strftime(x = df$date, format = '%y', tz = 'GMT')
df$yr_small <- as.numeric(df$yr_small)

# Use dplyr "case_when" to categorise quarters
df <-
df %>%
# make quarters
mutate(
quarter = case_when(
mnth >= 7 & mnth <= 9 ~ 'Q1'
, mnth >= 10 & mnth <= 12 ~ 'Q2'
, mnth >= 1 & mnth <= 3 ~ 'Q3'
, mnth >= 4 & mnth <= 6 ~ 'Q4' ) ) %>%
# ... the financial year is
mutate (
financial_year = case_when(
quarter == 'Q1' | quarter == 'Q2' ~ (yr_small + 1)
, quarter == 'Q3' | quarter == 'Q4' ~ (yr_small) ) )

# final column to make the full financial year start/end
df <- df %>%  mutate (FY = paste('FY',df$financial_year, df$financial_year + 1, sep = '') )

Должен дать вам следующее:

screenshot

Оцените статью
TechArks.Ru
Добавить комментарий