របៀបលុបការជជែក និងលុបសារក្នុងភាពមិនស៊ីសង្វាក់គ្នា។

ជារឿយៗ អ្នកប្រើប្រាស់ការជជែកជាអក្សរមានបំណងប្រាថ្នាចង់លុបការឆ្លើយឆ្លងចាស់ទាំងអស់ ដោយសារវាបានបាត់បង់ភាពពាក់ព័ន្ធរបស់វា និងយកកន្លែងទំនេរមិនចាំបាច់។ ទន្ទឹមនឹងនោះ ការព្យាយាមធ្វើវាតាមរយៈចំណុចប្រទាក់កម្មវិធីមិនអនុញ្ញាតឱ្យវាធ្វើនោះទេ។ អ្វីដែលត្រូវធ្វើក្នុងស្ថានភាពនេះហើយតើវាអាចទៅរួចទេដើម្បីអនុវត្តការសម្អាត?

គំនិតជជែក

Chat in Discord សំដៅលើប៉ុស្តិ៍នីមួយៗ។ ពួកវា​ត្រូវ​បាន​បែង​ចែក​ជា​សំឡេង​និង​អត្ថបទ​ដោយ​ផ្អែក​លើ​ប្រភេទ​វិធី​ទំនាក់ទំនង​ដែល​បាន​ប្រើ។

ធាតុជាមូលដ្ឋាននៃការធ្វើការនៅក្នុង Discord គឺជាម៉ាស៊ីនមេដែលបង្កើតឡើងដោយអ្នកប្រើប្រាស់។ បន្ទាប់ពីនេះ វាមានលទ្ធភាពបង្កើតប៉ុស្តិ៍ចំនួនគ្មានដែនកំណត់នៃប្រភេទទាំងពីររួចហើយ។

ជម្រះការជជែកនៅក្នុង Discord

វាត្រូវតែនិយាយភ្លាមៗថាកម្មវិធីមិនផ្តល់ឱ្យអ្នកប្រើប្រាស់នូវឧបករណ៍សម្រាប់ការលុបសារទាំងអស់ដែលបានប្រមូលផ្តុំនៅក្នុងឆានែលភ្លាមៗនោះទេ។ ការលុបគឺអាចធ្វើទៅបានសម្រាប់តែកំណត់ត្រាបុគ្គល (សារ) ប៉ុណ្ណោះ។ ទោះយ៉ាងណាក៏ដោយមានវិធីមួយដើម្បីបង្កើនល្បឿនដំណើរការសម្អាត។ យើងកំពុងនិយាយអំពីពាក្យដូចជា "ប្រតិកម្ម" ពោលគឺការឆ្លើយតបរបស់អ្នកចូលរួមផ្សេងទៀតក្នុងការសន្ទនាចំពោះសារដែលបានបង្ហោះ។

ដើម្បីលុបប្រតិកម្មទាំងអស់ដែលមាននៅក្នុងការជជែក នីតិវិធីខាងក្រោមត្រូវបានផ្តល់ជូន៖

  • ចូលទៅកាន់កម្មវិធី Discord;
  • ជ្រើសរើសឆានែលដែលអ្នកចាប់អារម្មណ៍;
  • នៅជ្រុងខាងស្តាំនៃសារដែលបានជ្រើសរើស ចុចលើរូបតំណាង "សញ្ញា"។
  • ជ្រើសរើសជម្រើស "លុបប្រតិកម្មទាំងអស់" ពីម៉ឺនុយទម្លាក់ចុះ។

ជាការពិតណាស់ តាមរបៀបនេះ វាមិនអាចទៅរួចទេក្នុងការសម្អាតសារទាំងអស់ដោយចុចតែម្តង ប៉ុន្តែវានឹងកាត់បន្ថយពេលវេលាដែលត្រូវការសម្រាប់ការសម្អាតពេញលេញ។ សាររបស់អ្នកចូលរួមការសន្ទនាខ្លួនឯងនឹងត្រូវលុបដោយដៃម្តងមួយៗ។

នេះទាមទារ៖

  • ចូលទៅកាន់កម្មវិធី;
  • ជ្រើសរើសឆានែលដែលអ្នកចាប់អារម្មណ៍;
  • នៅជាប់នឹងសារនីមួយៗ ចុចលើរូបតំណាងពោះវៀនធំ។
  • ជ្រើសរើសជម្រើស "លុប" ពីម៉ឺនុយទម្លាក់ចុះ។

អ្នកក៏អាចលុបដោយជ្រើសរើសអត្ថបទនៃសារដោយប្រើប៊ូតុងស្តាំហើយបន្ទាប់មកចុចលើជម្រើសសកម្មភាពដែលបានស្នើឡើង "លុប" ។

ប្រសិនបើតម្រូវការសម្រាប់ឆានែលបាត់ អ្នកគ្រាន់តែអាចលុបវាបាន ហើយវានឹងត្រូវការការចុចគ្រាប់ចុចពីរបីគ្រាប់ប៉ុណ្ណោះ។ ដើម្បីធ្វើដូចនេះអ្នកត្រូវអនុវត្តសំណុំនៃសកម្មភាពដូចខាងក្រោម:

  • ចូលទៅកាន់កម្មវិធី;
  • ជ្រើសរើសឆានែលដែលអ្នកចាប់អារម្មណ៍;
  • ចូលទៅកាន់ផ្នែក "ម៉ឺនុយ" ឬចុចខាងស្តាំ;
  • ពីបញ្ជីសកម្មភាពដែលបានស្នើសូមជ្រើសរើសជម្រើស "លុបឆានែល" ។

ដូច្នេះ វាអាចលុបទាំង Channel ខ្លួនឯង និងធាតុនៅក្នុងនោះ។ ទោះបីជានីតិវិធីចុងក្រោយតម្រូវឱ្យមានការខាតបង់ពេលវេលាជាក់លាក់ក៏ដោយ។

អំពីកម្មវិធីខ្លួនឯង

កម្មវិធី Discord ត្រូវបានរចនាឡើងដើម្បីរៀបចំទំនាក់ទំនងជាសំឡេងរវាងអ្នកលេងហ្គេមអនឡាញ។ ជាការពិតណាស់ សេវាកម្មនេះក៏ផ្តល់នូវសមត្ថភាពទំនាក់ទំនងអត្ថបទស្តង់ដារផងដែរ ប៉ុន្តែវាត្រូវតែត្រូវបានទទួលស្គាល់ថាបណ្តាញអត្ថបទរបស់កម្មវិធីគឺទាបជាងអ្នកផ្ញើសារភ្លាមៗទាក់ទងនឹងមុខងារ។ វាត្រូវតែត្រូវបានទទួលស្គាល់ថាគម្រោង Discord មានគោលបំណងជាចម្បងទៅលើអ្នកលេងហ្គេម។

  • ការបកប្រែ

