Real-time chat function သည် WeChat, Facebook, WhatsApp စသည့်စသည့်ခေတ်သစ်လူမှုရေးပလက်ဖောင်းများတွင်အလွန်ရေပန်းစားသည်။ ဤလုပ်ဆောင်မှုကိုအကောင်အထည်ဖော်ခြင်းကရှေ့တန်းဖွံ့ဖြိုးမှုအပေါ်တွင်မူတည်သည်သာမကခိုင်မာသည့်အဆုံးအထောက်အပံ့လည်းလိုအပ်သည်။ ဤဆောင်းပါးသည်ဒေတာဘေ့စ်ဒီဇိုင်းနှင့်အကောင်းမြင်မှုရှုထောင့်မှအချိန်မှန် chat function များကိုအကောင်အထည်ဖော်ရန် PHP ကိုမည်သို့အသုံးပြုရမည်ကိုမိတ်ဆက်ပေးလိမ့်မည်။
Live Chat System သည် Chat Records အမြောက်အများကိုသိမ်းဆည်းရန်လိုအပ်သည်, မှတ်တမ်းတစ်ခုစီသည်အောက်ပါအချက်အလက်များပါ 0 င်သည်။
ဤ Chat Records များကိုသိမ်းဆည်းရန် MySQL ဒေတာဘေ့စ်ကို သုံး. အထူးစားပွဲ၌သက်ဆိုင်ရာအချက်အလက်များကိုသိမ်းဆည်းရန်သင်အသုံးပြုနိုင်သည်။
Table `chat_messages` ကိုဖန်တီးပါ ( `ID's Int (11) Null Auto_increment မဟုတ်ပါ။ `sender_id` int (11) null မဟုတ်, `receiver_id` int (11) NULL မဟုတ်ပါ။ `စာမိတ္တူမဟုတ်ပါ NURL မဟုတ်ပါ, `Timestamp` Timestamp သည် NULL ပုံမှန် current_timestamp မဟုတ်ပါ, အဓိက key (`ID`) );
ဤ SQL Code သည် chat_messages` ဟုခေါ်သောဇယားတစ်ခုဖြစ်ပြီး Chat History ကိုသိုလှောင်ရန်လိုအပ်သောကွက်လပ်များပါ 0 င်သည်။
Indexing သည်ဒေတာဘေ့စ်စုံစမ်းမှုစွမ်းဆောင်ရည်ကိုတိုးတက်စေရန်အတွက်သော့ချက်ဖြစ်သည်။ Chat Record Table တွင်ပေးပို့သူ ID နှင့်လက်ခံ ID အပေါ် အခြေခံ. chat changes များကိုရှာဖွေရန်လိုအပ်သည်။ ထို့ကြောင့်ကျွန်ုပ်တို့သည်ဤနယ်ပယ်နှစ်ခုအတွက်ပူးတွဲညွှန်းကိန်းတစ်ခုဖန်တီးနိုင်သည်။
chat_messages (Sender_id, receliver_id) အတွက် Index Sender_Receiver_index ကိုဖန်တီးပါ။
အထက်ဖော်ပြပါကုဒ်သည် Sender ID နှင့်လက်ခံသူ ID ကိုပေါင်းစပ်ထားသောအညွှန်းတစ်ခုဖန်တီးပေးသည့်အညွှန်းတစ်ခုဖန်တီးပေးသည်။
ဒေတာဘေ့စ်စုံစမ်းမှုထိရောက်မှုကိုတိုးတက်စေရန်အတွက်သိုလှောင်နည်းပညာကိုအသုံးပြုနိုင်သည်။ စုံစမ်းမှုအားဖြင့်မှတ်ဥာဏ်ကိုမှတ်ဉာဏ်အဖြစ်သိမ်းဆည်းခြင်းအားဖြင့်မကြာခဏ database access ကိုရှောင်ရှားနိုင်ပြီးစနစ်စွမ်းဆောင်ရည်တိုးတက်လာသည်။
// ဆက်သွယ်မှုဒေတာဘေ့စ်ကုဒ်သည် $ cache ကိုချန်လှပ်ထားခြင်း = Memcached (), $ cache-> addserver ('localhost', 11211); function get_chat_messages ($ sender_id, $ receiver_id) { Global $ DB, $ cache; $ cache_key = "chat_messages {{$ sender_id} {$ receiver_id}; $ ရလဒ် = $ cache-> get ($ cache_key); လျှင် ($ ရလဒ် === fiss) { SQL = "chat_id = {$ sender_id} နှင့် receiver_id = {$ receiver_id}"; $ ရလဒ် = $ dB-> Query ($ SQL); $ cache-> set ($ cache_key, $ ရလဒ်, 60); } $ $ ရလဒ်ပြန်လာ; }
ဤကုဒ်သည်စုံစမ်းမှုသည်ရှာဖွေမှုများမှတဆင့်ရလဒ်များကိုသိုလှောင်ထားသည်။ cache တွင်မှတ်တမ်းမရှိပါကအချက်အလက်များကိုဒေတာဘေ့စ်မှမေးမြန်းခြင်းနှင့်ရလဒ်များကိုသိမ်းဆည်းထားပါသည်။ ထိုသို့ပြုလုပ်ခြင်းသည်ဒေတာဘေ့စ်၏စုံစမ်းမှုဝန်ကိုသိသိသာသာလျော့နည်းစေသည်။
Chat History ကြီးထွားလာသည်နှင့်အမျှဒေတာဘေ့စ်၏စုံစမ်းမှု၏လုပ်ဆောင်မှုကိုထိခိုက်နိုင်သည်။ စုံစမ်းမှုထိရောက်မှုကိုပိုမိုတိုးတက်စေရန် Database Partitions များကိုအသုံးပြုနိုင်သည်။ အချက်အလက်များကိုအချိန်အားဖြင့်ခွဲထုတ်ခြင်းအားဖြင့်အချက်အလက်အနည်းငယ်မျှသာလုပ်ဆောင်ရန်အချက်အလက်များကိုရှာဖွေရန်, စွမ်းဆောင်ရည်တိုးတက်အောင်ပြုလုပ်နိုင်သည်။
Table `chat_messages` ကိုဖန်တီးပါ ( `ID's Int (11) Null Auto_increment မဟုတ်ပါ။ `sender_id` int (11) null မဟုတ်, `receiver_id` int (11) NULL မဟုတ်ပါ။ `စာမိတ္တူမဟုတ်ပါ NURL မဟုတ်ပါ, `Timestamp` Timestamp သည် NULL ပုံမှန် current_timestamp မဟုတ်ပါ, အဓိက key (`ID`) Range (လ (timestamp) အားဖြင့်အခန်းကန့်) ( Partition P1 တန်ဖိုးများ (2) ထက်နည်းသော, Partition P2 တန်ဖိုးများ (3) ထက်နည်းသော, partitional p3 တန်ဖိုးများ (4) ထက်နည်းသော, Partition P4 တန်ဖိုးများ (5) ထက်နည်းသော, Partition P5 Maxvalue ထက်နည်းသည် );
အထက်ပါကုဒ်သည်ဥပမာအားဖြင့်တစ်လဆင်ထားသောအခန်းကန့်များကိုအခန်းကန့်များကိုဖန်တီးပေးသောအခန်းကန့်ဇယားကိုဖန်တီးပေးသည်။ ဤသည်အထူးသဖြင့်ဒေတာ volume အလွန်ကြီးမားသည့်အခါ,
ဤဆောင်းပါးသည် PHP ကိုအချိန်နှင့်တပြေးညီစကားပြောခြင်းလုပ်ဆောင်မှုများကိုအသုံးပြုသောအခါဒေတာဘေ့စ်များကိုမည်သို့ဒီဇိုင်းဆွဲရမည်ကိုမိတ်ဆက်ပေးသည်။ ကျွန်ုပ်တို့သည် Chat Record Table ၏ဖွဲ့စည်းပုံကိုဒီဇိုင်းဆွဲပြီးအညွှန်းကိန်းနှင့် cache ကိုဤ အခြေခံ. အကောင်းဆုံးဖြစ်သည်။ ထို့နောက်ကျွန်ုပ်တို့သည် Partitioned စားပွဲများမှစုံစမ်းမှုထိရောက်မှုကိုမည်သို့တိုးတက်အောင်လုပ်ရမည်ကိုမိတ်ဆက်ပေးသည်။ Real-time chat function ကိုထိရောက်စွာအကောင်အထည်ဖော်မှုသည်ဒေတာဘေ့စ်၏အကောင်းမြင်မှ ခွဲ. မရပါ။