2013-02-08 35 views
6

Buduję pakiet R, którego głównym celem jest usunięcie bólu związanego z zastrzeżoną bazą danych, która wymaga dość złożonych zapytań SQL w celu uzyskania danych .Jak zarządzać połączeniem z bazą danych w pakiecie R

Jako takie, połączenie z serwerem Microsoft SQL Server (uzyskane przez odbcDriverConnect) jest stałą i ważną częścią tego pakietu, ale nie mogę ustalić, jak najlepiej sobie z tym poradzić i mam nadzieję na poradę, jak to powinno być realizowane w R.

Moje obecne myśli są:

  1. Bądź użytkownikowi zapewnić ich prawidłowe połączenie zanim one wywołać dowolną funkcję. Każda funkcja ma wtedy connection jako parametr, który musi zostać przekazany. To obciąża użytkownika.

  2. W każdej funkcji nawiąż połączenie z numerem get.connection(), za każdym razem otrzymasz nowe połączenie. Stare połączenia mogą w naturalny sposób przekroczyć limit czasu, co wydaje się niedbałe.

  3. Jak wyżej, ale za każdym razem zwracaj to samo połączenie. Wydaje się, że nie jest to realna propozycja, ponieważ nie mogę uniemożliwić przerw w łączeniu się przez R. autoReconnect=TRUE, a inne sztuczki, których używałem w różnych językach, wydają się nie mieć żadnego skutku.

W Javie, to pewnie mają DatabaseConnectionPool zaludniony z liczbą połączeń i po prostu chwycić połączeń z i zwrócić je, że basen w miarę potrzeb. Wydaje mi się również, że nie mam problemu z limitem czasu w Javie, kiedy określam autoReconnect=TRUE.

Wszelkie sugestie bardzo doceniane.

Odpowiedz

1

Wygląda na to, że połączenie między drugim i trzecim podejściem jest rozsądnym rozwiązaniem, tj. Uzyskiwaniem tego samego połączenia za każdym razem, jednak przed zwróceniem połączenia można check if it is still opened, w przeciwnym razie utworzyć nowe połączenie.

To jest w zasadzie tak, jakby to ręcznie realizacji autoReconnect=TRUE

2

pool jest pakiet R na łączenie połączeń, takich jak bazy danych. Jeśli chcesz korzystać z pakietu github, spójrz na numer https://github.com/rstudio/pool. W razie potrzeby ponownie użyje lub odtworzy połączenie.

+0

'Pula' działa świetnie! –

Powiązane problemy