Baza danych INSERT OR UPDATE
metody są niewiarygodnie kosztowne, ponieważ baza danych nie może grupować wszystkich zatwierdzeń do zrobienia wszystkiego naraz i musi wykonywać je wiersz po wierszu (transakcje ACID wymuszają to, ponieważ jeśli próbują wykonać wstawkę, a następnie zawiodą, wszystkie inne zapisy w tym zatwierdzeniu również zawiedzie).
Zamiast tego w przypadku dużych operacji zbiorczych zawsze najlepiej jest ustalić, czy rekord zostanie wstawiony lub zaktualizowany przed przekazaniem zatwierdzenia do bazy danych, a następnie wysłaniem 2 transakcji do bazy danych.
Typowe zadanie, które wymagało tej funkcji, mogłoby zmontować dane, które mają być INSERT OR UPDATEd
, a następnie przeszukać tabelę bazy danych dla istniejących kluczy podstawowych. Jeśli klucz podstawowy już istnieje, możesz wysłać go jako UPDATE
, w przeciwnym razie jest to INSERT
. Logika do tego może być łatwo wykonana w komponencie tMap
.
![Insert or Update Job Example](https://i.stack.imgur.com/PKaZY.png)
W tej pracy mamy pewne dane, które chcemy INSERT OR UPDATE
do tabeli bazy danych, która zawiera pewne istniejące wcześniej dane:
![Initially loaded data](https://i.stack.imgur.com/tv6pf.png)
I chcemy dodać następujące dane aby go:
![Insert or Update data](https://i.stack.imgur.com/YnuOL.png)
Zadanie działa poprzez wrzucenie nowych danych do komponentu tHashOutput
, dzięki czemu można go używać wielokrotnie w tym samym zadaniu (po prostu umieszcza je w pamięci lub w dużych instancjach można je buforować na dysk).
Po tej jednej partii danych odczytuje się komponent tHashInput
i bezpośrednio do tMap
. Innym tHashInput
komponent jest wykorzystywany do uruchamiania parametryzowany zapytanie do stołu:
![Parameter Config](https://i.stack.imgur.com/b0A17.png)
można znaleźć this guide to Talend and parameterised queries pożytecznego. Odtąd zwrócone rekordy (czyli tylko te wewnątrz bazy danych) są używane jako odnośniki do tMap
.
ta jest konfigurowane jako INNER JOIN
znaleźć zapisy, które muszą być UPDATED
z odrzuceń z INNER JOIN
być włożona:
![tMap configuration](https://i.stack.imgur.com/V2z9O.png)
Wyjścia te następnie tylko przepływ oddzielić tMySQLOutput
elementom UPDATE
lub INSERT
w razie potrzeby. I w końcu, gdy główne subjob jest kompletne, my commit
zmian.
Czy funkcja Talend ma funkcję "Bulk Load", "Bulk Insert" lub "Bulk Copy"? – RBarryYoung
Sprawdź swój sprzęt. 17 jest żałosny nawet dla pojedynczego gwintowanego pojedynczego słowa SQL. Może twój serwer przypomina bardziej telefon komórkowy lub laptop. Jakie jest opóźnienie między aplikacją a serwerem? – TomTom
Powolność może być spowodowana dowolnym czynnikiem, np. Szybkością sieci między talendem a twoją bazą danych, sposobem, w jaki zadanie jest pisane w talencie, talend ma komponenty ładowania zbiorczego dla serwera sql, ale z normalnymi komponentami serwera sql wydajność, której doświadczasz jest bardzo niska . Sugerowałbym wspomnieć o więcej szczegółów, takich jak to, co jest sql, które są uruchomione, czy jest jakiekolwiek przetwarzanie wykonywane na stronie talé, jakie talend składniki używasz w pracy itp. – garpitmzn