ជម្លោះបន្តកើនឡើងលឿនជាងអ្វីដែលយើងរំពឹងទុក ក៏ដូចជាមាតិកាដែលបង្កើតឡើងដោយអ្នកប្រើប្រាស់ដែរ។ អ្នកប្រើប្រាស់កាន់តែច្រើន សារកាន់តែច្រើននៅក្នុងការជជែក។ នៅខែកក្កដា យើងបានប្រកាសសារចំនួន 40 លានក្នុងមួយថ្ងៃ ហើយក្នុងខែធ្នូ យើងបានប្រកាស 100 លាន ហើយនៅពាក់កណ្តាលខែមករា យើងបានឆ្លងកាត់ 120 លាន។ ភ្លាមៗនោះ យើងបានសម្រេចចិត្តរក្សាទុកប្រវត្តិជជែកជារៀងរហូត ដូច្នេះអ្នកប្រើប្រាស់អាចត្រលប់មកវិញនៅពេលណាក៏បាន និងចូលប្រើទិន្នន័យរបស់ពួកគេពីគ្រប់ឧបករណ៍។ . នេះគឺជាទិន្នន័យជាច្រើន លំហូរ និងបរិមាណដែលកំពុងកើនឡើង ហើយអ្វីៗទាំងអស់ត្រូវតែអាចចូលប្រើប្រាស់បាន។ តើ​យើង​ធ្វើ​បែប​នេះ​ដោយ​របៀប​ណា? កាសាន់ដ្រា!

តើយើងបានធ្វើអ្វី

កំណែដំបូងនៃ Discord ត្រូវបានសរសេរក្នុងរយៈពេលតិចជាងពីរខែនៅដើមឆ្នាំ 2015 ។ ប្រហែលជា DBMS ដ៏ល្អបំផុតមួយសម្រាប់ការធ្វើឡើងវិញលឿនគឺ MongoDB ។ អ្វីគ្រប់យ៉ាងនៅក្នុង Discord ត្រូវបានរក្សាទុកយ៉ាងពិសេសនៅក្នុងសំណុំចម្លង MongoDB តែមួយ ប៉ុន្តែយើងក៏កំពុងរៀបចំអ្វីៗគ្រប់យ៉ាងដើម្បីងាយស្រួលក្នុងការធ្វើចំណាកស្រុកទៅកាន់មូលដ្ឋានទិន្នន័យថ្មី (យើងដឹងថាយើងនឹងមិនប្រើ MongoDB sharding ដោយសារតែភាពស្មុគស្មាញ និងមិនស្គាល់ស្ថេរភាពរបស់វា)។ តាមពិតទៅ វាជាផ្នែកមួយនៃវប្បធម៌ក្រុមហ៊ុនរបស់យើង៖ អភិវឌ្ឍយ៉ាងឆាប់រហ័សដើម្បីសាកល្បងលក្ខណៈពិសេសផលិតផលថ្មី ប៉ុន្តែតែងតែមានគោលបំណងសម្រាប់ដំណោះស្រាយដែលអាចទុកចិត្តបានជាងនេះ។

សារ​ត្រូវ​បាន​រក្សា​ទុក​ក្នុង​បណ្តុំ MongoDB ដែល​មាន​សន្ទស្សន៍​ផ្សំ​តែ​មួយ​នៅ​លើ channel_id និង created_at ។ ប្រហែលខែវិច្ឆិកា ឆ្នាំ 2015 យើងបានឈានដល់ចំណុចសំខាន់នៃសារ 100 លាននៅក្នុងមូលដ្ឋានទិន្នន័យ ហើយបន្ទាប់មកយើងចាប់ផ្តើមយល់ពីបញ្ហាដែលកំពុងរង់ចាំយើង៖ ទិន្នន័យ និងលិបិក្រមលែងសមនឹង RAM ហើយការពន្យារពេលបានក្លាយជាមិនអាចទាយទុកជាមុនបាន។ ដល់ពេលធ្វើចំណាកស្រុកទៅ DBMS ដែលសមរម្យជាង។

ការជ្រើសរើស DBMS ត្រឹមត្រូវ។

មុននឹងជ្រើសរើស DBMS ថ្មី យើងត្រូវស្វែងយល់ពីគំរូអាន/សរសេរដែលមានស្រាប់ និងមូលហេតុដែលមានបញ្ហាជាមួយដំណោះស្រាយបច្ចុប្បន្ន។
  • វាច្បាស់ណាស់ថាប្រតិបត្តិការអានគឺចៃដន្យសុទ្ធសាធ ហើយសមាមាត្រអាន/សរសេរគឺប្រហែល 50/50។
  • ម៉ាស៊ីនមេជជែកជាសំឡេងធ្ងន់ៗ ស្ទើរតែគ្មានសារ។ នោះគឺពួកគេបានផ្ញើសារមួយឬពីររៀងរាល់ពីរបីថ្ងៃម្តង។ ក្នុងមួយឆ្នាំ ម៉ាស៊ីនមេនៃប្រភេទនេះទំនងជាមិនឈានដល់ 1000 សារទេ។ បញ្ហាគឺថា បើទោះបីជាសារមួយចំនួនតូចបែបនេះក៏ដោយ ទិន្នន័យនេះកាន់តែពិបាកក្នុងការបញ្ជូនទៅកាន់អ្នកប្រើប្រាស់។ គ្រាន់តែបញ្ជូនសារចំនួន 50 ទៅកាន់អ្នកប្រើប្រាស់អាចបណ្តាលឱ្យមានការរកមើលថាសចៃដន្យជាច្រើន ដែលបណ្តាលឱ្យមានការបណ្តេញចេញពីឃ្លាំងសម្ងាត់ថាស។
  • ម៉ាស៊ីនមេជជែកជាអក្សរឯកជនដ៏ធ្ងន់របស់ Discord ផ្ញើសារក្នុងបរិមាណសមរម្យ ដោយងាយធ្លាក់ចូលទៅក្នុងចន្លោះពី 100k ទៅ 1 លានសារក្នុងមួយឆ្នាំ។ ជាធម្មតាពួកគេសុំតែទិន្នន័យចុងក្រោយបង្អស់ប៉ុណ្ណោះ។ បញ្ហាគឺថាជាធម្មតាម៉ាស៊ីនមេទាំងនេះមានអ្នកចូលរួមតិចជាង 100 នាក់ ដូច្នេះអត្រាសំណើទិន្នន័យយឺត ហើយវាមិនទំនងនៅក្នុងឃ្លាំងសម្ងាត់ថាសទេ។
  • ម៉ាស៊ីនមេ Discord សាធារណៈធំផ្ញើសារជាច្រើន។ មានសមាជិករាប់ពាន់នាក់បង្ហោះសាររាប់ពាន់ដងក្នុងមួយថ្ងៃ។ វាងាយស្រួលក្នុងការទទួលបានសាររាប់លានក្នុងមួយឆ្នាំ។ ពួកគេស្ទើរតែតែងតែស្នើសុំសារដែលបានផ្ញើនៅក្នុងម៉ោងចុងក្រោយ ហើយរឿងនេះកើតឡើងជាញឹកញាប់។ ដូច្នេះ ទិន្នន័យជាធម្មតាស្ថិតនៅក្នុងឃ្លាំងសម្ងាត់ថាស។
  • យើងបានដឹងថានៅឆ្នាំខាងមុខនេះ នឹងមានវិធីជាច្រើនទៀតសម្រាប់អ្នកប្រើប្រាស់ដើម្បីបង្កើតការអានដោយចៃដន្យ រួមទាំងសមត្ថភាពក្នុងការមើលការលើកឡើងរបស់ពួកគេក្នុងរយៈពេល 30 ថ្ងៃចុងក្រោយ ហើយបន្ទាប់មកចូលទៅកាន់ចំណុចនោះក្នុងប្រវត្តិសាស្ត្រ ការមើល និងលោតទៅការបង្ហោះដែលបានខ្ទាស់ និង ការស្វែងរកអត្ថបទពេញ។ មធ្យោបាយទាំងអស់នេះគឺជាការអានដោយចៃដន្យកាន់តែច្រើន!
