InfluxDB සමඟ වැඩ කිරීමේදී කෝපය, කේවල් කිරීම සහ මානසික අවපීඩනය

InfluxDB සමඟ වැඩ කිරීමේදී කෝපය, කේවල් කිරීම සහ මානසික අවපීඩනය

ඔබ කාල ශ්‍රේණි දත්ත සමුදායක් භාවිතා කරන්නේ නම් (කාලමාලා db, විකි) සංඛ්‍යාලේඛන සහිත වෙබ් අඩවියක් සඳහා ප්‍රධාන ගබඩාව ලෙස, ගැටළුව විසඳීම වෙනුවට ඔබට බොහෝ හිසරදයක් ලබා ගත හැකිය. මම එවැනි දත්ත සමුදායක් භාවිතා කරන ව්‍යාපෘතියක වැඩ කරමින් සිටිමි, සමහර විට InfluxDB, සාකච්ඡා කරනු ඇත, සම්පූර්ණයෙන්ම අනපේක්ෂිත විස්මයන් ඉදිරිපත් කරයි.

වගකීමෙන් යුතුව ඔබ එවන: ලැයිස්තුගත කර ඇති ගැටළු InfluxDB අනුවාදය 1.7.4 සඳහා අදාළ වේ.

ඇයි කාල මාලාව?

ව්‍යාපෘතිය විවිධ blockchains මත ගනුදෙනු නිරීක්ෂණය කිරීම සහ සංඛ්‍යාලේඛන ප්‍රදර්ශනය කිරීමයි. නිශ්චිතවම, අපි ස්ථාවර කාසි විමෝචනය සහ දහනය දෙස බලමු (විකි) මෙම ගනුදෙනු මත පදනම්ව, ඔබට ප්‍රස්ථාර ගොඩනඟා සාරාංශ වගු පෙන්විය යුතුය.

ගනුදෙනු විශ්ලේෂණය කරන අතරතුර, අදහසක් මතු විය: InfluxDB කාල ශ්‍රේණියේ දත්ත ගබඩාව ප්‍රධාන ගබඩාව ලෙස භාවිතා කිරීමට. ගණුදෙනු යනු කාලය තුළ ලක්ෂ්‍ය වන අතර ඒවා කාල ශ්‍රේණියේ ආකෘතියට හොඳින් ගැලපේ.

එකතු කිරීමේ කාර්යයන් ද ඉතා පහසු බව පෙනේ - දිගු කාලයක් සමඟ ප්‍රස්ථාර සැකසීම සඳහා වඩාත් සුදුසුය. පරිශීලකයාට වසරක් සඳහා ප්‍රස්ථාරයක් අවශ්‍ය වන අතර, දත්ත ගබඩාවේ මිනිත්තු පහක කාල රාමුවක් සහිත දත්ත කට්ටලයක් අඩංගු වේ. ඔහුට තිත් ලක්ෂයක් යැවීම අර්ථ විරහිත ය - දිගු සැකසුම් වලට අමතරව, ඒවා තිරයට පවා නොගැලපේ. ඔබට කාල රාමුව වැඩි කිරීම සඳහා ඔබේම ක්‍රියාත්මක කිරීම ලිවිය හැකිය, නැතහොත් Influx තුළ ගොඩනගා ඇති එකතු කිරීමේ කාර්යයන් භාවිතා කරන්න. ඔවුන්ගේ සහය ඇතිව, ඔබට දිනකට දත්ත සමූහගත කර අවශ්‍ය ලකුණු 365 යැවිය හැකිය.

සාමාන්‍යයෙන් මෙට්‍රික් එකතු කිරීම සඳහා එවැනි දත්ත සමුදායන් භාවිතා කිරීම තරමක් ව්‍යාකූල විය. "ප්‍රවාහය" පෝරමයේ ලක්ෂ සංඛ්‍යාත ලක්ෂ්‍ය වලින් සමන්විත සර්වර්, iot උපාංග, සියල්ල නිරීක්ෂණය කිරීම: [<time> - <metric value>]. නමුත් දත්ත සමුදාය විශාල දත්ත ප්‍රවාහයක් සමඟ හොඳින් ක්‍රියා කරන්නේ නම්, කුඩා පරිමාවක් ගැටළු ඇති කළ යුත්තේ ඇයි? මෙය මනසේ තබාගෙන, අපි InfluxDB වැඩට ගත්තෙමු.

