ஹே ஹப்ர்! கட்டுரையின் மொழிபெயர்ப்பை உங்கள் கவனத்திற்கு முன்வைக்கிறேன் பாடநெறி தொடக்கத்தை எதிர்பார்த்து தயாரிக்கப்பட்ட புராக் யாவுஸ், பிரென்னர் ஹெய்ன்ட்ஸ் மற்றும் டென்னி லீ ஆகியோரால் OTUS இலிருந்து.

நமது அனுபவத்தைப் போலவே தரவும் தொடர்ந்து குவிந்து பரிணமித்து வருகிறது. தொடர்ந்து முன்னேற, உலகின் நமது மன மாதிரிகள் புதிய தரவுகளுக்கு ஏற்ப மாற்றியமைக்க வேண்டும், அவற்றில் சில புதிய பரிமாணங்களைக் கொண்டுள்ளன - நமக்கு முன்னர் தெரியாத விஷயங்களைக் கவனிப்பதற்கான புதிய வழிகள். இந்த மன மாதிரிகள், புதிய தகவல்களை நாம் எவ்வாறு வகைப்படுத்துகிறோம் மற்றும் செயலாக்குகிறோம் என்பதைத் தீர்மானிக்கும் விரிதாள்களில் உள்ள திட்டங்களிலிருந்து வேறுபட்டவை அல்ல.
இது நம்மை ஸ்கீமா மேலாண்மை பிரச்சினைக்குக் கொண்டுவருகிறது. வணிக இலக்குகளும் தேவைகளும் காலப்போக்கில் உருவாகும்போது, உங்கள் தரவின் கட்டமைப்பும் அவ்வாறே மாறுகிறது. தரவு மாறும்போது புதிய பரிமாணங்களை அறிமுகப்படுத்துவதை டெல்டா லேக் எளிதாக்குகிறது. பயனர்கள் தங்கள் அட்டவணை ஸ்கீமாக்களை நிர்வகிப்பதற்கான எளிய சொற்பொருள்களை அணுகலாம். இந்த கருவிகளில் பயனர்கள் தங்கள் அட்டவணைகளை பிழைகள் அல்லது தேவையற்ற தரவுகளால் குழப்பமடைவதிலிருந்து பாதுகாக்கும் ஸ்கீமா அமலாக்கம் மற்றும் பொருத்தமான இடங்களில் மதிப்புமிக்க தரவுகளைக் கொண்ட புதிய நெடுவரிசைகளை தானாகவே சேர்க்கும் ஸ்கீமா எவல்யூஷன் ஆகியவை அடங்கும். இந்தக் கட்டுரையில், இந்தக் கருவிகளைப் பயன்படுத்துவதில் ஆழமாக மூழ்குவோம்.
அட்டவணைத் திட்டங்களைப் புரிந்துகொள்வது
அப்பாச்சி ஸ்பார்க்கில் உள்ள ஒவ்வொரு டேட்டாஃப்ரேமும் தரவு வகைகள், நெடுவரிசைகள் மற்றும் மெட்டாடேட்டா போன்ற தரவின் வடிவத்தை வரையறுக்கும் ஒரு ஸ்கீமாவைக் கொண்டுள்ளது. டெல்டா லேக்கில், டேபிள் ஸ்கீமா பரிவர்த்தனை பதிவிற்குள் JSON வடிவத்தில் சேமிக்கப்படுகிறது.
திட்ட அமலாக்கம் என்றால் என்ன?
ஸ்கீமா அமலாக்கம், ஸ்கீமா சரிபார்ப்பு என்றும் அழைக்கப்படுகிறது, இது டெல்டா ஏரியில் உள்ள ஒரு பாதுகாப்பு பொறிமுறையாகும், இது அட்டவணையின் திட்டத்திற்கு இணங்காத பதிவுகளை நிராகரிப்பதன் மூலம் தரவு தரத்தை உறுதி செய்கிறது. முன்பதிவுகளை மட்டுமே ஏற்றுக்கொள்ளும் ஒரு பிரபலமான உணவகத்தில் ஒரு தொகுப்பாளினியைப் போல, அட்டவணையில் உள்ளிடப்பட்ட ஒவ்வொரு தரவு நெடுவரிசையும் எதிர்பார்க்கப்படும் நெடுவரிசைகளின் தொடர்புடைய பட்டியலில் உள்ளதா என்பதை ஸ்கீமா அமலாக்கம் சரிபார்த்து (வேறுவிதமாகக் கூறினால், ஒவ்வொன்றிற்கும் "முன்பதிவு" உள்ளதா) பட்டியலில் இல்லாத நெடுவரிசைகளைக் கொண்ட எந்த பதிவுகளையும் நிராகரிக்கிறது.
திட்ட அமலாக்கம் எவ்வாறு செயல்படுகிறது?
டெல்டா ஏரி, ஸ்கீமா-ஆன்-ரைட் சரிபார்ப்பைப் பயன்படுத்துகிறது, அதாவது ஒரு அட்டவணையில் புதிதாக எழுதும் அனைத்து எழுத்துகளும் எழுதும் நேரத்தில் இலக்கு அட்டவணையின் ஸ்கீமாவுடன் இணக்கத்தன்மைக்காகச் சரிபார்க்கப்படுகின்றன. ஸ்கீமா இணக்கமற்றதாக இருந்தால், டெல்டா ஏரி பரிவர்த்தனையை முழுவதுமாக நிறுத்துகிறது (தரவு எதுவும் எழுதப்படவில்லை) மற்றும் முரண்பாட்டைப் பயனருக்குத் தெரிவிக்க விதிவிலக்கை எழுப்புகிறது.
ஒரு பதிவு அட்டவணையுடன் இணக்கமாக உள்ளதா என்பதைத் தீர்மானிக்க டெல்டா ஏரி பின்வரும் விதிகளைப் பயன்படுத்துகிறது. எழுதப்படும் தரவுச்சட்டம்:
- இலக்கு அட்டவணையின் திட்டத்தில் இல்லாத கூடுதல் நெடுவரிசைகளை இது கொண்டிருக்க முடியாது. மாறாக, உள்வரும் தரவு அட்டவணையில் இருந்து ஒவ்வொரு நெடுவரிசையையும் கொண்டிருக்கவில்லை என்றால் பரவாயில்லை - அந்த நெடுவரிசைகளுக்கு வெறுமனே பூஜ்ய மதிப்புகள் ஒதுக்கப்படும்.
- இலக்கு அட்டவணையில் உள்ள நெடுவரிசை தரவு வகைகளிலிருந்து வேறுபடும் நெடுவரிசை தரவு வகைகளைக் கொண்டிருக்க முடியாது. இலக்கு அட்டவணையில் உள்ள ஒரு நெடுவரிசையில் StringType தரவு இருந்தால், ஆனால் DataFrame இல் உள்ள தொடர்புடைய நெடுவரிசையில் IntegerType தரவு இருந்தால், திட்ட அமலாக்கம் ஒரு விதிவிலக்கை ஏற்படுத்தி எழுதும் செயல்பாடு ஏற்படுவதைத் தடுக்கும்.
- வழக்கில் மட்டும் வேறுபடும் நெடுவரிசைப் பெயர்களைக் கொண்டிருக்க முடியாது. அதாவது, 'Foo' மற்றும் 'foo' எனப் பெயரிடப்பட்ட நெடுவரிசைகளை ஒரே அட்டவணையில் வரையறுக்க முடியாது. ஸ்பார்க்கை கேஸ்-சென்சிட்டிவ் அல்லது கேஸ்-சென்சிட்டிவ் (இயல்புநிலையாக) எனப் பயன்படுத்தலாம் என்றாலும், டெல்டா லேக் கேஸைப் பாதுகாக்கிறது, ஆனால் ஸ்கீமாவைச் சேமிக்கும்போது கேஸ்-சென்சிட்டிவ் ஆகும். நெடுவரிசைத் தகவலைச் சேமித்து மீட்டெடுக்கும்போது பார்க்வெட் கேஸ்-சென்சிட்டிவ் ஆகும். சாத்தியமான பிழைகள், தரவு ஊழல் அல்லது தரவு இழப்பு (டேட்டாபிரிக்ஸில் நாங்கள் தனிப்பட்ட முறையில் அனுபவித்தவை) தவிர்க்க, இந்தக் கட்டுப்பாட்டைச் சேர்க்க முடிவு செய்தோம்.
இதை விளக்குவதற்கு, டெல்டா லேக் அட்டவணையில் புதிதாக உருவாக்கப்பட்ட சில நெடுவரிசைகளைச் சேர்க்க முயற்சிக்கும்போது, அவற்றை ஏற்றுக்கொள்ள இன்னும் உள்ளமைக்கப்படாதபோது, கீழே உள்ள குறியீட்டில் என்ன நடக்கிறது என்பதைப் பார்ப்போம்.
# Сгенерируем DataFrame ссуд, который мы добавим в нашу таблицу Delta Lake
loans = sql("""
SELECT addr_state, CAST(rand(10)*count as bigint) AS count,
CAST(rand(10) * 10000 * count AS double) AS amount
FROM loan_by_state_delta
""")
# Вывести исходную схему DataFrame
original_loans.printSchema()
root
|-- addr_state: string (nullable = true)
|-- count: integer (nullable = true)
# Вывести новую схему DataFrame
loans.printSchema()
root
|-- addr_state: string (nullable = true)
|-- count: integer (nullable = true)
|-- amount: double (nullable = true) # new column
# Попытка добавить новый DataFrame (с новым столбцом) в существующую таблицу
loans.write.format("delta")
.mode("append")
.save(DELTALAKE_PATH)
Returns:
A schema mismatch detected when writing to the Delta table.
To enable schema migration, please set:
'.option("mergeSchema", "true")'
Table schema:
root
-- addr_state: string (nullable = true)
-- count: long (nullable = true)
Data schema:
root
-- addr_state: string (nullable = true)
-- count: long (nullable = true)
-- amount: double (nullable = true)
If Table ACLs are enabled, these options will be ignored. Please use the ALTER TABLE command for changing the schema.புதிய நெடுவரிசைகளைத் தானாகச் சேர்ப்பதற்குப் பதிலாக, டெல்டா லேக் ஒரு திட்டத்தைச் செயல்படுத்தி எழுதுவதை நிறுத்துகிறது. எந்த நெடுவரிசை (அல்லது நெடுவரிசைகளின் தொகுப்புகள்) முரண்பாட்டை ஏற்படுத்துகிறது என்பதைக் கண்டறிய உதவுவதற்காக, ஸ்பார்க் இரண்டு திட்டங்களையும் ஒப்பிட்டுப் பார்க்க ஸ்டாக் டிரேஸிலிருந்து காட்டுகிறது.
திட்டத்தை அமல்படுத்துவதால் என்ன பயன்?
திட்ட அமலாக்கம் என்பது மிகவும் கண்டிப்பான சரிபார்ப்பு என்பதால், உற்பத்தி அல்லது நுகர்வுக்குத் தயாராக இருக்கும் சுத்தமான, முழுமையாக மாற்றப்பட்ட தரவுத்தொகுப்பிற்கு கேட் கீப்பராகப் பயன்படுத்துவதற்கு இது ஒரு சிறந்த கருவியாகும். இது பொதுவாக தரவை நேரடியாக வழங்கும் அட்டவணைகளுக்குப் பயன்படுத்தப்படுகிறது:
- இயந்திர கற்றல் வழிமுறைகள்
- BI டேஷ்போர்டுகள்
- தரவு பகுப்பாய்வு மற்றும் காட்சிப்படுத்தல் கருவிகள்
- கண்டிப்பாக கட்டமைக்கப்பட்ட, கண்டிப்பாக தட்டச்சு செய்யப்பட்ட சொற்பொருள் திட்டங்கள் தேவைப்படும் எந்தவொரு உற்பத்தி அமைப்பும்.
இந்த இறுதித் தடைக்குத் தங்கள் தரவைத் தயாரிக்க, பல பயனர்கள் ஒரு எளிய "மல்டி-ஹாப்" கட்டமைப்பைப் பயன்படுத்துகின்றனர், இது படிப்படியாக தங்கள் அட்டவணைகளில் கட்டமைப்பை அறிமுகப்படுத்துகிறது. மேலும் தகவலுக்கு, நீங்கள் கட்டுரையைப் படிக்கலாம்.
நிச்சயமாக, உங்கள் பைப்லைனில் எங்கும் ஸ்கீமா அமலாக்கத்தைப் பயன்படுத்தலாம், ஆனால் இந்த விஷயத்தில் ஒரு அட்டவணையில் எழுதுவது வெறுப்பாக இருக்கும் என்பதை நினைவில் கொள்ளுங்கள், எடுத்துக்காட்டாக, உள்வரும் தரவுக்கு மற்றொரு நெடுவரிசையைச் சேர்த்ததை நீங்கள் மறந்துவிட்டதால்.
தரவு திரவமாக்கலைத் தடுத்தல்
இந்த கட்டத்தில், இந்த குழப்பம் எதற்காக என்று நீங்கள் யோசித்துக்கொண்டிருக்கலாம்? எல்லாவற்றிற்கும் மேலாக, சில நேரங்களில் எதிர்பாராத "ஸ்கீமா பொருத்தமின்மை" பிழை உங்கள் பணிப்பாய்வில் உங்களைத் தடுமாறச் செய்யலாம், குறிப்பாக நீங்கள் டெல்டா ஏரிக்கு புதியவராக இருந்தால். என்ன நடந்தாலும் எனது டேட்டாஃப்ரேமை எழுதும் வகையில், தேவைக்கேற்ப ஸ்கீமாவை ஏன் மாற்ற அனுமதிக்கக்கூடாது?
"ஒரு அவுன்ஸ் தடுப்பு ஒரு பவுண்டு குணப்படுத்துவதற்கு மதிப்புள்ளது" என்று பழைய பழமொழி கூறுகிறது. ஒரு கட்டத்தில், உங்கள் திட்டத்தை செயல்படுத்த நீங்கள் கவனமாக இல்லாவிட்டால், தரவு வகை இணக்கத்தன்மை சிக்கல்கள் அவற்றின் அசிங்கமான தலைகளை வளர்க்கும் - ஒரே மாதிரியான மூல தரவு மூலங்களில் எட்ஜ் கேஸ்கள், சிதைந்த நெடுவரிசைகள், தவறான மேப்பிங் அல்லது பிற கனவுகள் இருக்கலாம். இந்த எதிரிகளை வாயிலில் நிறுத்துவதே சிறந்த அணுகுமுறை - திட்ட அமலாக்கத்துடன் - அவர்கள் உங்கள் உற்பத்தி குறியீட்டின் இருண்ட ஆழத்தில் பதுங்கியிருக்கத் தொடங்கும் போது, பின்னர் அல்லாமல் திறந்த வெளியில் அவர்களைக் கையாள்வது.
நீங்கள் மாற்றத்தை வெளிப்படையாக அங்கீகரிக்காவிட்டால், உங்கள் அட்டவணையின் திட்டம் மாறாது என்பதை ஸ்கீமா அமலாக்கம் உறுதி செய்கிறது. புதிய நெடுவரிசைகள் அடிக்கடி சேர்க்கப்படும்போது ஏற்படும் தரவு நீர்த்தலை இது தடுக்கிறது, முன்பு மதிப்புமிக்க, சிறிய அட்டவணைகள் தரவு வெள்ளத்தால் அவற்றின் அர்த்தத்தையும் பயனையும் இழக்கின்றன. உங்களை வேண்டுமென்றே இருக்கவும், உயர் தரங்களை அமைக்கவும், உயர் தரத்தை எதிர்பார்க்கவும் ஊக்குவிப்பதன் மூலம், ஸ்கீமா அமலாக்கம் அது செய்ய விரும்பியதைச் சரியாகச் செய்கிறது - ஒருமைப்பாட்டைப் பராமரிக்கவும் உங்கள் அட்டவணைகளை சுத்தமாக வைத்திருக்கவும் உதவுகிறது.
மேலும் பரிசீலித்த பிறகு, நீங்கள் உண்மையிலேயே செய்ய வேண்டும் என்று முடிவு செய்தால் தேவை புதிய நெடுவரிசையைச் சேர்ப்பதில் எந்தப் பிரச்சினையும் இல்லை; ஒரு வரி திருத்தம் கீழே கொடுக்கப்பட்டுள்ளது. தீர்வு ஸ்கீமா பரிணாமம்!
ஸ்கீமா பரிணாமம் என்றால் என்ன?
ஸ்கீமா பரிணாமம் என்பது பயனர்கள் காலப்போக்கில் மாறிவரும் தரவைச் சரிசெய்ய அட்டவணையின் தற்போதைய ஸ்கீமாவை எளிதாக மாற்றியமைக்க அனுமதிக்கும் ஒரு அம்சமாகும். ஒன்று அல்லது அதற்கு மேற்பட்ட புதிய நெடுவரிசைகளைச் சேர்க்க ஸ்கீமாவைத் தானாகவே மாற்றியமைக்க, செருகு அல்லது மீண்டும் எழுதும் செயல்பாடுகளின் போது இது பொதுவாகப் பயன்படுத்தப்படுகிறது.
ஸ்கீமா பரிணாமம் எவ்வாறு செயல்படுகிறது?
முந்தைய பகுதியிலிருந்து எடுத்துக்காட்டைப் பின்பற்றி, ஸ்கீமா இணக்கமின்மை காரணமாக நிராகரிக்கப்பட்ட புதிய நெடுவரிசைகளைச் சேர்க்க டெவலப்பர்கள் ஸ்கீமா பரிணாமத்தை எளிதாகப் பயன்படுத்தலாம். .option('mergeSchema', 'true') உங்கள் ஸ்பார்க் குழுவிற்கு .write или .writeStream.
# Добавьте параметр mergeSchema
loans.write.format("delta")
.option("mergeSchema", "true")
.mode("append")
.save(DELTALAKE_SILVER_PATH)வரைபடத்தைக் காண, பின்வரும் Spark SQL வினவலை இயக்கவும்.
# Создайте график с новым столбцом, чтобы подтвердить, что запись прошла успешно
%sql
SELECT addr_state, sum(`amount`) AS amount
FROM loan_by_state_delta
GROUP BY addr_state
ORDER BY sum(`amount`)
DESC LIMIT 10 
மாற்றாக, நீங்கள் இந்த விருப்பத்தை முழு ஸ்பார்க் அமர்வுக்கும் சேர்ப்பதன் மூலம் அமைக்கலாம் spark.databricks.delta.schema.autoMerge = True ஸ்பார்க் உள்ளமைவில். இருப்பினும், இதை எச்சரிக்கையுடன் பயன்படுத்தவும், ஏனெனில் ஸ்கீமா அமலாக்கம் இனி தற்செயலான ஸ்கீமா முரண்பாடுகள் குறித்து உங்களை எச்சரிக்காது.
கோரிக்கையில் ஒரு அளவுருவைச் சேர்ப்பதன் மூலம் mergeSchemaஎழுதும் பரிவர்த்தனையின் போது, டேட்டாஃப்ரேமில் இருக்கும் ஆனால் இலக்கு அட்டவணையில் இல்லாத அனைத்து நெடுவரிசைகளும் தானாகவே திட்டத்துடன் சேர்க்கப்படும். உள்ளமைக்கப்பட்ட புலங்களையும் சேர்க்கலாம், மேலும் அவை கட்டமைப்பில் உள்ள தொடர்புடைய நெடுவரிசைகளிலும் சேர்க்கப்படும்.
தரவு பொறியாளர்களும் விஞ்ஞானிகளும் இந்த விருப்பத்தைப் பயன்படுத்தி, பழைய நெடுவரிசைகளின் அடிப்படையில் இருக்கும் மாதிரிகளை உடைக்காமல், புதிய நெடுவரிசைகளை (ஒருவேளை சமீபத்தில் கண்காணிக்கப்பட்ட அளவீடு அல்லது இந்த மாதத்திற்கான விற்பனை புள்ளிவிவரங்களின் நெடுவரிசை) தங்கள் தற்போதைய இயந்திர கற்றல் உற்பத்தி அட்டவணைகளில் சேர்க்கலாம்.
அட்டவணைச் செருகல் அல்லது மீண்டும் எழுதும் போது திட்டப் பரிணாம வளர்ச்சியின் ஒரு பகுதியாக பின்வரும் வகையான திட்டப் மாற்றங்கள் அனுமதிக்கப்படுகின்றன:
- புதிய நெடுவரிசைகளைச் சேர்த்தல் (இது மிகவும் பொதுவான சூழ்நிலை)
- NullType -> வேறு எந்த வகையிலிருந்தும் தரவு வகைகளை மாற்றுதல் அல்லது ByteType -> ShortType -> IntegerType இலிருந்து விளம்பரப்படுத்துதல்
ஸ்கீமா பரிணாம வளர்ச்சியில் அனுமதிக்கப்படாத பிற மாற்றங்கள், ஸ்கீமா மற்றும் தரவைச் சேர்ப்பதன் மூலம் மேலெழுத வேண்டும். .option("overwriteSchema", "true")உதாரணமாக, "Foo" நெடுவரிசை முதலில் ஒரு முழு எண்ணாகவும், புதிய ஸ்கீமா ஒரு சர தரவு வகையாகவும் இருந்தால், அனைத்து Parquet (தரவு) கோப்புகளும் மீண்டும் எழுதப்பட வேண்டும். அத்தகைய மாற்றங்களில் பின்வருவன அடங்கும்:
- ஒரு நெடுவரிசையை நீக்குதல்
- ஏற்கனவே உள்ள நெடுவரிசையின் தரவு வகையை மாற்றுதல் (இடத்தில்)
- வழக்கில் மட்டும் வேறுபடும் நெடுவரிசைகளை மறுபெயரிடுதல் (எ.கா. "Foo" மற்றும் "foo")
இறுதியாக, அடுத்த வெளியீடான Spark 3.0 உடன், வெளிப்படையான DDL (ALTER TABLE ஐப் பயன்படுத்தி) முழுமையாக ஆதரிக்கப்படும், இதனால் பயனர்கள் அட்டவணை திட்டங்களில் பின்வரும் செயல்களைச் செய்ய முடியும்:
- நெடுவரிசைகளைச் சேர்த்தல்
- நெடுவரிசை கருத்துகளை மாற்றுதல்
- பரிவர்த்தனை பதிவு தக்கவைப்பு காலத்தை அமைப்பது போன்ற அட்டவணை எவ்வாறு செயல்படுகிறது என்பதை தீர்மானிக்கும் அட்டவணை பண்புகளை அமைத்தல்.
திட்ட பரிணாம வளர்ச்சியின் நன்மை என்ன?
நீங்கள் எப்போது வேண்டுமானாலும் ஸ்கீமா பரிணாமத்தைப் பயன்படுத்தலாம் நோக்கம் உங்கள் அட்டவணையின் ஸ்கீமாவை மாற்றவும் (உங்கள் டேட்டாஃப்ரேமில் இருக்கக்கூடாத நெடுவரிசைகளை தற்செயலாகச் சேர்ப்பதற்கு மாறாக). இது உங்கள் ஸ்கீமாவை நகர்த்துவதற்கான எளிதான வழியாகும், ஏனெனில் இது வெளிப்படையாக அறிவிக்காமல் சரியான நெடுவரிசை பெயர்கள் மற்றும் தரவு வகைகளை தானாகவே சேர்க்கிறது.
முடிவுக்கு
உங்கள் அட்டவணையுடன் பொருந்தாத எந்தவொரு புதிய நெடுவரிசைகள் அல்லது பிற திட்ட மாற்றங்களை திட்ட அமலாக்கம் நிராகரிக்கிறது. இந்த உயர் தரநிலைகளை அமைத்து பராமரிப்பதன் மூலம், ஆய்வாளர்கள் மற்றும் பொறியாளர்கள் தங்கள் தரவு மிக உயர்ந்த அளவிலான ஒருமைப்பாட்டைக் கொண்டுள்ளது என்று நம்பிக்கையுடன் இருக்க முடியும், அதைப் பற்றி தெளிவாகவும் சுருக்கமாகவும் பகுத்தறிந்து, அவர்கள் மிகவும் பயனுள்ள வணிக முடிவுகளை எடுக்க உதவுகிறார்கள்.
மறுபுறம், திட்டத்தின் பரிணாமம் எளிமைப்படுத்துவதன் மூலம் அமலாக்கத்தை நிறைவு செய்கிறது குற்றம் சாட்டப்பட்டது தானியங்கி திட்ட மாற்றங்கள். எல்லாவற்றிற்கும் மேலாக, ஒரு நெடுவரிசையைச் சேர்ப்பது அவ்வளவு கடினமாக இருக்கக்கூடாது.
சுற்று அமலாக்கம் என்பது சுற்று பரிணாம வளர்ச்சியின் யாங்கிலிருந்து யின் வரையிலானது. இந்த அம்சங்கள் ஒன்றாகப் பயன்படுத்தப்பட்டால், சத்தம் அடக்குதல் மற்றும் சமிக்ஞை சரிசெய்தலை முன்னெப்போதையும் விட எளிதாக்குகின்றன.
இந்தக் கட்டுரைக்கு பங்களித்த முகுல் மூர்த்தி மற்றும் பிரணவ் ஆனந்த் ஆகியோருக்கும் நன்றி தெரிவிக்க விரும்புகிறோம்.
இந்தத் தொடரின் பிற கட்டுரைகள்:

தொடர்புடைய இடுகைகள்
ஆதாரம்: www.habr.com
