మీ డెల్టా ఫీడ్ ఆలస్యంగా వచ్చిన కమిట్లను కోల్పోతుంది: నమ్మదగిన కర్సర్ నిర్మించండి
ఒక వరుస ఆలస్యంగా వచ్చింది ఎందుకంటే నీటి గుర్తు కమిట్ సరిహద్దు కాదు. వైఫల్యాన్ని అనుసరించి, తర్వాత కవరేజ్, సరిహద్దు, నిలుపుదల మరియు సురక్షిత పునఃప్రారంభాన్ని నిర్వచించండి.
ఇది నేను రెండు వేర్వేరు ఇంజిన్లలో రెండుసార్లు చూసిన వైఫల్యం. ఒక ఎగుమతి 10:00కి నడుస్తుంది మరియు తాను చూసిన అత్యధిక చివరి-మార్పు సమయ ముద్రను నమోదు చేస్తుంది. 09:58కి ప్రారంభమైన ఒక లావాదేవీ ఇంకా తెరిచి ఉంది, 10:03కి కమిట్ అవుతుంది మరియు తాను ప్రారంభమైన క్షణపు సమయ ముద్రను కలిగి ఉంటుంది. తదుపరి ఎగుమతి 10:00 కంటే కొత్త వరుసలను మాత్రమే అడుగుతుంది మరియు దాన్ని ఎప్పటికీ చూడదు. బదిలీ పరిమాణం అద్భుతంగా ఉంది మరియు డేటా తప్పు.
ఒక వరుసను కోల్పోయిన ఎగుమతిని అనుసరించండి
SQL కాదు, సంఘటనల క్రమాన్ని అనుసరించండి. లావాదేవీ ప్రారంభమైనప్పుడు అప్లికేషన్ వరుస మార్పు సమయాన్ని వ్రాస్తుంది, కమిట్ అయినప్పుడు కాదు. ఆ లావాదేవీ ఇంకా తెరిచి ఉన్నప్పుడు ఎగుమతిదారు గోడ-గడియార నీటి గుర్తును చదువుతాడు. తర్వాత లావాదేవీ నిల్వ చేసిన నీటి గుర్తు కంటే పాత మార్పు సమయంతో కమిట్ అవుతుంది. వినియోగదారు తదుపరి బ్యాచ్ నీటి గుర్తు తర్వాత ప్రారంభమవుతుంది, కాబట్టి వరుస కర్సర్ వెనుక ఉంటుంది మరియు మళ్లీ ఎప్పటికీ ఎంపిక చేయబడదు.
ఏదీ లోపాన్ని నమోదు చేయదు, ఎందుకంటే ఏదీ విఫలం కాలేదు. ఇదే ఈ వర్గపు బగ్లను ఖరీదైనవిగా చేస్తుంది: డెల్టా ఫీడ్ వేగంగా ఉంటుంది, వరుసల సంఖ్య నమ్మదగినట్లు కనిపిస్తుంది, మరియు పోయిన వరుస వారాల తర్వాత ఎవరూ తిరిగి సృష్టించలేని సమన్వయ టికెట్గా బయటపడుతుంది.
క్రమ సంఖ్యలకు మరో కారణంతో అదే ఆకారపు లోపం ఉంది. ఏకరీతి ID విలువలు కేటాయించిన క్రమాన్ని చెబుతుంది, లావాదేవీలు కమిట్ అయిన క్రమాన్ని కాదు. తక్కువ సంఖ్య తీసుకున్న లావాదేవీ ఎక్కువ సంఖ్య తీసుకున్న దాని తర్వాత కమిట్ అవ్వవచ్చు, కాబట్టి కేటాయింపు క్రమం ఆధారిత కర్సర్ కూడా రంధ్రం వదిలి ఉంచవచ్చు.
ఫీడ్ ఇవ్వాల్సిన ఐదు హామీలు
రవాణాను ఎంచుకునే ముందు మూల వ్యవస్థ నుండి ఐదు నిబంధనల ఒప్పందాన్ని అడగండి. ఏదైనా నిబంధన లేకపోతే మీ దగ్గర మార్పు ఫీడ్ కాదు, ఒక ఊహ ఉంది.
- కవరేజ్: చేరికలు, నవీకరణలు మరియు తొలగింపులు, ప్రతిదీ వర్తింపజేయడానికి అవసరమైన స్థిర కీతో.
- సరిహద్దు: కర్సర్ విలువ అర్థం ఏమిటి మరియు స్థిరమైన బ్యాచ్లో ఏమి ఉంటుంది.
- స్థిరత్వం: సరిపోలని మూల స్థితులను కలపకుండా సంబంధిత పట్టికలు ఎలా చదవబడతాయి.
- నిలుపుదల: డిస్కనెక్ట్ అయిన వినియోగదారు తన నిల్వ చేసిన స్థానం నుండి ఎంతకాలం పునఃప్రారంభించగలడు.
- పునఃప్రారంభం: ఆ స్థానం ఇక చెల్లుబాటు కానప్పుడు మద్దతు ఉన్న పూర్తి స్నాప్షాట్.
మద్దతు ఉన్న యంత్రాంగం ఐదింటినీ నెరవేర్చగలదు. SQL Server యొక్క మార్పు ట్రాకింగ్ డాక్యుమెంటేషన్ ఒక నిర్దిష్ట ప్రచురిత ఉదాహరణ: ఇది కనీస చెల్లుబాటు సంస్కరణను నిర్వచిస్తుంది, మార్పులతో పాటు తొలగింపులను నమోదు చేస్తుంది, మరియు ధృవీకరణ, సంస్కరణ స్వాధీనం మరియు సంబంధిత మార్పు ప్రశ్నలను కలిపే స్నాప్షాట్ లావాదేవీని వివరిస్తుంది. ఇది మూలం నుండి ఏమి కోరాలో ఉదాహరణ, మరో ఇంజిన్లో అతికించగల వాక్యనిర్మాణం కాదు.
చెక్పాయింట్ను పైప్లైన్లో భాగంగా రూపకల్పన చేయండి
వినియోగదారు నిల్వ చేసిన స్థానమే నిజమైన స్థితి యంత్రం, కాబట్టి అలాగే రాయండి. బ్యాచ్ను ఇప్పటికే వర్తింపజేసి లక్ష్య లావాదేవీని కమిట్ చేసిన పని ప్రవాహం ద్వారానే కర్సర్ ముందుకు సాగగలదు.
cursor = durable_checkpoint() # last fully applied position
batch = extract(cursor, upper_bound) # one consistent batch
apply(batch) # idempotent at the target
commit()
checkpoint(batch.upper_bound) # only now
బట్వాడా సగంలో విఫలమైతే కొత్త మూల స్థానాన్ని కల్పించకుండా అదే బ్యాచ్ను సమన్వయం చేయండి. మరింత కొత్త ఎగువ సరిహద్దుతో తిరిగి సంగ్రహించడమే పాక్షిక వినియోగాన్ని శాశ్వత అంతరంగా మార్చే మార్గం. అద్దపు నియమం మరో వైపు కూడా వర్తిస్తుంది: లక్ష్యం వద్ద ఇడెంపోటెంట్ వినియోగం నకళ్లను నిరోధిస్తుంది మరియు సంగ్రహణ ఎప్పుడూ చూడని మార్పు కోసం ఏమీ చేయదు.
తొలగింపులకు నమోదులు కావాలి, ముగింపులు కాదు
ఇంకా ఉన్న వరుసలను పోల్చడం ఏ కీలు మాయమయ్యాయో వినియోగదారుకు చెప్పలేదు. తొలగింపులను ఎప్పటికీ నమోదు చేయని మూలం మీకు రెండు అసంపూర్ణ ఎంపికలను వదిలిస్తుంది: భేదం కోసం సరిపడా కాలం కీ చరిత్ర ఉంచడం, లేదా షెడ్యూల్ ప్రకారం స్పష్టమైన పూర్తి సమన్వయాన్ని అమలు చేయడం. రెండూ ఖర్చుతో కూడిన రూపకల్పన నిర్ణయాలు, ఎవరూ యాజమాన్యం తీసుకోకపోతే ఏదీ ఉండదు.
నిలుపుదల కూడా అదే రకమైన నిర్ణయం. ప్రతి మద్దతు ఉన్న మార్పు ఫీడ్కు ఒక విండో ఉంటుంది; దాన్ని ఒప్పందంలో ప్రకటించి, వినియోగదారు చెక్పాయింట్ దానికి దగ్గరవుతున్నప్పుడు హెచ్చరించండి. రెండు వారాల అంతరాయం తర్వాత మేల్కొనే వినియోగదారు నిశ్శబ్దంగా పాక్షిక బ్యాచ్ పొందడం కంటే స్పష్టమైన "పునఃప్రారంభం అవసరం" లోపాన్ని చదవాలి.
తర్వాత డెల్టా విలువైనదేనా అని కొలవండి
ప్రతి కీ మరియు హాష్ను పోల్చడానికి తిరిగి వెళ్లడం కొన్నిసార్లు సరైనది, మరియు దాని ఖర్చు తెలుసుకోవడం విలువైనది. మీరు ఇంకా ప్రతి వరుస గురించి సమాచారాన్ని బదిలీ చేస్తారు, హాష్లు పట్టికల అంతటా స్థిరమైన స్నాప్షాట్ ఇవ్వవు, మరియు హాష్ పథకం ప్రాతినిధ్యం మరియు ఘర్షణల గురించి తన సొంత ప్రశ్నలను తెస్తుంది. ధృవీకరించగల సరిహద్దుతో తక్కువ బైట్లే లక్ష్యం; కమిట్ అయిన మార్పును నిశ్శబ్దంగా డ్రాప్ చేసే తక్కువ బైట్లు డెల్టా కాదు.
చివరి-మార్పు నిలువు వరుస ఒక సూచన. ఆలస్య కమిట్, తొలగింపు మరియు దీర్ఘ అంతరాయాన్ని దాటిన కర్సర్ ఒక ఒప్పందం.