បន្ទាប់មកយើងកំណត់តម្រូវការរបស់យើង៖
  • លទ្ធភាពធ្វើមាត្រដ្ឋានលីនេអ៊ែរ- យើងមិនចង់កែប្រែការសម្រេចចិត្តនៅពេលក្រោយ ឬផ្ទេរទិន្នន័យដោយដៃទៅ shard មួយផ្សេងទៀតទេ។
  • ការអត់ធ្មត់កំហុសដោយស្វ័យប្រវត្តិ- យើងចូលចិត្តគេងនៅពេលយប់ ហើយបង្កើត Discord ជាការព្យាបាលដោយខ្លួនឯងតាមដែលអាចធ្វើទៅបាន។
  • ការគាំទ្រតិចតួច- វាគួរតែដំណើរការភ្លាមៗនៅពេលយើងដំឡើងវា។ យើងគ្រាន់តែតម្រូវឱ្យបន្ថែមថ្នាំងបន្ថែមទៀតនៅពេលដែលទិន្នន័យកើនឡើង។
  • បញ្ជាក់ក្នុងការងារ- យើងចូលចិត្តសាកល្បងបច្ចេកវិទ្យាថ្មី ប៉ុន្តែមិនមែនថ្មីពេកទេ។
  • ការសម្តែងដែលអាចទស្សន៍ទាយបាន។- សារត្រូវបានផ្ញើមកយើងប្រសិនបើពេលវេលាឆ្លើយតប API ក្នុង 95% នៃករណីលើសពី 80 ms ។ យើង​ក៏​មិន​ចង់​មាន​ការ​ដោះស្រាយ​ជាមួយ​នឹង​ការ​រក្សា​ទុក​សារ​នៅ​ក្នុង Redis ឬ Memcached ។
  • មិនមែនជាហាងប្លុកទេ។- ការសរសេរសាររាប់ពាន់ក្នុងមួយវិនាទីនឹងមិនដំណើរការល្អទេ ប្រសិនបើយើងត្រូវបន្ត deserialize blobs និងបន្ថែមទិន្នន័យទៅពួកគេ។
  • ប្រភព​បើក​ចំហ- យើងជឿថាយើងគ្រប់គ្រងជោគវាសនាផ្ទាល់ខ្លួនរបស់យើងហើយមិនចង់ពឹងផ្អែកលើក្រុមហ៊ុនភាគីទីបីទេ។
Cassandra បានក្លាយជា DBMS តែមួយគត់ដែលបំពេញតម្រូវការទាំងអស់របស់យើង។ យើងអាចបន្ថែមថ្នាំងបានយ៉ាងសាមញ្ញនៅពេលធ្វើមាត្រដ្ឋាន ហើយវាទប់ទល់នឹងការបាត់បង់ថ្នាំងដោយគ្មានផលប៉ះពាល់លើកម្មវិធី។ ក្រុមហ៊ុនធំៗដូចជា Netflix និង Apple មានថ្នាំង Cassandra រាប់ពាន់។ ទិន្នន័យដែលពាក់ព័ន្ធត្រូវបានរក្សាទុកដោយចំហៀងនៅលើថាស ដែលអនុញ្ញាតឱ្យរកមើលតិចតួចបំផុត និងការចែកចាយងាយស្រួលនៅទូទាំងចង្កោម។ វាត្រូវបានថែរក្សាដោយ DataStax ប៉ុន្តែជាប្រភពបើកចំហ និងជំរុញដោយសហគមន៍។

ដោយបានធ្វើការជ្រើសរើស វាចាំបាច់ដើម្បីបញ្ជាក់ថាវាពិតជាត្រឹមត្រូវណាស់។

ការធ្វើគំរូទិន្នន័យ

មធ្យោបាយដ៏ល្អបំផុតដើម្បីពិពណ៌នាអំពី Cassandra ទៅកាន់មនុស្សថ្មីគឺអក្សរកាត់ KKV ។ អក្សរ "K" ពីរមានគន្លឹះសំខាន់។ "K" ដំបូងគឺជាគ្រាប់ចុចភាគថាស។ វាជួយកំណត់ថាតើថ្នាំងណាដែលទិន្នន័យរស់នៅ និងកន្លែងដែលត្រូវស្វែងរកវានៅលើថាស។ មានជួរជាច្រើននៅក្នុងភាគថាស ហើយជួរដេកជាក់លាក់មួយនៅក្នុងភាគថាសត្រូវបានកំណត់ដោយ "K" ទីពីរ - គ្រាប់ចុចចង្កោម។ វាដើរតួជាសោចម្បងនៅក្នុងភាគថាស ហើយកំណត់ពីរបៀបដែលជួរដេកត្រូវបានតម្រៀប។ អ្នកអាចគិតពីផ្នែកមួយជាវចនានុក្រមដែលបានបញ្ជាទិញ។ គុណភាពទាំងអស់នេះបានរួមគ្នាអនុញ្ញាតឱ្យបង្កើតគំរូទិន្នន័យដ៏មានឥទ្ធិពល។