InfluxDB හි පහසු තවත් මොනවාද?

සඳහන් කළ එකතු කිරීමේ කාර්යයන් හැරුණු විට, තවත් විශිෂ්ට දෙයක් තිබේ - අඛණ්ඩ විමසුම් (ඩී) මෙය කාලසටහනකට දත්ත සැකසීමට හැකි දත්ත සමුදාය තුළට ගොඩනගා ඇති උපලේඛකයකි. නිදසුනක් වශයෙන්, සෑම පැය 24 කට වරක් ඔබට දවසේ සියලුම වාර්තා කාණ්ඩගත කළ හැකිය, සාමාන්‍යය ගණනය කර ඔබේම බයිසිකල් ලිවීමෙන් තොරව තවත් වගුවක එක් නව ලක්ෂ්‍යයක් වාර්තා කළ හැකිය.

එසේම ඇත රඳවා ගැනීමේ ප්රතිපත්ති (ඩී)-නිශ්චිත කාල සීමාවකට පසු දත්ත මකා දැමීම සැකසීම. උදාහරණයක් ලෙස, ඔබට තත්පරයකට වරක් මිනුම් සමඟ සතියක් සඳහා CPU භාරය ගබඩා කිරීමට අවශ්‍ය වූ විට එය ප්‍රයෝජනවත් වේ, නමුත් මාස කිහිපයක දුරක් එවැනි නිරවද්‍යතාවයක් අවශ්‍ය නොවේ. එවැනි තත්වයක් තුළ, ඔබට මෙය කළ හැකිය:

  1. වෙනත් වගුවකට දත්ත එකතු කිරීම සඳහා අඛණ්ඩ විමසුමක් සාදන්න;
  2. පළමු වගුව සඳහා, එම සතියට වඩා පැරණි ප්‍රමිතික මකා දැමීමේ ප්‍රතිපත්තියක් නිර්වචනය කරන්න.

සහ Influx ස්වාධීනව දත්ත ප්රමාණය අඩු කර අනවශ්ය දේවල් මකා දමනු ඇත.

ගබඩා කළ දත්ත ගැන

බොහෝ දත්ත ගබඩා කර නැත: ගනුදෙනු 70 දහසක් පමණ සහ වෙළඳපල තොරතුරු සමඟ තවත් ලක්ෂ්ය ලක්ෂයක්. නව ඇතුළත් කිරීම් එකතු කිරීම - දිනකට ලකුණු 3000 කට වඩා වැඩි නොවේ. වෙබ් අඩවිය සඳහා ප්‍රමිතික ද ඇත, නමුත් එහි කුඩා දත්ත ඇති අතර, රඳවා ගැනීමේ ප්‍රතිපත්තියට අනුව, ඒවා මාසයකට නොඅඩු කාලයක් ගබඩා කර ඇත.

ගැටළු

සේවාව සංවර්ධනය කිරීමේදී සහ පසුව පරීක්ෂා කිරීමේදී, InfluxDB හි ක්‍රියාකාරිත්වයේ වැඩි වැඩියෙන් තීරණාත්මක ගැටළු මතු විය.

1. දත්ත මකා දැමීම

ගනුදෙනු සමඟ දත්ත මාලාවක් ඇත:

SELECT time, amount, block, symbol FROM transactions WHERE symbol='USDT'

ප්රතිඵලය:

InfluxDB සමඟ වැඩ කිරීමේදී කෝපය, කේවල් කිරීම සහ මානසික අවපීඩනය

මම දත්ත මකා දැමීමට විධානයක් යවමි:

DELETE FROM transactions WHERE symbol=’USDT’

ඊළඟට මම දැනටමත් මකා දැමූ දත්ත ලබා ගැනීමට ඉල්ලීමක් කරමි. සහ හිස් ප්‍රතිචාරයක් වෙනුවට, Influx මකා දැමිය යුතු දත්ත වලින් කොටසක් ලබා දෙයි.

මම සම්පූර්ණ වගුව මකා දැමීමට උත්සාහ කරමි:

DROP MEASUREMENT transactions

මම වගු මකාදැමීම පරීක්ෂා කරමි:

SHOW MEASUREMENTS

