Een probleem met de regeling is dat elke herhaalde lijnen een herhaalde hash zou hebben; je kon nooit te identificeren wanneer een van deze lijnen werd toegevoegd of verwijderd
Zeer goed punt, maar geen probleem. Een herhaalde lijn is identiek en alle duplicaten worden verwijderd in de volgende trap van de verwerking. Dus ja je hebt gelijk, maar het is geen probleem.
"Diff" link brengt me naar een pagina met een beschrijving van wat ik veronderstel is een applicatie? Er is geen download link, er is geen code in alle talen ... Wat ben ik hier ontbreekt?
Sommigen van jullie hebben gesproken over byteniveau granulariteit. Dit is niet nodig. alleen lijnniveau granulariteit is nodig omdat als er iets op het spel is veranderd, de gehele lijn (record) moet worden opgewerkt schoonmaakt elke verandering binnen de lijn van invloed op de hele lijn.
Dus we het vergelijken lijnen van ca. 1000 tekens (geen binair), in twee bestanden (vandaag momentopname en gisteren snapshot), die elk ongeveer 1 m lijnen.
Dus met behulp van een veilige hash als SHA256 (MD5 heeft botsingen en is langzaam in vergelijking) Ik kan verwerken ongeveer 30MB / sec op mijn HO laptop. De server van de cursus zal kauwen door middel van het een stuk sneller.
Dus als het bestand arond 1GB, dan is het maken van alle hases duurt ongeveer 33sec, en het lezen van 1Gb bestand met behulp van Windows-pagina geheugen duurt ongeveer 30 sec. niet gruwelijke
Nu hebben we twee arrays van hashs die de lijnen in elk bestand. Als we ze sorteren, kunnen we nu gebruik maken van een binary search, dus we herhalen onze weg door de nieuwe bestanden hashs op zoek naar een wedstrijd in de oude bestanden hashs. Als we niet vinden, wordt die lijn toegevoegd aan het bestand verandert.
Houd in gedachten dat het boek van de lijnen (legacy database) onbekend is in elk aspect. Er is geen garantie van de orde van de lijnen, de locatie van de veranderingen, soorten bewegingen.
De suggesties van het lezen foreward pagina per pagina is goed, maar gaat ervan uit dat de twee bestanden zijn in de smae orde omhoog tot aan de eerste verandering. Dit kan niet worden aangenomen. De lijnen (rijen) kan in elke volgorde. Ook het kiezen van een willekeurige blocksize in strijd met de granulariteit van een lijn. Voor de toepassing van deze taak, lijnen zijn onveranderlijk.
Vanaf dat uitstekend link op invrementa laden: Bestand Vergelijking Capture: Deze methode wordt ook wel bekend als de snapshot differentiële methode. Deze methode werkt door het houden van voor en na foto's van de bestanden die van belang zijn voor het datawarehouse. Records worden vergeleken om veranderingen te vinden, en op te nemen toetsen worden vergeleken met inserts en verwijdert vinden. Deze techniek is het meest geschikt in het geval van legacy-systemen te wijten aan het feit dat de triggers meestal niet bestaan en transactielogboeken zijn ofwel niet-bestaand of in een eigen formaat. Aangezien de meeste legacy databases hebben een mechanisme voor het dumpen van gegevens in bestanden, deze techniek zorgt voor periodieke snapshots en vergelijkt vervolgens de resultaten aan verandering platen te produceren. Zeker, alle problemen van statische capture zijn hier aanwezig. Extra complexiteit wordt geïntroduceerd door de uitdaging van het vergelijken van hele rijen van informatie en door de belangrijkste identificatie en matching. Deze techniek is complex van aard en meestal niet wenselijk, maar in sommige gevallen kan de enige oplossing.
Dit is hier het meest relevant: Als we verder in het rijk van terabyte data warehouses, zal de mogelijkheid om de data warehouse te herbouwen vanuit het niets op basis van één nacht de weg van de dinosaurus te gaan. De logische en efficiënte aanpak van het bijwerken van de data warehouse vereist een zekere vorm van tussentijdse update strategie.
Dus ik denk dat ik op de goede weg dan? Een btree index zou een voordeel niet veroorloven?