សូមចាំថាសារនៅក្នុង MongoDB ត្រូវបានធ្វើលិបិក្រមដោយប្រើ channel_id និង created_at ? channel_id បានក្លាយជា partition key ពីព្រោះសារទាំងអស់ដំណើរការក្នុង channel ប៉ុន្តែ created_at មិនបង្កើត clustering key បានល្អទេ ព្រោះសារពីរអាចត្រូវបានបង្កើតក្នុងពេលតែមួយ។ ជាសំណាងល្អ រាល់ ID នៅក្នុង Discord គឺពិតជាត្រូវបានបង្កើតនៅក្នុង Snowflake មានន័យថាវាត្រូវបានតម្រៀបតាមកាលប្បវត្តិ។ ដូច្នេះពួកគេអាចប្រើបាន។ សោចម្បងបានក្លាយជា (channel_id, message_id) ដែល message_id គឺ Snowflake ។ នេះមានន័យថានៅពេលដែលយើងផ្ទុកឆានែល យើងអាចប្រាប់ Cassandra នូវជួរពិតប្រាកដដែលត្រូវរកមើលសារ។

នេះគឺជាដ្យាក្រាមសាមញ្ញសម្រាប់តារាងសាររបស់យើង (វារំលងប្រហែល 10 ជួរ)។

បង្កើតសារ TABLE (channel_id bigint, message_id bigint, author_id bigint, content text, PRIMARY KEY (channel_id, message_id)) ជាមួយនឹងចង្កោមបញ្ជាទិញដោយ (message_id DESC);
ទោះបីជាគ្រោងការណ៍របស់ Cassandra ស្រដៀងទៅនឹងគ្រោងការណ៍មូលដ្ឋានទិន្នន័យដែលទាក់ទងក៏ដោយ ក៏វាងាយស្រួលក្នុងការផ្លាស់ប្តូរ ហើយមិនមានផលប៉ះពាល់ជាបណ្តោះអាសន្នលើការអនុវត្តនោះទេ។ យើងយកល្អបំផុតនៃការផ្ទុក blob និងការផ្ទុកទំនាក់ទំនង។

នៅពេលដែលយើងចាប់ផ្តើមនាំចូលសារដែលមានស្រាប់ចូលទៅក្នុង Cassandra យើងឃើញការព្រមានភ្លាមៗនៅក្នុងកំណត់ហេតុដែលផ្នែកធំជាង 100 MB ត្រូវបានរកឃើញ។ ចាស?! យ៉ាងណាមិញ Cassandra អះអាងថាគាំទ្រ 2GB ភាគថាស!ជាក់ស្តែង លទ្ធភាពគ្រាន់តែមិនមានន័យថានេះគួរតែត្រូវបានធ្វើនោះទេ។ ភាគថាសធំៗដាក់ភាពតានតឹងច្រើនលើអ្នកប្រមូលសំរាមរបស់ Cassandra នៅពេលបង្រួម ពង្រីកចង្កោម។ល។ ការ​មាន​ភាគ​ថាស​ធំ​ក៏​មាន​ន័យ​ថា​ទិន្នន័យ​នៅ​ក្នុង​វា​មិន​អាច​ត្រូវ​បាន​ចែកចាយ​ទូទាំង​ចង្កោម​បាន​ទេ។ វាច្បាស់ណាស់ថា យើងត្រូវតែកំណត់ទំហំនៃផ្នែកខ្លះ ពីព្រោះបណ្តាញ Discord ខ្លះអាចមានច្រើនឆ្នាំ និងបង្កើនទំហំឥតឈប់ឈរ។

យើងបានសម្រេចចិត្តចែកចាយសាររបស់យើងជាបណ្តុំ (ធុងទឹក) តាមពេលវេលា។ យើងបានមើលបណ្តាញធំបំផុតនៅលើ Discord ហើយបានកំណត់ថាប្រសិនបើយើងរក្សាសារក្នុងប្លុកប្រហែល 10 ថ្ងៃ នោះយើងនឹងមានភាពងាយស្រួលក្នុងដែនកំណត់ 100MB ។ ប្លុកត្រូវតែទទួលបានពី message_id ឬត្រាពេលវេលា។

DISCORD_EPOCH = 1420070400000 BUCKET_SIZE = 1000 * 60 * 60 * 24 * 10 def make_bucket(snowflake): ប្រសិនបើ snowflake គឺគ្មាន: timestamp = int(time.time() * 1000E) - បឹង POCHORD មួយទៀតគឺនៅពេលដែល Snowflake: ចំនួន # វិនាទីចាប់តាំងពី DISCORD_EPOCH ។ timestamp = snowflake_id >> 22 return int(timestamp / BUCKET_SIZE) def make_buckets(start_id, end_id=None): ជួរត្រឡប់(make_bucket(start_id), make_bucket(end_id) + 1)
សោ​ភាគថាស Cassandra អាច​ជា​បន្សំ ដូច្នេះ​សោ​ចម្បង​ថ្មី​របស់​យើង​គឺ ((channel_id, bucket), message_id)។

បង្កើតសារ TABLE (channel_id bigint, bucket int, message_id bigint, author_id bigint, content text, PRIMARY KEY ((channel_id, bucket), message_id)) ជាមួយ CLUSTERING ORDER BY (message_id DESC);
ដើម្បីសួរសារថ្មីៗនៅក្នុងឆានែលមួយ យើងបានបង្កើតបណ្តុំជាច្រើនចាប់ពីពេលបច្ចុប្បន្នទៅ channel_id (វាក៏ត្រូវបានតម្រៀបតាមកាលប្បវត្តិជា Snowflake ហើយត្រូវតែចាស់ជាងសារដំបូង)។ បន្ទាប់​មក យើង​ស្ទង់​មតិ​ភាគ​បន្តបន្ទាប់​គ្នា​រហូត​ដល់​យើង​ប្រមូល​សារ​បាន​គ្រប់គ្រាន់។ គុណវិបត្តិនៃវិធីសាស្រ្តនេះគឺថា ម្តងម្កាល សកម្ម Discord នឹងត្រូវស្ទង់មតិប្លុកផ្សេងៗគ្នាជាច្រើន ដើម្បីប្រមូលសារឱ្យបានគ្រប់គ្រាន់តាមពេលវេលា។ នៅក្នុងការអនុវត្ត វាបានប្រែក្លាយថាអ្វីគ្រប់យ៉ាងគឺស្ថិតនៅក្នុងលំដាប់ ពីព្រោះសម្រាប់ឧទាហរណ៍ Discord សកម្ម ជាធម្មតាមានសារគ្រប់គ្រាន់នៅក្នុងផ្នែកទីមួយ ហើយទាំងនេះគឺជាភាគច្រើន។

