2012-05-03 16 views
7

Czy można aktualizować wiele razy za pomocą pojedynczego połączenia za pomocą Sequel?Czy można aktualizować pakiety w Sequel?

Na przykład zrobienie około 200 aktualizacji może zająć kilka minut na moim serwerze, ale jeśli wykuwam pojedyncze zapytanie SQL, to działa w ciągu kilku sekund. Zastanawiam się, czy Sequel mógłby być użyty do sfałszowania tego zapytania SQL, czy nawet lepiej, wykonać całą operację, którą wykonał sam.

+1

Tak, ale to zależy od tego, co dokładnie próbujesz zrobić, i co RDBMS używasz dalej. Podaj więcej informacji, abyśmy mogli Ci lepiej doradzić. –

+0

Używam PostgreSQL i chcę, aby Sequel wydał pojedyncze zapytanie dla wielu aktualizacji, co jestem w stanie zrobić zwykłym SQL. – RooSoft

Odpowiedz

3

Rozwiązanie, które spotkałem, dotyczy metody update_sql. Zamiast wykonywać samą operację, wysyła surowe zapytania SQL. Aby wsypać wiele aktualizacji, po prostu dołącz je; w międzyczasie wywołaj metodę run z wynikowym łańcuchem i wszystko gotowe.

Rozwiązanie do dozowania jest Droższe szybciej niż wiele aktualizacji.

+1

To rozwiązanie jest szybsze niż "wielokrotne aktualizacje" polegające na tym, że wykonujesz tylko jedno rzeczywiste połączenie/podróż do bazy danych dla całego zestawu aktualizacji, w przeciwieństwie do jednej na stronę. Należy pamiętać, że niektóre frameworki wykonują tego rodzaju zachowanie automatycznie - będą przechowywać aktualizacje w pamięci do momentu zatwierdzenia transakcji. Ponadto, możesz "móc" otrzymywać jeszcze większe korzyści, jeśli wiele instrukcji może zostać ponownie zapisanych w instrukcji _one_. –

+2

Może to działać w twoim przypadku, ale nie wszystkie adaptery Sequel obsługują wiele zapytań w trybie Database # run. Sequel w rzeczywistości nie zapewnia niezależnej od adaptera metody, która akceptuje wiele zapytań w jednym ciągu (niektóre karty będą działały z takim ciągiem, inne nie). –

+1

Dla sterownika mysql2, musisz użyć {flagi: :: Mysql2 :: Klient :: MULTI_STATEMENTS} jako opcji podczas łączenia – tothemario

5

Można użyć Datset#importhttp://sequel.jeremyevans.net/rdoc/classes/Sequel/Dataset.html#method-i-import „Wstawia wiele rekordów do powiązanej tabeli. Metoda ta może być stosowana skutecznie wstawić dużą liczbę rekordów do tabeli w jednym zapytaniu, jeśli baza danych obsługuje. Wkładki są automatycznie zawijane w transakcja. "

oto przykład, jak z niego korzystać:

DB = Sequel.connect(...) 
DB[:movies].import([:id, :director, :title, :year], [[1, "Orson Welles", "Citizen Kane", 1941],[2, "Robert Wiene", "Cabinet of Dr. Caligari, The", 1920]]) 
Powiązane problemy