Golang
/* Są dwa serwery PostgreSQL: * PROD - serwer OLTP, * STATS - serwer do długich zapytań analitycznych. Na aktualnym serwerze, w bazie danych prod, znajduje się duża tabela (10Tb) o następującej strukturze: CREATE TABLE profiles( id SERIAL, data JSONB ) W tabeli mogą występować "luki", tzn. niektóre `id` mogą być pominięte. Należy napisać program do kopiowania tabeli profiles z PROD do STATS. Zakłada się, że do pracy z bazami danych będą używane następujące interfejsy: type Row []interface{} type Database interface { // implementacja interfejsu Database może ponownie ustanawiać połączenia // wywołanie SaveRows jest idempotentne io.Closer GetMaxID(ctx context.Context) (uint64, error) LoadRows(ctx context.Context, minID, maxID uint64) ([]Row, error) // [minID, maxID] SaveRows(ctx context.Context, rows []Row) error } func Connect(ctx context.Context, dbname string) (Database, error) // CopyTable // Jeśli full=false, kontynuować transfer danych od miejsca poprzedniego błędu // Jeśli full=true, przenieść wszystkie dane func CopyTable(fromName string, toName string, full bool) error { // ... twój kod } Jeśli przekazana jest opcja `full=false`, program powinien kontynuować transfer danych od miejsca poprzedniego błędu. Jeśli `full=true`, powinien przenieść wszystkie dane. **Podstawowy poziom**: - sekwencyjny transfer danych w jednym strumieniu - odzyskiwanie po błędach (opcja `full=false`) Dodatkowe informacje: - w razie potrzeby można rozbudować interfejs, dodając własne metody - w razie potrzeby można używać bezpośrednio pakietu **database/sql**
Czy można utworzyć indeks tylko na repliki, ale nie na masterze?
Jak uruchomić kontener w Kubernetes bez Registry?
Krótko o produkcji: kto wdraża, kto monitoruje i tak dalej.
Jaki jest skład zespołu pod względem liczebności?
Jaki jest główny język programowania, którego używasz? Czy używasz C++ lub Python?
Co oznaczają skróty KISS i DRY?
Czym są szybkie gry?
Czy słyszałeś coś o wzorcu Transactional Outbox?
Jak działa mapa pod maską w nowych wersjach Go, co się zmieniło?
func main() { defer func() { if r := recover(); r != nil { fmt.Println("odzyskano") } }() defer func() { fmt.Println("odroczenie") }() go func() { fmt.Println("początek goroutine") panic("bum") fmt.Println("koniec goroutine") }() time.Sleep(time.Second) }
Dlaczego zdecydowałeś się zmienić miejsce pracy? Czego szukasz?
Jak zoptymalizować wyszukiwanie w bazie danych? Czym są indeksy i jaka jest ich złożoność?
Jaka jest przewaga Swiss Tables w porównaniu do starej implementacji tablicy haszującej? Ile bitów zajmuje kod haszujący w starej i nowej implementacji?
Czy pracowałeś z architekturą? Opowiedz o kilku rozwiązaniach architektonicznych
Jakie polecenie jest używane do wstawiania wartości do tabeli?
Jak uczynić pamięć stałą (usunąć zależność od liczby unikalnych znaków)?
Jak działa złożony indeks (A, B, C) w zapytaniach?
Jak zmienić semafor Acquire/Lock, aby oczekiwanie można było anulować lub ograniczyć czasowo?
Z jakimi metodologiami rozwoju pracowałeś? Które są najbardziej wygodne?