ការនាំចូលសារចូលទៅក្នុង Cassandra បានដំណើរការយ៉ាងរលូន ហើយយើងត្រៀមរួចរាល់ដើម្បីសាកល្បងវានៅក្នុងផលិតកម្ម។

ការចាប់ផ្តើមពិបាក

ការនាំយកប្រព័ន្ធថ្មីទៅក្នុងផលិតកម្មគឺតែងតែគួរឱ្យខ្លាច ដូច្នេះវាជាការប្រសើរក្នុងការសាកល្បងវាដោយមិនប៉ះពាល់ដល់អ្នកប្រើប្រាស់។ យើងបានកំណត់រចនាសម្ព័ន្ធប្រព័ន្ធដើម្បីចម្លងប្រតិបត្តិការអាន/សរសេរនៅក្នុង MongoDB និង Cassandra ។

ភ្លាមៗបន្ទាប់ពីការបើកដំណើរការ កំហុសបានលេចឡើងនៅក្នុងកម្មវិធីតាមដានកំហុសដែល author_id ស្មើនឹងសូន្យ។ តើ​វា​អាច​ជា​សូន្យ​ដោយ​របៀប​ណា? នេះជាកន្លែងដែលត្រូវការ!

ភាពស្ថិតស្ថេរនៅទីបញ្ចប់

Cassandra គឺជាប្រព័ន្ធប្រភេទ ដែលមានន័យថា ភាពសុចរិតដែលត្រូវបានធានាត្រូវបានលះបង់សម្រាប់ភាពអាចរកបាន ដែលជាអ្វីដែលយើងចង់បានជាទូទៅ។ Cassandra មិនអនុញ្ញាតឱ្យអានមុនពេលសរសេរ (ការអានមានតម្លៃថ្លៃជាង) ដូច្នេះហើយ Cassandra ទាំងអស់ត្រូវបានធ្វើបច្ចុប្បន្នភាព និងបញ្ចូល (បញ្ចូល) ទោះបីជាមានតែជួរឈរជាក់លាក់ប៉ុណ្ណោះដែលត្រូវបានផ្តល់ឱ្យក៏ដោយ។ អ្នកក៏អាចសរសេរទៅកាន់ថ្នាំងណាមួយ ហើយវានឹងដោះស្រាយការប៉ះទង្គិចដោយស្វ័យប្រវត្តិដោយប្រើពាក្យ "ការឈ្នះចុងក្រោយ" សម្រាប់ជួរឈរនីមួយៗ។ ដូច្នេះ តើ​នេះ​ប៉ះពាល់​យើង​យ៉ាង​ណា?


ឧទាហរណ៍កែសម្រួល/លុបលក្ខខណ្ឌប្រណាំង

ក្នុងករណីដែលអ្នកប្រើប្រាស់បានកែសម្រួលការបង្ហោះ ខណៈពេលដែលអ្នកប្រើប្រាស់ផ្សេងទៀតបានលុបការបង្ហោះដូចគ្នានោះ យើងនឹងបញ្ចប់ដោយជួរដេកដែលបាត់ទិន្នន័យទាំងអស់ លើកលែងតែសោចម្បង និងអត្ថបទ ព្រោះ Cassandra កត់ត្រាតែការអាប់ដេត និងការបញ្ចូលប៉ុណ្ណោះ។ មានដំណោះស្រាយពីរដែលអាចកើតមានសម្រាប់បញ្ហានេះ៖

  1. សរសេរសារទាំងមូលឡើងវិញ ពេលកំពុងកែសម្រួលសារ។ បន្ទាប់មកមានលទ្ធភាពនៃការរស់ឡើងវិញនូវសារដែលបានលុប និងបន្ថែមឱកាសនៃការប៉ះទង្គិចសម្រាប់ធាតុក្នុងពេលដំណាលគ្នានៅក្នុងជួរឈរផ្សេងទៀត។
  2. កំណត់អត្តសញ្ញាណសារដែលខូច ហើយលុបវាចេញពីមូលដ្ឋានទិន្នន័យ។
យើងបានជ្រើសរើសជម្រើសទីពីរ ដោយកំណត់ជួរឈរដែលត្រូវការ (ក្នុងករណីនេះ author_id) និងលុបសារប្រសិនបើវាទទេ។

ខណៈពេលដែលការដោះស្រាយបញ្ហានេះ យើងសង្កេតឃើញថា យើងពិតជាគ្មានប្រសិទ្ធភាពជាមួយនឹងប្រតិបត្តិការសរសេរ។ ដោយសារ Cassandra មានព្រឹត្តិការណ៍ស្របគ្នា វាមិនអាចលុបទិន្នន័យដូចនោះភ្លាមៗបានទេ។ វាត្រូវការចម្លងការលុបទៅថ្នាំងផ្សេងទៀត ហើយវាគួរតែត្រូវបានធ្វើ ទោះបីជាថ្នាំងមិនអាចប្រើបានជាបណ្ដោះអាសន្នក៏ដោយ។ Cassandra ដោះស្រាយរឿងនេះដោយស្មើនឹងការលុបទៅជាទម្រង់នៃការសរសេរដែលហៅថា "ផ្នូរថ្ម" ។ ក្នុងអំឡុងពេលប្រតិបត្តិការអាននាងគ្រាន់តែរំលង "ផ្នូរ" ដែលត្រូវបានជួបប្រទះនៅតាមផ្លូវ។ អាយុកាលនៃ "ផ្នូរ" គឺអាចកំណត់រចនាសម្ព័ន្ធបាន (តាមលំនាំដើម 10 ថ្ងៃ) ហើយពួកគេត្រូវបានលុបជាអចិន្ត្រៃយ៍កំឡុងពេលបង្រួមមូលដ្ឋានទិន្នន័យ ប្រសិនបើថ្ងៃផុតកំណត់ផុតកំណត់។

