SQLite භාවිතා කරන බොහෝ පද්ධතිවල, එකවර බහු කාර්යයන් ලියන අවස්ථාවේ "database is locked" යන දෝෂය මතුවේ. මෙය ලියන ප්රතිසංස්කරණය අතර ඇති ගැටළුවක් නිසා සිදුවේ. ලේඛන ලේඛන පද්ධතියේ විශ්වාසනීයතාව වැඩි කිරීම සඳහා, ලේඛකයා නව retry logic එකක්, exponential backoff සහ jitter සමඟ, සකස් කරයි.
SQLite හි පුරෝගාමී timeout එක තත්පර 5 ක් පමණයි. බහු කාර්යයන් එකවර ලියන විට, ලොක් එක නිකුත් වන තුරු කාලය අවසන් වීමෙන් දෝෂයක් එනවා. මෙම ගැටළුව විසඳීමට, කේතයෙහි execute_with_retry ෆංශන් එකක් එකතු කර, ප්රතිපත්ති 5 වාරක්, 0.1 තත්පර පදනම් විලම්බය, 2 ගුණයකින් වැඩිවන විලම්බය, සහ 0‑0.05 තත්පර jitter එකක් එක් කර ඇත.
මෙම retry wrapper එක timeout=30 වැනි අගයක් භාවිතා කර, SQLite එකට ලොක් එක නිකුත් වන තුරු 30 තත්පර ඉදිරියට බලා සිටීමට ඉඩ සලසයි. පසුබැසීමේදී, එකම වේලාවේ බහු කාර්යයන් එකම විලම්බයෙන් නැවත උත්සාහ නොකර, jitter නිසා සුළු වෙනස්කම් ඇතිවීම නිසා "thundering herd" ප්රශ්නයක් දුරුවේ.
තවත් ප්රයෝජනවත් වැඩක් ලෙස, ConnectionPool ක්ලාසයක් හඳුන්වා දී, සමකාලීන සම්බන්ධතා ගණන අඩු කරයි. pool_size=5 ලෙස ආරම්භ කර, අවශ්ය විට සම්බන්ධතා ලබා ගෙන, වැඩ අවසන් වූ පසු නැවත pool එකට දමයි. මෙය ලොක් තරගය තවත් අඩු කරයි.
ශ්රී ලංකාවට ඇති වැදගත්කම
ශ්රී ලංකාවේ බොහෝ තරුණ සංවර්ධකයන්, ස්ථානීය ව්යාපාරික පද්ධති, සහ විශ්වවිද්යාල පර්යේෂණ ව්යාපෘති SQLite භාවිතා කරයි. මෙම retry logic එක ඇතුළත් කිරීමෙන්:
- ආරම්භක පද්ධතිවල දෝෂ අඩු වෙයි, සේවා අඩංගු කාලය වැඩි වේ.
- අධ්යාපන ව්යාපෘතිවල concurrent writes කළ විට, ලොක් ගැටලුව නිසා පරීක්ෂණය නතර නොවෙයි.
- ස්ථානීය startups සඳහා, ක්රමලේඛය ඉතා කාර්යක්ෂමව පවත්වා ගත හැකි නිසා, ව්යාපාරික විශ්වාසය වැඩි වේ.
එසේම, WAL (Write‑Ahead Logging) ක්රමය සක්රිය කිරීමෙන්, ලියාපදිංචි කරන කාලයේ පවා පාරිභෝගිකයන්ට දත්ත කියවීමට අවස්ථාව ලැබේ. මෙය දේශීය සේවාදායකයන්ගේ ප්රතිචාර වේගය වැඩි කරයි.
අවසන් වශයෙන්, retry logic එක, connection pool, සහ WAL මෝඩ් එක එකට භාවිතා කිරීමෙන්, SQLite පදනම් වූ පද්ධතිවල විශ්වාසනීයතාව, කාර්යක්ෂමතාව, හා පරිපාලන පාලනය ඉතා හොඳින් වැඩි කරයි. ඔබේ ව්යාපෘතියේ මේ අංගයන් ඇතුළත් කර, දෝෂ රහිත අනාගතයක් ගොඩනගන්න.