ඉන්ටෙර්විව් එකකට ගියා (online)

හෙළයෙක්

Well-known member
  • Apr 26, 2014
    49,355
    100,219
    113
    1. සේට් කරල පස්සෙ ගන්නව. ඒකට ෆිල්ටස් ඕනි නන් රිපෝට් එකේ Query රිසල්ට් ටෙම්පරි ටේබල් එකකට අරගෙන ඒකෙන් ෆිල්ටර් කරනව.
    2. redis-pubsub / websocket / socket.io
    3.
    1. Create DAOSave Interface with save() method​
    2. Create 2 abstract class SQLEntity, NoSQLEntity with implementing above interface and implement save method based on SQL or NO-SQL requirement​
    3. Create other required DAO with extending above abstract classes​
    මේක ඉතින් ෆ්‍රේම්වර්ක් එක අනුව හදන විදියෙ පොඩි පොඩි වෙනස්කම් තියෙයි. ක්‍රමය නන් මේ විදියට තමා කරන්නෙ.​
     

    RealityOfX

    Well-known member
  • Feb 5, 2021
    8,855
    1
    15,177
    113
    උඩ ප්‍රශ්නෙට මම දුන්න උත්තරේ.

    once I looked at the question I see some design patterns involve. it's a guess, so my initial answer was this

    මම පටන් ගත්තේ repository වලින්. මුලින්ම IRepositoryBase interface එකක් හදාගන්නවා SQL වලට. ඉන්ටර්ෆේස් එකක් ගත්තේ DI සිස්ටම් එකට inject කරන්න ඕනේ නිසා. පස්සේ මම මේ රිපෝ බේස් ඉන්ටර්ෆේස් එක ඉම්ප්ලිමන්ට් කරලා RepositoryBase ක්ලාස් එකක් හදනවා. sql පැත්තේ ඩේටා ගන්න මේක හොදටම ඇති.

    මේ විදිහටම no-SQL පැත්තටත් IRepositoryBase interface එකක් හදාගන්නවා. RepositoryBase එකකුත් හදාගන්නවා. මේ දෙකම IOC එකට ඉන්ජෙක්ට් කරන්න පුළුවන් කෙලින්ම.

    දැන් මේ දෙකම තියනවා. අපිට තියෙන්නේ දෙකෙන් එකක් තෝරාගන්න අවශ්‍යතාව අනුව. මම කිව්වා මම සිම්පල් ස්විච් එකක් දාල ඕනේ වෙලාවට මේ දෙකෙන් එකක් තෝරාගෙන අදාළ මෙතඩ් කෝල් කරලා ඩේටා හැඩල් කරනවා කියල. මේක ගොන්ම උත්තරයක් කියල කියනකොටම තේරුනා. එත් මොනවා කරනනද ගිහින් ඉවරයි. උන් කිව්වේ ඔයා දැන් මෙච්චර හොදට වැඩේ කරන ඇවිත් අයි හදිස්සිය කියල. මම ඉන්ටවිව් එක අතෑරියා . ගොඩින් ජාමේ බේරගන්න තමා බැලුවේ ඊට පස්සේ. පස්සේ මම ටයිම් ඉල්ලුව . එයාල ඔකේ එක දුන්න.

    දැන් අපිට ඕනේ අවශ්‍යතාව අනුව රන් ටයිම් ඔබ්ජෙක්ට් හදාගන්න. මොකද අලුතෙන් ඔබ්ජෙක්ට් හද හද ඉන්න බැ මම උන්දින් කිව්වා විදිහට. මොකද මේ ඩේටා සේව් වෙන තැන් , ඩේටා ඇදලා ගන්න තැන් වලදී මේක හරියන්නේ නැ . හදපු ඔබ්ජෙක්ට් තියෙන්න ඕනේ. මට මතක් උනේ Convert.ToBoolean මෙතඩ් එක. මේකේ මොකද වෙන්නේ? අපි int එකක් දාල bool එකක් ගණන්ව.එක තමා Facory patarn eka. ඔය පැටර්න් එක මම ඕනේ තරම් දාල තියෙනවා. මගුල ඕනේ වෙලාවට ඔලුවට එන්නේ නැ . දැන් හරි නේ මම කිව්වා AutoFactory එකක් හදල ඕනේ විදිහට කන්ස්ට්‍රක්ටර් එක කෝල් නොකර අදාල RepositoryBase ඔබ්ජෙක්ට් එක හදාගනන්ව. සරලව කිව්වොත් මට sql බේස් එකට දෙයක් සේව් කරන්න ඕනේ උනොත් AutoFactory එකට parameters පාස් කරලා අදාළ RepositoryBase එක අරන් එකේ ඕනේ කරන මෙතඩ් කෝල් කරනවා. ඒ වගේම තමා no-SQL

    වැඩේ යන්තම් ගොඩ. එතන හිටපු එකෙක් උගේ ලොකු කම පෙන්නන වෙන්න ඕනේ මේ ප්‍රශ්නේ තව අදිනවා. මම ඒ වෙලේ මේ මගුල අතැරලා දැම්මා.

    උ දැම්මා ප්‍රශ්නයක්. දැන් රන් ටයිම් එකේ මේ සිස්ටම් දෙක අතර ඩේටා පාස් කරලා සේව් හෝ මොකක් හරි ඩේටා බේස් ට්‍රාන්සක්ෂන් එකක් කරන්න ඕනේ උනොත් මොකද කරන්නේ කියල. මම කිව්වා මම දන්නේ නැ කියල. පස්සේ කිව්වා ඔයා දැන් ෆැක්ටරි එකෙන් හදන ඔබ්ජෙක්ට් ගැන හිතන්න කියල.

    එකට උත්තරේ හරි ලේසි. ඒ වෙලාවේ ඔලුවට එන්නේ නැ බන්. අපි IOC එකට ඉන්ජෙක්ට් කරන කොට ලයිෆ් ටයිම් එක Singleton කරාම ඔබ්ජෙට් එක අවසාන වෙනකන්ම තියනවා. දැන් ප්‍රශ්නයක් නැනේ. අපි AutoFactory එකෙන් ගන්න object මෙමරි එකේ තියනවා. ඕනේ වෙලවට අරන් පාවිච්චි කරන්න තියෙන්නේ. මගේ උඩ ස්විච් මෙතඩ් එකට ගියා නම් එන්නේ අලුත් ඔබ්ජෙක් එකක්. එක දැනට asp.net Core DI pipe Line එකට ඉන්ජෙක්ට් වෙලා තියන ඉනටෆෙස් එකට අදාළ ඔබ්ජෙක්ට් නෙමේ. එකයි මගේ මුල් එකේ තිබ්බ වරද
    honda knowledge ekak awa meken.

    Mama demma eke okedi kale NoSql wala connection class eka lazy singleton walin call karanawa startup ekedi. eakedi Container ekak initially hadagannawa singleton widiyata connection eka call karala. a container eka DI waladi ona ona controller athule use karanna puluwan.

    me wage

    await _cosmosDb._container.CreateItemAsync(cosmosUser);

    meke mokakhari awlak thiyanawa neda, mata sure na loku experience ekak me petten na, mama kisima thenaka mewa initial design walata involve wela na mekath kale pet project eke.
     
    • Love
    Reactions: HAneo

    හෙළයෙක්

    Well-known member
  • Apr 26, 2014
    49,355
    100,219
    113
    උ දැම්මා ප්‍රශ්නයක්. දැන් රන් ටයිම් එකේ මේ සිස්ටම් දෙක අතර ඩේටා පාස් කරලා සේව් හෝ මොකක් හරි ඩේටා බේස් ට්‍රාන්සක්ෂන් එකක් කරන්න ඕනේ උනොත් මොකද කරන්නේ කියල. මම කිව්වා මම දන්නේ නැ කියල. පස්සේ කිව්වා ඔයා දැන් ෆැක්ටරි එකෙන් හදන ඔබ්ජෙක්ට් ගැන හිතන්න කියල.

    එකට උත්තරේ හරි ලේසි. ඒ වෙලාවේ ඔලුවට එන්නේ නැ බන්. අපි IOC එකට ඉන්ජෙක්ට් කරන කොට ලයිෆ් ටයිම් එක Singleton කරාම ඔබ්ජෙට් එක අවසාන වෙනකන්ම තියනවා. දැන් ප්‍රශ්නයක් නැනේ. අපි AutoFactory එකෙන් ගන්න object මෙමරි එකේ තියනවා. ඕනේ වෙලවට අරන් පාවිච්චි කරන්න තියෙන්නේ. මගේ උඩ ස්විච් මෙතඩ් එකට ගියා නම් එන්නේ අලුත් ඔබ්ජෙක් එකක්. එක දැනට asp.net Core DI pipe Line එකට ඉන්ජෙක්ට් වෙලා තියන ඉනටෆෙස් එකට අදාළ ඔබ්ජෙක්ට් නෙමේ. එකයි මගේ මුල් එකේ තිබ්බ වරද
    මල්ටි සෙශන් අවොත් ඩෙඩ්ලොක් වෙන්න පුළුවන් නේද සින්ගල්ටන් කරාම?
    උබ කරල තියෙන විදිය හරි. කරන්න ඕනි එකෙ ඔබ්ජෙක්ට් එක සෙශන් එකකට යුනික් කරන එක. ඒකට ඔබ්ජෙක්ට් එක සෙශන් ස්කෝප් එකට දාල ඒකෙන් ගත්ත නන් හරි කියල හිතෙනව.
    සෙශන් හැන්ඩ්ලින් නැත්තන් කරන්න ඕනි පූල් එකකින් ගන්න එක කියල හිතෙන්නෙ. Mysql connector එක වැඩ කරන විදියට.
     
    • Love
    Reactions: HAneo

    HAneo

    Well-known member
  • Jan 30, 2007
    12,970
    29,168
    113
    Homagama
    honda knowledge ekak awa meken.

    Mama demma eke okedi kale NoSql wala connection class eka lazy singleton walin call karanawa startup ekedi. eakedi Container ekak initially hadagannawa singleton widiyata connection eka call karala. a container eka DI waladi ona ona controller athule use karanna puluwan.

    me wage

    await _cosmosDb._container.CreateItemAsync(cosmosUser);

    meke mokakhari awlak thiyanawa neda, mata sure na loku experience ekak me petten na, mama kisima thenaka mewa initial design walata involve wela na mekath kale pet project eke.
    await _cosmosDb._container.CreateItemAsync(cosmosUser);
    prashne thiyenne methana
    Api balanna one simple POCO class ekak wagema complex Object ekakuth save karaganna
    othanadi Object map karaganna amaruyi api Pattarn ekak haraha yawwe nathnam. mokada pattarn ekakadi
    apita puluwan kelinma Save nokara madadi podi changes karala save ekata yawanna.

    Like repository pattern and UOW (Unit of work) pattern. me case eka nam UOW dakkawa yanna one na . but harima widihata liyanawa nam UOW danna one loku process ekakata. wade thiyenne interviw ekak ne ban. api code eka liyanawa nam oka goda daganna puluwan lesiyen

    මල්ටි සෙශන් අවොත් ඩෙඩ්ලොක් වෙන්න පුළුවන් නේද සින්ගල්ටන් කරාම?
    උබ කරල තියෙන විදිය හරි. කරන්න ඕනි එකෙ ඔබ්ජෙක්ට් එක සෙශන් එකකට යුනික් කරන එක. ඒකට ඔබ්ජෙක්ට් එක සෙශන් ස්කෝප් එකට දාල ඒකෙන් ගත්ත නන් හරි කියල හිතෙනව.
    සෙශන් හැන්ඩ්ලින් නැත්තන් කරන්න ඕනි පූල් එකකින් ගන්න එක කියල හිතෙන්නෙ. Mysql connector එක වැඩ කරන විදියට.
    සින්ගල්ටන් ඩෙඩ් ලෝක සමනය දෙයක්
    අපි වොරි වෙන්න දෙයක් නැ Async විදිහට Task හරියට ඉම්පිමෙන්ට් කරලා තියේ නම්. ඒ පාට එක මේකේ මම කියන්න ගියේ නැ. මට මතක විදිහට මෙහෙමයි. Task එකකින් දැනට ත්‍රෙඩ් පුල් එකේ available ත්‍රෙඩ් එකකට වැඩේ දෙනවනේ. ග්ලෝබල් ස්කෝප් නිසා තනි ඔබ්ජෙක් එකයි. එත් අපි එකේ මෙතඩ් කෝල් කරන්නේ. ඒ මෙතඩ් එක ඈතුලේ මේ ඩේටා බේස් කෝල් යන්නේ. අන්න ඒ මෙතඩ් එක තමා Task එකකින් පුල් එකට දෙන්නේ. අපි Getwaiter.Result ගත්තොත් ඩෙඩ් ලෝක වෙනවා සුවර්. එත් අපි wait කරලා ගත්තොත් ඊට වඩා වෙනස් විදිහක් වෙන්නේ.

    wait එකෙන් වෙන්නේ මචන් අපේ ඩේටා බේස් කෝල් එක ත්‍රෙඩ් පුල් එකේ available ත්‍රෙඩ් එකකට දෙනවා. එයා වැඩේ වෙන්න දාල ආයි ස්ටේටස් available කරගන්නවා. වැඩේ ඉවර් උනාම කෝල් බැක් එක calling thread එකට අරන් දෙනවා result එකත් එක්ක. මේකෙදි කිසිම ත්‍රෙඩ් එකක් occupied වෙන්නේ නැ , ඒ නිසා කිසිම ත්‍රෙඩ් එකක් lock කරගෙන ඉන්නේ නැ .
    ------ Post added on May 11, 2021 at 2:55 AM
     

    හෙළයෙක්

    Well-known member
  • Apr 26, 2014
    49,355
    100,219
    113
    await _cosmosDb._container.CreateItemAsync(cosmosUser);
    prashne thiyenne methana
    Api balanna one simple POCO class ekak wagema complex Object ekakuth save karaganna
    othanadi Object map karaganna amaruyi api Pattarn ekak haraha yawwe nathnam. mokada pattarn ekakadi
    apita puluwan kelinma Save nokara madadi podi changes karala save ekata yawanna.

    Like repository pattern and UOW (Unit of work) pattern. me case eka nam UOW dakkawa yanna one na . but harima widihata liyanawa nam UOW danna one loku process ekakata. wade thiyenne interviw ekak ne ban. api code eka liyanawa nam oka goda daganna puluwan lesiyen


    සින්ගල්ටන් ඩෙඩ් ලෝක සමනය දෙයක්
    අපි වොරි වෙන්න දෙයක් නැ Async විදිහට Task හරියට ඉම්පිමෙන්ට් කරලා තියේ නම්. ඒ පාට එක මේකේ මම කියන්න ගියේ නැ. මට මතක විදිහට මෙහෙමයි. Task එකකින් දැනට ත්‍රෙඩ් පුල් එකේ available ත්‍රෙඩ් එකකට වැඩේ දෙනවනේ. ග්ලෝබල් ස්කෝප් නිසා තනි ඔබ්ජෙක් එකයි. එත් අපි එකේ මෙතඩ් කෝල් කරන්නේ. ඒ මෙතඩ් එක ඈතුලේ මේ ඩේටා බේස් කෝල් යන්නේ. අන්න ඒ මෙතඩ් එක තමා Task එකකින් පුල් එකට දෙන්නේ. අපි Getwaiter.Result ගත්තොත් ඩෙඩ් ලෝක වෙනවා සුවර්. එත් අපි wait කරලා ගත්තොත් ඊට වඩා වෙනස් විදිහක් වෙන්නේ.

    wait එකෙන් වෙන්නේ මචන් අපේ ඩේටා බේස් කෝල් එක ත්‍රෙඩ් පුල් එකේ available ත්‍රෙඩ් එකකට දෙනවා. එයා වැඩේ වෙන්න දාල ආයි ස්ටේටස් available කරගන්නවා. වැඩේ ඉවර් උනාම කෝල් බැක් එක calling thread එකට අරන් දෙනවා result එකත් එක්ක. මේකෙදි කිසිම ත්‍රෙඩ් එකක් occupied වෙන්නේ නැ , ඒ නිසා කිසිම ත්‍රෙඩ් එකක් lock කරගෙන ඉන්නේ නැ .
    ------ Post added on May 11, 2021 at 2:55 AM
    async විදියට යනව නන් ඩෙඩ් ලොක් වෙන්නෙ නෑ. ඒක හරි.
     
    • Love
    Reactions: HAneo

    Anonymous_Abstract

    Well-known member
  • Aug 7, 2018
    6,036
    4,570
    113
    Messier 87
    1 - cache ekak use karala hashing key eka date eka dala save karanava. Db eketh save venava cache eketh save venava.retrive karana kota cache eka date base karala retrive karanna
     

    saja

    Well-known member
  • Jan 8, 2007
    16,207
    2
    10,805
    113
    Home Sweet Home
    1) අපිට පුළුවන් දවස් ගානේ සේල්ස් රෙපොර්ට් එක හදලා සමරි එකක් වෙනම තැනක ගහලා තියන්න

    too much workload , the solution is to optimize the time out query

    2. we don't like to use load balancers - so how about batch processing

    3) backend services need to use both SQL and NO-SQL DataBases. high demand data on No-SQL and low demand and reporting data on SQL. design a strategy to accomplish this task

    create a middle tire with using design patterns like abstract factory (this is just a wild guess)

    පලවෙනි ප්‍රශ්නේට උත්තරේ මම දෙන්නම්. මගේ උත්තරේ හරි. එක්පිරියන්ස් එකත් එක්ක දුන්නේ උත්තරේ.

    how i Approach
    ------------------------
    මම මගේ පලවෙනි ජොබ් එකේදී ඔය වගේ දෙකට මුණ දුන්නා. තඩි බැන්කින් සිස්ටම් එකක්. ඔඩිට් රිපෝට් එක එන්න යනවා සැහෙන වෙලාවක්. progress 4gl තමා තිබ්බේ. හැබැයි ටයිම් Out එකක් ගියේ නැ . මගේ ඊලග එක උනේ අපි ලොකු ඩේටා ප්‍රමාණයක් කන්ට්‍රෝලර් එක ඇතුලට ගණන්ව. අරගෙන PDF එකක් හදලා දෙනක්ටෝට MVC controller එක හිර වෙනවා ඇති කියල. එත් අනිවා Error එකක් පනින්න ඕනේ. මම මුලින් කිව්වේ ඒක . පස්සේ මටම තේරුනා ගොන් උත්තරයක් කියලා

    පස්සේ ඉන්ටවිවී කරන එකා ඇහුව ඕපන් මයින්ඩ් එකෙක්න් උත්තර දෙන්න කියල. පස්සේ මට ඔලුවට අවා සින් එක.
    අපිට පුළුවන් දවස් ගානේ සේල්ස් රෙපොර්ට් එක හදලා සමරි එකක් වෙනම තැනක ගහලා තියන්න.
    එහෙම මාසෙම ගහපු ඒවා අන්තිම දවසේ අර සමරි ටේබල් එකෙන් අරන් දුන්නම ඉවරයි. කෙස් ක්ලෝස් .

    මේ අයිඩියා එක අවේ මම අපේ කම්පැනි එකක සර්වර් සයිඩ් එකකට ලොග් සිස්ටම් එකක් හැදුවා. කනෙක්ට් වෙන ඩිවයිස් වලට අදාලව ලොග් වදින්න ඕනේ. සති දෙකයි ලොග් එක හිර වෙනවා. රෙකෝඩ් වැඩි. පස්සේ මම ඩේටා බේස් ශාර්ඩ් කරා ශාඩ් කි එක ඩෙඩ් එක දාල. එකෙන් උනේ දවස ගානේ වෙනම ශාඩ් එකක වදින්නේ එදා දවසේ ලෝග්ස්. පරණ ලොග් බලලා ශාඩ් නොඩ් අයින් කරනවා. මෙන්න මේක මතක තිබ්බ නිසා තම උත්තරේ දුන්නේ
     
    • Love
    Reactions: HAneo

    HAneo

    Well-known member
  • Jan 30, 2007
    12,970
    29,168
    113
    Homagama
    1) අපිට පුළුවන් දවස් ගානේ සේල්ස් රෙපොර්ට් එක හදලා සමරි එකක් වෙනම තැනක ගහලා තියන්න

    too much workload , the solution is to optimize the time out query

    2. we don't like to use load balancers - so how about batch processing

    3) backend services need to use both SQL and NO-SQL DataBases. high demand data on No-SQL and low demand and reporting data on SQL. design a strategy to accomplish this task

    create a middle tire with using design patterns like abstract factory (this is just a wild guess)
    too much workload, the solution is to optimize the time out query
    Already optimized(they said that). Think about 100 mil records of Financial data to be processed into a single figure. like that. we can offload the task to a separate entity to do the summarization daily by scaling up horizontally.

    batch processing will do the work but not in one second (by 1 second they mean the solution with less time I think ).

    abstract factory it is. but need to combine repository patterns otherwise we can do simple crud but not extreme queries and bindings. if you think about concurrency and separate the BL for greater scenarios will require a Unit of work pattern for sure.
     
    • Love
    Reactions: saja