ការ​លុប​ជួរ​ឈរ​មួយ ហើយ​សរសេរ​សូន្យ​ទៅ​ជួរ​ឈរ​គឺ​ពិត​ជា​រឿង​ដូច​គ្នា។ ក្នុងករណីទាំងពីរ "ផ្នូរ" ត្រូវបានបង្កើតឡើង។ ដោយសារការសរសេរទាំងអស់នៅក្នុង Cassandra គឺជាការអាប់ដេត និងការបញ្ចូល អ្នកបង្កើតផ្នូរមួយ ទោះបីជាដំបូងអ្នកសរសេរទុកជាមោឃៈក៏ដោយ។ នៅក្នុងការអនុវត្ត ប្លង់សារពេញលេញរបស់យើងមាន 16 ជួរ ប៉ុន្តែសារជាមធ្យមមានត្រឹមតែ 4 តម្លៃកំណត់ប៉ុណ្ណោះ។ យើងបានកត់ត្រា "ផ្នូរ" ចំនួន 12 នៅ Cassandra ជាធម្មតាដោយគ្មានហេតុផល។ ដំណោះស្រាយចំពោះបញ្ហាគឺសាមញ្ញ៖ សរសេរតែតម្លៃមិនមែនសូន្យទៅមូលដ្ឋានទិន្នន័យ។

ការសម្តែង

Cassandra ត្រូវបានគេស្គាល់ថាសរសេរលឿនជាងការអាន ហើយនេះពិតជាអ្វីដែលយើងសង្កេតឃើញ។ ប្រតិបត្តិការសរសេរបានកើតឡើងក្នុងរយៈពេលតិចជាងមួយមីលីវិនាទី ហើយប្រតិបត្តិការអានបានកើតឡើងក្នុងរយៈពេលតិចជាង 5 មីលីវិនាទី។ អត្រាទាំងនេះត្រូវបានគេសង្កេតឃើញដោយមិនគិតពីប្រភេទនៃទិន្នន័យដែលបានចូលប្រើ។ ការអនុវត្តនៅតែថេរពេញមួយសប្តាហ៍នៃការធ្វើតេស្ត។ គ្មានការភ្ញាក់ផ្អើលទេ យើងទទួលបានអ្វីដែលយើងរំពឹងទុក។


អាន/សរសេរ ភាពយឺតយ៉ាវ នេះបើយោងតាមទិន្នន័យកំណត់ហេតុ

ក្នុងការរក្សាការអានលឿន និងគួរឱ្យទុកចិត្ត នេះជាឧទាហរណ៍នៃការរុករកទៅការបង្ហោះដែលមានអាយុមួយឆ្នាំនៅក្នុងប៉ុស្តិ៍ដែលមានការបង្ហោះរាប់លាន៖

ការភ្ញាក់ផ្អើលដ៏ធំ

អ្វីៗដំណើរការទៅដោយរលូន ដូច្នេះយើងបានដាក់ Cassandra ជាមូលដ្ឋានទិន្នន័យសំខាន់របស់យើង ហើយបានទម្លាក់ MongoDB ក្នុងរយៈពេលមួយសប្តាហ៍។ នាងបានបន្តធ្វើការដោយគ្មានកំហុស ... ប្រហែល 6 ខែរហូតដល់ថ្ងៃមួយនាងឈប់ឆ្លើយតប។

យើងបានកត់សម្គាល់ឃើញថា Cassandra កំពុងឈប់ជាបន្តបន្ទាប់រយៈពេល 10 វិនាទីក្នុងអំឡុងពេលប្រមូលសំរាម ប៉ុន្តែយើងមិនអាចដឹងច្បាស់ពីមូលហេតុនោះទេ។ យើង​បាន​ចាប់​ផ្តើម​ជីក​កកាយ ហើយ​រក​ឃើញ​ប៉ុស្តិ៍ Discord ដែល​ចំណាយ​ពេល 20 វិនាទី​ដើម្បី​ផ្ទុក។ ពិរុទ្ធជនគឺជាម៉ាស៊ីនមេ Discord សាធារណៈនៃ Puzzles & Dragons subreddit ។ ដោយសារវាជាសាធារណៈ ពួកយើងបានចូលរួមទស្សនា។ ជាការភ្ញាក់ផ្អើលរបស់យើង មានសារតែមួយនៅលើប៉ុស្តិ៍។ នៅពេលនោះ វាបានក្លាយជាជាក់ស្តែងថាពួកគេបានលុបសាររាប់លានតាមរយៈ APIs របស់យើង ដោយបន្សល់ទុកតែសារមួយនៅលើឆានែលប៉ុណ្ណោះ។

ប្រសិនបើអ្នកបានអានយ៉ាងដិតដល់ អ្នកនឹងចងចាំពីរបៀបដែល Cassandra ដោះស្រាយការលុបដោយប្រើផ្នូរ (បានលើកឡើងនៅក្នុងជំពូក "Eventual Consistency")។ នៅពេលដែលអ្នកប្រើប្រាស់ផ្ទុកឆានែលនេះ ទោះបីជាមានសារតែមួយក៏ដោយ Cassandra ត្រូវតែស្កេនផ្នូររាប់លានសារយ៉ាងមានប្រសិទ្ធភាព។ បន្ទាប់មកវាបង្កើតសំរាមលឿនជាង JVM អាចប្រមូលវាបាន។

យើងបានដោះស្រាយបញ្ហានេះដូចខាងក្រោមៈ

  • កាត់បន្ថយអាយុកាលថ្មផ្នូរពី 10 ថ្ងៃទៅ 2 ថ្ងៃ ដោយសារយើងដំណើរការការជួសជុល Cassandra (ដំណើរការប្រឆាំងនឹងការចូលប្រឡូក) នៅលើចង្កោមសាររបស់យើងរាល់ល្ងាច។
  • បានផ្លាស់ប្តូរលេខកូដស្នើសុំដើម្បីតាមដានប្លុកទទេនៅលើឆានែល និងជៀសវាងពួកវានៅពេលអនាគត។ នេះមានន័យថាប្រសិនបើអ្នកប្រើចាប់ផ្តើមសំណើនេះម្តងទៀត នោះក្នុងករណីដ៏អាក្រក់បំផុត Cassandra នឹងស្កេនតែប្លុកថ្មីៗបំផុត។

អនាគត

បច្ចុប្បន្នយើងមានចង្កោមនៃ 12 nodes ដែលកំពុងដំណើរការជាមួយនឹងកត្តាចម្លងនៃ 3 ហើយយើងនឹងបន្តបន្ថែមថ្នាំង Cassandra ថ្មីតាមតម្រូវការ។ យើងជឿថាវិធីសាស្រ្តនេះនឹងដំណើរការក្នុងរយៈពេលវែង ប៉ុន្តែនៅពេលដែល Discord រីកចម្រើន យើងឃើញអនាគតដ៏ឆ្ងាយដែលសាររាប់ពាន់លាននឹងត្រូវរក្សាទុកក្នុងមួយថ្ងៃ។ ក្រុមហ៊ុន Netflix និង Apple មានចង្កោមដែលមានថ្នាំងរាប់រយដែលកំពុងដំណើរការ ដូច្នេះយើងមិនចាំបាច់ព្រួយបារម្ភអំពីវាសម្រាប់ពេលនេះទេ។ យ៉ាង​ណា​ក៏​ដោយ ខ្ញុំ​ចង់​មាន​គំនិត​មួយ​ចំនួន​ជា​ទុន​បម្រុង។

