Ich habe eine sehr große Redshift-Datenbank, die Milliarden von Zeilen von HTTP-Anforderungsdaten enthält.Redshift: Serializable Isolationsverletzung auf Tabelle
Ich habe eine Tabelle requests
genannt, die einige wichtige Felder hat:
ip_address
city
state
country
ich ein Python-Prozess läuft einmal pro Tag, der alle d ergreift Es handelt sich um Zeilen, die noch nicht geokodiert wurden (keine Informationen zu Stadt, Staat und Land enthalten) und versucht dann, jede IP-Adresse über die Google Geocoding-API zu geocodieren.
Dieser Prozess (Pseudo-Code) sieht wie folgt aus:
for ip_address in ips_to_geocode:
country, state, city = geocode_ip_address(ip_address)
execute_transaction('''
UPDATE requests
SET ip_country = %s, ip_state = %s, ip_city = %s
WHERE ip_address = %s
''')
Wenn dieser Code ausgeführt wird, habe ich oft Fehler wie die folgenden:
psycopg2.InternalError: 1023
DETAIL: Serializable isolation violation on table - 108263, transactions forming the cycle are: 647671, 647682 (pid:23880)
diese
Ich gehe davon aus, weil ich andere haben Prozesse protokolliert ständig HTTP-Anfragen in meine Tabelle, so dass ich beim Versuch, meine UPDATE-Anweisung auszuführen, nicht alle Zeilen mit der IP-Adresse auswählen kann, die ich aktualisieren möchte.
Meine Frage ist: Was kann ich tun, um diese Datensätze auf eine vernünftige Art und Weise zu aktualisieren, die aufhören wird, regelmäßig zu versagen?