RpgSQL — Почему это так медленно?

#sql #r #postgresql

#sql #r #postgresql

Вопрос:

Я пытаюсь получить доступ к моей PostgreSQL-базе данных из R, используя RpgSQL.

Моя база данных очень большая, а запросы довольно сложные. Поэтому я понимаю, что мне нужно немного подождать.

Однако, если я использую pgAdmin III в качестве клиента, запрос занимает, возможно, 5 секунд. Когда я использую RpgSQL, один и тот же запрос буквально занимает целую вечность.

Я не вижу причины для этого, поскольку сервер, а не клиент, должен выполнять работу, верно?

Можете ли вы назвать мне причину и, возможно, решение?

Спасибо!

Комментарии:

1. Вы могли бы попробовать использовать RODBC и посмотреть, будет ли это быстрее. Номер версии RpgSQL 0.1-5 пока не кажется мне очень зрелым.

2. Спасибо. Возможно, вы правы, но RODBC кажется очень сложным в установке (тем более, что у меня нет прав администратора на моем рабочем компьютере — грустно, но это правда)

3. Вы можете создать «User DSN» в Windows, для которого вам не нужны права администратора, с помощью «Настройка источников данных (ODBC)» на панели управления. Ах, но для этого вам нужен драйвер MySQL ODBC, а для установки драйвера требуются права администратора … извините! И вы на самом деле работаете в Windows?

4. Сколько данных вы на самом деле вводите? Возможно, добавьте LIMIT предложение в SQL, чтобы проверить, действительно ли это работает. Вполне возможно, что способ, которым R должен читать / анализировать / декодировать ваши данные в понятные ему вещи, — это то, что занимает все время. Если все остальное не удается, профилируйте свой код, чтобы увидеть, где R занимает все время.

5. Это потому, что он основан на RJDBC.

Ответ №1:

Существует также пакет RPostgreSQL, который активно поддерживается. Поскольку он находится непосредственно поверх API PostgreSQL, он должен быть быстрее, чем переход через ODBC с RODBC.

Вот краткий пример из базы данных, которую я храню дома — она получает тысячу простых строк за десятую долю секунды:

 R> library(RPostgreSQL)
Loading required package: DBI
R> drv <- dbDriver("PostgreSQL")
R> con <- dbConnect(drv, password="....", dbname="beancounter")
R> system.time(res <- dbGetQuery(con,
 >             "select * from fxprices where date >= '2005-01-01' limit 1000")) 
   user  system elapsed 
  0.030   0.000   0.113
R> dim(res)
[1] 1000    8
R>
  

Комментарии:

1. спасибо, Дирк! Я читал, что вы являетесь сопровождающим RPostgreSQL. На самом деле я хотел бы использовать RPostgreSQL, но, похоже, его сложно установить на компьютер с Windows x32 !?