នាពេលខាងមុខ

  • ដំឡើងកំណែសាររបស់យើងពី Cassandra 2 ទៅ Cassandra 3 ។ ទ្រង់ទ្រាយផ្ទុកថ្មីនៅក្នុង Cassandra 3 អាចកាត់បន្ថយទំហំផ្ទុកបានជាង 50% ។
  • កំណែថ្មីរបស់ Cassandra គឺប្រសើរជាងក្នុងការដំណើរការទិន្នន័យកាន់តែច្រើនក្នុងមួយថ្នាំង។ បច្ចុប្បន្នយើងរក្សាទុកទិន្នន័យដែលបានបង្ហាប់ប្រហែល 1 TB នៅក្នុងពួកវានីមួយៗ។ យើងគិតថាវាអាចទៅរួចក្នុងការកាត់បន្ថយចំនួនថ្នាំងនៅក្នុងចង្កោមដោយសុវត្ថិភាពដោយបង្កើនដែនកំណត់នេះដល់ 2 TB។

អនាគតឆ្ងាយ

  • រៀន Scylla គឺជា DBMS ដែលត្រូវគ្នាជាមួយ Cassandra ដែលសរសេរក្នុង C++ ។ កំឡុងពេលប្រតិបត្តិការធម្មតា ថ្នាំង Cassandra របស់យើងពិតជាប្រើប្រាស់ធនធាន CPU តិចតួច ប៉ុន្តែក្នុងអំឡុងពេលធ្វើការជួសជុល Cassandra (ដំណើរការប្រឆាំងនឹង entropy) ពួកវាពឹងផ្អែកខ្លាំងលើ CPU ហើយពេលវេលាជួសជុលកើនឡើងអាស្រ័យលើចំនួនទិន្នន័យដែលបានសរសេរចាប់តាំងពី ការជួសជុលចុងក្រោយ។ Scylla សន្យាថានឹងបង្កើនល្បឿនជួសជុលយ៉ាងខ្លាំង។
  • បង្កើតប្រព័ន្ធមួយដើម្បីទុកព័ត៌មានដែលមិនបានប្រើទៅក្នុង Google Cloud Storage ហើយបង្ហោះវាមកវិញតាមតម្រូវការ។ យើង​ចង់​ជៀស​វាង​រឿង​នេះ ហើយ​មិន​គិត​ថា​យើង​នឹង​ត្រូវ​ធ្វើ​បែប​នេះ​ទេ។

សេចក្តីសន្និដ្ឋាន

ជាងមួយឆ្នាំបានកន្លងផុតទៅចាប់តាំងពីការផ្លាស់ប្តូរទៅ Cassandra និងបើទោះបីជា "ការភ្ញាក់ផ្អើលធំ"វាជាការជិះទូកដ៏ស្ងប់ស្ងាត់។ យើងបានទៅពីជាង 100 លានសារសរុបទៅជាង 120 លានសារក្នុងមួយថ្ងៃ ខណៈពេលដែលរក្សាបាននូវដំណើរការ និងស្ថេរភាព។

ដោយសារភាពជោគជ័យនៃគម្រោងនេះ យើងបានផ្លាស់ប្តូរទិន្នន័យផលិតកម្មផ្សេងទៀតទាំងអស់របស់យើងទៅ Cassandra ចាប់តាំងពីពេលនោះមក ហើយទទួលបានជោគជ័យផងដែរ។

នៅក្នុងការតាមដានអត្ថបទនេះ យើងនឹងស្វែងយល់ពីរបៀបដែលយើងធ្វើការស្វែងរកអត្ថបទពេញនៅលើសាររាប់ពាន់លាន។

យើងនៅតែមិនមានវិស្វករ DevOps (មានតែវិស្វករ backend បួននាក់ប៉ុណ្ណោះ) ដូច្នេះវាពិតជាល្អណាស់ដែលមានប្រព័ន្ធដែលអ្នកមិនចាំបាច់ព្រួយបារម្ភ។ យើង​កំពុង​ជ្រើសរើស​បុគ្គលិក ដូច្នេះ​សូម​ទាក់ទង​មក​យើង​ប្រសិន​បើ​ល្បែង​ផ្គុំ​រូប​បែប​នេះ​ទាក់​ទង​នឹង​ចំណូលចិត្ត​របស់​អ្នក។

ស្លាក: បន្ថែមស្លាក

សព្វថ្ងៃនេះ នៅពេលដែលបច្ចេកវិទ្យាកុំព្យូទ័រ និងទូរស័ព្ទបានរីកចម្រើនហួសពីអាកាសធាតុ សំណួរទីមួយនៃសារៈសំខាន់គឺផ្តោតលើសមត្ថភាពក្នុងការទំនាក់ទំនងគ្នាទៅវិញទៅមក។

កម្មវិធីផ្ញើសារអនុញ្ញាតឱ្យអ្នកពិភាក្សាអំពីបញ្ហាណាមួយក្នុងពេលវេលាជាក់ស្តែង ពីឯកជនរហូតដល់សន្និសីទអាជីវកម្ម។ ដូច្នេះប្រជាប្រិយភាពរបស់ពួកគេមិនតិចជាងហ្គេមដែលមានអ្នកលេងច្រើននោះទេ។

អ្នកផ្ញើសារបន្ទាន់ទាំងអស់មានបញ្ហាមួយគឺការប្រមូលផ្តុំសារចាស់យ៉ាងឆាប់រហ័ស។ ពួកគេយកអង្គចងចាំបន្ថែមនៅលើឧបករណ៍របស់អ្នក។

សម្អាតការជជែកក្នុងជម្លោះ (ការណែនាំ)

ការប្រាស្រ័យទាក់ទងទៀងទាត់នៅក្នុងកម្មវិធីផ្ញើសារមាននិន្នាការបំពេញអង្គចងចាំរបស់ឧបករណ៍។ សារ​បាន​កកកុញ ហើយ​ពួកគេ​ជាច្រើន​គ្មាន​ន័យ។ ដូច្នេះការដកចេញរបស់ពួកគេគឺចាំបាច់។

