Я пытаюсь использовать Redshift для приложения Shiny после использования Postgres. До сих пор Redshift превосходил Postgres, за исключением случаев, когда речь шла о панелях мониторинга.
У меня было бы что-то подобное в global.R
, чтобы получить мои данные
driver <- dbDriver("PostgreSQL")
conn <- dbConnect(driver,
host="myhost.rds.amazonaws.com",
user="user",
password="password",
port=5432,
dbname="my_database"
)
query = "select * from customers"
res <- dbSendQuery(conn, query))
dataframe <- fetch(res, n = -1))
Мой подход с Redshift очень похож, за исключением некоторых настроек, которые я взял из здесь
download.file('https://s3.amazonaws.com/redshift-downloads/drivers/jdbc/1.2.12.1017/RedshiftJDBC42-1.2.12.1017.jar','RedshiftJDBC42-1.2.12.1017.jar')
driver <- JDBC("com.amazon.redshift.jdbc42.Driver", "RedshiftJDBC42-1.2.12.1017.jar", identifier.quote="`")
url <- "jdbc:redshift://host.redshift.amazonaws.com:5439/my_db?user=user&password=password"
conn <- dbConnect(driver, url)
query = "select * from customers"
res <- dbSendQuery(conn, query))
dataframe <- fetch(res, n = -1))
Однако, несмотря на то, что я могу выполнять запросы быстрее, когда я нахожусь в сеансе, загрузка данных в Redfift занимает намного больше времени. Я не нашел ничего, чтобы устранить это несоответствие. Я провел несколько тестов
> test_time('redshift')
user system elapsed
30.870 7.236 21.423
> test_time('postgres')
user system elapsed
1.877 0.595 2.577
> test_time('redshift')
user system elapsed
31.137 7.294 22.743
> test_time('postgres')
user system elapsed
1.900 0.520 2.466
Однако я понял, что Postgres требует намного больше времени для выполнения dbSendQuery
, в то время как Redshift был намного быстрее (но, опять же, намного медленнее, когда извлекал результаты в кадр данных). Вот некоторые метрики, которые я собрал
> test_time('postgres')
user system elapsed # dbSendQuery
1.230 1.201 23.708
user system elapsed # fetch
1.795 0.172 2.029
> test_time('redshift')
user system elapsed # dbSendQuery
0.006 0.004 0.091
user system elapsed # fetch
32.723 8.146 23.666
Я просто хочу понять, что происходит за капотом, что заставляет Redshift работать не так, как я ожидал. Я предполагаю, что для преобразования результатов из столбчатой базы данных в ряд данных на основе строки требуется больше времени, чем из традиционной базы данных на основе строк в кадр данных.