1000 প্লেয়ার সমস্যা হতে পারে বা নাও করতে পারে। এটি আপনাকে কত ঘন ঘন ডাটাবেস আপডেট করার প্রয়োজন তার উপর নির্ভর করে। তবে একটি সহজ সমাধান রয়েছে: এটি নিজের সার্ভারে ডাটাবেস রাখুন।
আমি কীভাবে ডেটাবেস সিস্টেমটি এমন একটি গেম কাজ করে যা লোকেরা একটি এমএমও-লাইট কল করবে - এটিকে আমি প্রকাশ করব না - আমি এখনও এটি বলতে পারি যে এটি ধারাবাহিকভাবে 1000 এরও বেশি খেলোয়াড় রয়েছে, এটি বিমূর্ততা:
- তারা ব্যক্তিগত চরিত্রের তথ্যের জন্য তালিকাভুক্ত "নো-এসকিউএল" ডাটাবেস ব্যবহার করে (জায়, সরঞ্জামাদি, অনুরূপ)।
- তারা জনসাধারণের অক্ষর সম্পর্কিত তথ্যের জন্য আরও traditionalতিহ্যবাহী রিলেশনাল ডাটাবেস ব্যবহার করে যা খুব কমই আপডেট হয় (নাম, অর্জন, ইত্যাদি ...) এবং পরিসংখ্যান।
ডকুমেন্ট ভিত্তিক ডাটাবেস ব্যবহার করা এই ক্ষেত্রে পারফরম্যান্সের জন্য একটি ভাল ধারণা হতে পারে। যোগদান এবং সমষ্টিগুলি করা খারাপ হলেও এটি ডেটা অ্যাক্সেসের পক্ষে ভাল ... তবে তারা সেখানে থাকা ডেটা দিয়ে তা করবে না।
অন্যদিকে, যখন তাদের প্রত্যেকের জন্য অন্য বস্তুর সাথে কোনও বস্তু পরিবর্তন করার মতো কিছু করা দরকার, তখন একটি ব্যাকগ্রাউন্ড স্ক্রিপ্ট চালানো দরকার যা চরিত্র অনুসারে অক্ষরে চলে এবং সেগুলি একে একে আপডেট করে, এটি লক্ষণীয় সময় নেয়।
চরিত্রের ডেটা ক্লায়েন্ট এবং সার্ভারে উভয়ই বিদ্যমান এবং উভয় পক্ষের একই ক্রিয়াকলাপ সম্পাদন করে সিস্টেমটি তাদের সিঙ্কে রাখার জন্য ডিজাইন করা হয়েছে।
এখন, যখন কোনও খেলোয়াড় সিস্টেমের সাথে লেনদেন করে - বলুন NPC বা এর অনুরূপ মাধ্যমে অন্যের জন্য কোনও আইটেম এক্সচেঞ্জ করুন - এর এই পর্যায়ে রয়েছে:
- অপারেশনটি বৈধ কিনা তা ক্লায়েন্টরা পরীক্ষা করে
- ক্লায়েন্ট সার্ভারে অপারেশন প্রেরণ করে (async অপারেশন)
- ক্লায়েন্ট তার মডেলটি র্যামে আপডেট করে
- অপারেশনটি বৈধ কিনা সার্ভারটি পরীক্ষা করে
- সার্ভারটি তার মডেলটি র্যামে আপডেট করে
- সার্ভারটি ডাটাবেস আপডেট করে (async অপারেশন)
- সার্ভার ক্লায়েন্টকে বলে যে পরিবর্তনটি ঘটেছে
দ্রষ্টব্য :
- ডাটাবেস আপডেটগুলি, যদিও অ্যাসিঙ্ক, ঠিক এখনই সম্পন্ন হয়। গেম সার্ভার যে কোনও কারণে নিচে গেলে, খুব বেশি ক্ষতি হয় না।
- পারফরম্যান্স অবক্ষয় তাদের নিজস্ব সার্ভারে ডাটাবেস স্থাপন করার জন্য কোনও বড় বিষয় নয়।
খেলোয়াড়দের মধ্যে ট্রেডগুলি একইভাবে পরিচালনা করা হয়, খেলোয়াড়দের অন্য খেলোয়াড়দের কেলেঙ্কারী প্রতিরোধ করার জন্য অতিরিক্ত নিয়ম এবং কোনও লেনদেন পূর্বাবস্থায় ফিরে যাওয়ার প্রয়োজন হলে অতিরিক্ত ট্রেসিবিলিটি। শুনেছি সমস্ত লেনদেনের বিশেষ লগ রয়েছে যা কিছু সময়ের জন্য রাখা হয় (যখন কেউ অভিযোগ করেন তখন সমস্যাগুলি সমাধান করতে), আমি জানি না যে অংশটি কীভাবে কাজ করে সে সম্পর্কে আমি আরও জানি না।
কখনও কখনও কিছু ভুল হয়ে যায়, এর দুটি সম্ভাব্য ফলাফল রয়েছে:
- তাত্ক্ষণিকভাবে ত্রুটিটি ঘটলে, সার্ভার ক্লায়েন্টকে বলবে, যা অপারেশনটিকে ফিরিয়ে দেবে (প্লেয়ারটি অপারেশনটিকে পূর্বাবস্থায় ফিরে দেখায়)।
- ইউআই বলে যে প্লেয়ারটির একটি আইটেম রয়েছে তবে সার্ভার তাতে রাজি হয় না। যদি ব্যবহারকারী এটি ব্যবহার করার চেষ্টা করে তবে এটি সার্ভারকে জিজ্ঞাসা করবে এবং ব্যর্থ হবে, জাল বস্তুটিকে অব্যবহারযোগ্য করে। জায়টি পুনরায় লোড করা হলে মিথ্যা বস্তুটি চলে যায়, যা মডেলটিকে সিঙ্ক্রোনাইজ করার সুযোগ হিসাবে ব্যবহৃত হয়।
উভয় ক্ষেত্রেই, ক্লায়েন্ট ত্রুটি সম্পর্কে অবগত এবং প্লেয়ার যা করছিল সেগুলি সহ এটি লগ করে ফেলবে। ক্লায়েন্ট সাইড লগিং সব সময় ঘটছে। তারপরে, লগআউটে, কোনও ত্রুটি থাকলে, ক্লায়েন্ট সার্ভারে লগগুলি প্রেরণ করে।
এই গেমটি বেশিরভাগ এমএমওআরপিজির dailyতিহ্যবাহী প্রতিদিনের বা সাপ্তাহিক রক্ষণাবেক্ষণের সময়টি ব্যবহার করে না। নির্ধারিত রক্ষণাবেক্ষণ প্রায়শই কাউন্টার, টাইমার, ডেটাবেস পদ্ধতি চালাতে ব্যবহৃত হয়। এগুলি আপডেটের জন্য সার্ভার সংস্করণগুলিকে অদলবদল করারও সুযোগ।