លើសពីនេះទៀតការរក្សាទុកការឆ្លើយឆ្លងទាំងអស់គឺមានគ្រោះថ្នាក់ខ្លាំងណាស់។ មានប្រូបាប៊ីលីតេខ្ពស់នៃការលេចធ្លាយទិន្នន័យ ដែលជាលទ្ធផលដែលវាអាចត្រូវបានប្រើជាការសម្របសម្រួលព័ត៌មានលើខ្លួនអ្នក។ ដើម្បីទប់ស្កាត់លទ្ធផលនៃព្រឹត្តិការណ៍បែបនេះ ចាំបាច់ត្រូវជម្រះប្រវត្តិឱ្យបានទាន់ពេលវេលា។ មានវិធីបីយ៉ាងដើម្បីធ្វើវានៅលើ Discord៖

  • លុបឆានែល។
  • ការលុបសារនីមួយៗ។
  • ការលុបសារទាំងអស់សម្រាប់សប្តាហ៍ចុងក្រោយ។

បន្ទាប់​ពី​ផ្ញើ វា​មាន​ពេល​តែ​ប៉ុន្មាន​វិនាទី​ប៉ុណ្ណោះ​ដែល​អនុញ្ញាត​ឱ្យ​អ្នក​លុប​សារ​មុន​ពេល​សមាជិក​ឆានែល​ទាំងអស់​ឃើញ​វា។ ជម្រើសនៃវិធីសាស្ត្រសម្អាតគឺមានលក្ខណៈតាមស្ថានភាព និងត្រូវបានកែសម្រួលទៅតាមតម្រូវការផ្ទាល់ខ្លួនរបស់អ្នកបង្កើតម៉ាស៊ីនមេ។ ស្វែងយល់បន្ថែមអំពីវិធីសាស្រ្តនីមួយៗជាមួយនឹងការណែនាំសម្រាប់ការប្រើប្រាស់។

វិធីទី ១ លុបប៉ុស្តិ៍ទាំងមូល ហើយបង្កើតថ្មី>

ខ្ញុំមិនអាចគិតពីជម្រើសសាមញ្ញជាងនេះទេ។ នៅពេលដែលប្រធានបទនេះអស់កំលាំង ឬភស្តុតាងសម្របសម្រួលជាច្រើនបានប្រមូលផ្តុំនៅក្នុងការពិភាក្សា សូមលុបប៉ុស្តិ៍ទាំងស្រុង ហើយបង្កើតថ្មីមួយ។ ការលុបកើតឡើងក្នុងរយៈពេលពីរបីវិនាទី ហើយមិនអាចស្តារឡើងវិញបានទេ។

យកចិត្តទុកដាក់! ប្រសិនបើមានព័ត៌មានសំខាន់ សូមចម្លងវាទៅក្នុងឯកសារដាច់ដោយឡែក ឬរក្សាទុកវាជារូបថតអេក្រង់។

អ្នកត្រូវអនុវត្តតាមជំហានសាមញ្ញមួយចំនួន៖



បន្ទាប់មកបង្កើតថ្មីមួយ ប្រហែលជាសូម្បីតែឈ្មោះដូចគ្នាក៏ដោយ។

វិធីទី ២៖ លុបសារនីមួយៗដោយឡែកពីគ្នា។

វិធីសាស្រ្តសំអាតយូរបំផុត។ ដោយសារតែពេលវេលាដែលត្រូវការវាសមរម្យសម្រាប់តែការដកចេញនូវបរិមាណតិចតួចប៉ុណ្ណោះ។ សេចក្តីណែនាំសម្រាប់ការប្រើប្រាស់៖



សារដែលបានលុបនឹងត្រូវបាត់បង់សម្រាប់អ្នកប្រើប្រាស់ប៉ុស្តិ៍ទាំងអស់។ ប្រសិនបើវាត្រូវបានចំណាំ វានឹងបាត់ទៅវិញ។

វិធីទី ៣៖ ការសម្អាតក្នុងរយៈពេល ៧ ថ្ងៃចុងក្រោយ

វិធីសាស្ត្រនេះអនុវត្តចំពោះតែការបង្ហោះពីអ្នកប្រើប្រាស់ដែលអ្នកចង់ហាមឃាត់ប៉ុណ្ណោះ។ មុនពេលផ្ញើទៅបញ្ជីខ្មៅ អ្នកនឹងត្រូវបានសួរឱ្យជ្រើសរើសរយៈពេលណាដែលត្រូវលុបប្រវត្តិសំបុត្រពីអ្នកប្រើប្រាស់៖

  • ក្នុងរយៈពេលម្ភៃបួនម៉ោង។
  • ឬប្រាំពីរថ្ងៃចុងក្រោយ (និងយប់) ។


របៀបដាក់ក្នុងបញ្ជីខ្មៅមនុស្ស:

  • ចុចកណ្ដុរស្ដាំលើឈ្មោះរបស់អ្នកប្រើ ហើយជ្រើសរើស – ហាម (ឈ្មោះហៅក្រៅរបស់អ្នកប្រើនឹងត្រូវបានចង្អុលបង្ហាញបន្ទាប់)។


ចង្អុលបង្ហាញហេតុផលតាមការចង់បាន អ្នកអាចទុកវាលឱ្យនៅទទេ។

តើអ្នកគួរលុបការជជែករបស់អ្នកញឹកញាប់ប៉ុណ្ណា?

ការសម្អាតការជជែកទាំងស្រុងអាស្រ័យលើប្រធានបទសហគមន៍របស់អ្នក។ ប្រសិនបើអ្នកផ្លាស់ប្តូរការលេងសើច នោះគ្មានចំណុចណាមួយក្នុងការលុបនោះទេ វាជាការប្រសើរក្នុងការទុកអ្វីៗទាំងអស់ឱ្យដូចដើម ដូច្នេះអ្នកអាចត្រឡប់ទៅប្រកាសដែលអ្នកចូលចិត្តវិញ។

ប្រសិនបើអ្នកមាន hodgepodge ដូច្នេះដើម្បីនិយាយ សេរីភាពពេញលេញនៃការពិភាក្សាលើប្រធានបទផ្សេងៗ វាជាការប្រសើរក្នុងការសម្អាតវាយ៉ាងហោចណាស់ម្តងរៀងរាល់ពីរបីថ្ងៃម្តង។ តាមឧត្ដមគតិ, ជាការពិតណាស់, ម្តងក្នុងមួយថ្ងៃ។ មិនមានតម្រូវការជាក់លាក់ណាមួយនៅក្នុងបញ្ហានេះទេ ដូច្នេះអ្នកគ្រប់គ្រងម្នាក់ៗកំណត់របារផ្ទាល់ខ្លួនរបស់គាត់នៅក្នុងបញ្ហានេះ។