Et problem med ordningen er at eventuelle gjentatte linjer ville ha en gjentatt hash; du aldri kunne identifisere når en av disse linjene ble lagt til eller slettet
Veldig godt poeng, men ikke et problem. En gjentatt linje er en duplikat, og alle duplikater blir slettet i det neste trinn av behandlingen. Så ja du har rett, men det er ikke et problem.
"Diff" linken tar meg til en side med en beskrivelse av hva jeg antar er en applikasjon? Det er ingen nedlasting link, er det ingen kode på alle språk ... Hva er det jeg mangler her?
Noen av dere har snakket om byte nivå granularitet. Dette er ikke nødvendig. bare linjenivå granularitet er nødvendig fordi hvis noe på linjen er endret, må hele linjen (rekord) behandles på nytt fordi noen endring innenfor linjen påvirker hele linjen.
Så vi sammenligner linjer med ca 1000 tegn (ingen binære), i to filer (dagens snapshot og yesterdays snapshot) som hver er ca 1m linjer.
Så bruker en sikker hash som SHA256 (MD5 har kollisjoner og er treg ved sammenligning) Jeg kan behandle om 30MB / sek på min HO laptop. Serveren selvfølgelig vil tygge gjennom det mye raskere.
Så hvis filen er rundt et langbord 1GB, tar ca 33sec så gjør alle hases, og lese 1Gb filen ved hjelp av Windows siders minne tar ca 30 sekunder. ikke forferdelige
Nå har vi to rekker av hashs representerer linjene i hver fil. Hvis vi sortere dem, kan vi nå bruke en binær søk, så vi gjenta vår vei gjennom de nye filene hashs jakt etter en kamp i de gamle filene hashs. Hvis vi ikke finner det, er at linjen legges til endringer filen.
Husk at boka linjer (legacy database) er ukjent i alle aspekter. Det er ingen garanti for bestilling av linjer, plassering av endringer, type endringer.
Forslagene med lesing foreward side ved side er bra, men forutsetter at de to filene er i smae orden opp inntil den første endringen. Dette kan ikke bli antatt. De linjer (rader) kan være i hvilken som helst rekkefølge. Også velge en vilkårlig block bryter detaljene for en linje. Ved anvendelsen av denne oppgaven, linjene er uforanderlig.
Fra den gode linken på invrementa lasting: filsammenligningen Capture: Denne metoden er også kjent som snapshot differensial metoden. Denne metoden fungerer ved å holde før og etter bilder av filer som er av interesse for datavarehuset. Records er sammenlignet for å finne endringer, og rekord tastene er i forhold til å finne inserts og sletter. Denne teknikken er mest hensiktsmessig i tilfelle av eksisterende systemer på grunn av det faktum som utløser vanligvis ikke eksisterer og transaksjonslogger er enten ikke-eksisterende eller i et proprietært format. Siden de fleste eldre databaser har noen mekanisme for dumping data i filer, skaper denne teknikken periodiske øyeblikksbilder og sammenligner resultatene til å produsere endre poster. Riktignok alle problemene med statiske fangst er tilstede her. Lagt kompleksitet er innført av utfordringen med å sammenligne hele rader med informasjon og med nøkkel identifikasjon og matching. Denne teknikken er kompleks art og vanligvis ikke ønskelig, men i noen tilfeller kan være den eneste løsningen.
Dette er mest relevant her: Når vi går inn i riket av terabyte datavarehus, vil evnen til å gjenoppbygge datavarehus fra bunnen av på en nattlig basis gå veien for dinosaur. Den logiske og effektiv tilnærming til å oppdatere datavarehuset innebærer noen form for inkrementell oppdatering strategi.
Så jeg antar jeg er på rett spor da? En btree indeksen ville ikke råd til en fordel?