මට ලැයිස්තුවේ වගුව නොපෙනේ, නමුත් නව දත්ත විමසුමක් තවමත් එම ගනුදෙනු කට්ටලයම ලබා දෙයි.

මකාදැමීමේ සිද්ධිය හුදකලා නඩුවක් වූ බැවින් ගැටලුව මට ඇති වූයේ එක් වරක් පමණි. නමුත් දත්ත සමුදායේ මෙම හැසිරීම පැහැදිලිවම "නිවැරදි" මෙහෙයුමේ රාමුවට නොගැලපේ. පසුව මම එය github මත විවෘත කර ඇත ටිකට් මෙම මාතෘකාව පිළිබඳ වසරකට පමණ පෙර.

ප්රතිඵලයක් වශයෙන්, සම්පූර්ණ දත්ත සමුදාය මකාදැමීම සහ ප්රතිෂ්ඨාපනය කිරීම උපකාරි විය.

2. පාවෙන ලක්ෂ්ය සංඛ්යා

InfluxDB හි බිල්ට් ශ්‍රිත භාවිතා කරන විට ගණිත ගණනය කිරීම් වල නිරවද්‍යතා දෝෂ ඇත. මෙය අසාමාන්ය දෙයක් නොවේ, නමුත් එය අප්රසන්න ය.

මගේ නඩුවේදී, දත්තවල මූල්‍ය සංරචකයක් ඇති අතර මම එය ඉහළ නිරවද්‍යතාවයකින් සැකසීමට කැමැත්තෙමි. මේ නිසා, අපි අඛණ්ඩ විමසුම් අත්හැරීමට සැලසුම් කරමු.

3. අඛණ්ඩ විමසුම් විවිධ කාල කලාපවලට අනුවර්තනය කළ නොහැක

සේවාවෙහි දෛනික ගනුදෙනු සංඛ්‍යාලේඛන සහිත වගුවක් ඇත. සෑම දිනකම, ඔබ එම දිනය සඳහා සියලුම ගනුදෙනු සමූහගත කළ යුතුය. නමුත් එක් එක් පරිශීලකයාගේ දිනය වෙනස් වේලාවක ආරම්භ වනු ඇත, එබැවින් ගනුදෙනු කට්ටලය වෙනස් වේ. UTC මගින් ඔව් ප්රභේද 37 ක් ඔබට දත්ත එකතු කිරීමට අවශ්‍ය මාරුවීම්.

InfluxDB හි, කාලය අනුව කණ්ඩායම් කරන විට, ඔබට අමතර මාරුවක් නියම කළ හැක, උදාහරණයක් ලෙස මොස්කව් වේලාව සඳහා (UTC+3):

SELECT MEAN("supply") FROM transactions GROUP BY symbol, time(1d, 3h) fill(previous)

නමුත් විමසුම් ප්‍රතිඵලය වැරදි වනු ඇත. කිසියම් හේතුවක් නිසා, දින අනුව කාණ්ඩගත කළ දත්ත 1677 දක්වා ආපසු ආරම්භ වනු ඇත (InfluxDB නිල වශයෙන් මෙම වසරේ සිට කාල පරාසයක් සඳහා සහය දක්වයි):

InfluxDB සමඟ වැඩ කිරීමේදී කෝපය, කේවල් කිරීම සහ මානසික අවපීඩනය

මෙම ගැටලුව විසඳීම සඳහා, අපි තාවකාලිකව UTC+0 වෙත සේවාව මාරු කළෙමු.

4. කාර්ය සාධනය

InfluxDB සහ අනෙකුත් දත්ත සමුදායන් සංසන්දනය කරන බොහෝ මිණුම් සලකුණු අන්තර්ජාලයේ ඇත. බැලූ බැල්මට ඒවා අලෙවිකරණ ද්‍රව්‍ය ලෙස පෙනුනද දැන් මට සිතෙන්නේ ඒවායේ යම් සත්‍යතාවක් ඇති බවයි.

මම මගේ නඩුව ඔබට කියන්නම්.

සේවාව අවසාන දිනය සඳහා සංඛ්‍යාලේඛන ලබා දෙන API ක්‍රමයක් සපයයි. ගණනය කිරීම් සිදු කරන විට, ක්‍රමය පහත විමසුම් සමඟ දත්ත සමුදාය තුන් වරක් විමසයි:

SELECT * FROM coins_info WHERE time <= NOW() GROUP BY symbol ORDER BY time DESC LIMIT 1

SELECT * FROM dominance_info ORDER BY time DESC LIMIT 1

SELECT * FROM transactions WHERE time >= NOW() - 24h ORDER BY time DESC

පැහැදිලි කිරීම:

  1. පළමු ඉල්ලීමේදී, අපි වෙළඳපල දත්ත සමඟ එක් එක් කාසිය සඳහා අවසාන ලකුණු ලබා ගනිමු. මගේ නඩුවේ කාසි අටක් සඳහා ලකුණු අටක්.
  2. දෙවන ඉල්ලීමට අලුත්ම ලකුණු වලින් එකක් ලැබේ.
  3. තුන්වැන්නා පසුගිය පැය XNUMX සඳහා ගනුදෙනු ලැයිස්තුවක් ඉල්ලා සිටියි; ඒවායින් සිය ගණනක් තිබිය හැක.

InfluxDB විසින් විමසුම් වේගවත් කරන ටැග් සහ වේලාව මත පදනම්ව ස්වයංක්‍රීයව දර්ශකයක් ගොඩනඟන බව මට පැහැදිලි කිරීමට ඉඩ දෙන්න. පළමු ඉල්ලීමෙහි සංකේතය ටැග් එකක් වේ.

මම මෙම API ක්‍රමය මත ආතති පරීක්ෂණයක් පවත්වා ඇත. 25 RPS සඳහා, සේවාදායකය CPU හයක සම්පූර්ණ භාරයක් පෙන්නුම් කරයි:

InfluxDB සමඟ වැඩ කිරීමේදී කෝපය, කේවල් කිරීම සහ මානසික අවපීඩනය

ඒ අතරම, NodeJs ක්‍රියාවලිය කිසිසේත්ම බරක් ලබා දුන්නේ නැත.

ක්‍රියාත්මක කිරීමේ වේගය දැනටමත් 7-10 RPS කින් අඩු වී ඇත: එක් සේවාදායකයෙකුට ms 200 කින් ප්‍රතිචාරයක් ලැබිය හැකි නම්, සේවාදායකයින් 10 දෙනෙකුට තත්පරයක් බලා සිටීමට සිදු විය. 25 RPS යනු ස්ථාවරත්වය අත්විඳින ලද සීමාවයි; දෝශ 500 ක් සේවාදායකයින් වෙත ආපසු ලබා දෙන ලදී.

එවැනි කාර්ය සාධනයක් සමඟ අපගේ ව්යාපෘතියේ Influx භාවිතා කළ නොහැක. තව ද: බොහෝ සේවාලාභීන්ට අධීක්‍ෂණය ප්‍රදර්ශනය කළ යුතු ව්‍යාපෘතියක, සමාන ගැටලු මතු විය හැකි අතර ප්‍රමිතික සේවාදායකය අධික ලෙස පටවනු ලැබේ.

නිගමනය

ප්‍රමාණවත් විග්‍රහයකින් තොරව නොදන්නා තාක්‍ෂණයක් ව්‍යාපෘතියක් තුළට ගෙන යා නොහැකි බව ලබාගත් අත්දැකීම් වලින් වැදගත්ම නිගමනයයි. Github හි විවෘත ගැටළු සරලව පරීක්ෂා කිරීම ප්‍රධාන දත්ත ගබඩාව ලෙස InfluxDB තෝරා නොගැනීම සඳහා තොරතුරු සැපයිය හැකිය.

InfluxDB මගේ ව්‍යාපෘතියේ කාර්යයන් සඳහා හොඳින් ගැලපේ, නමුත් ප්‍රායෝගිකව පෙන්වා දී ඇති පරිදි, මෙම දත්ත සමුදාය අවශ්‍යතා සපුරාලන්නේ නැති අතර දෝෂ රාශියක් ඇත.

ඔබට දැනටමත් ව්‍යාපෘති ගබඩාවේ 2.0.0-beta අනුවාදය සොයාගත හැකිය; අපට බලාපොරොත්තු විය හැක්කේ දෙවන අනුවාදයේ සැලකිය යුතු දියුණුවක් ඇති වනු ඇති බවයි. මේ අතරතුර, මම TimescaleDB ප්‍රලේඛනය අධ්‍යයනය කිරීමට යන්නෙමි.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න