এমএমওরপিজি ডেটা কীভাবে সঞ্চয় করে?


22

আমি আমার সার্ভার.অ্যাক্সে স্কিল ডাটাবেসটি ব্যবহার করতে চাই।

অনলাইনে 1000 ব্যবহারকারী বলতে দিন। এবং খেলোয়াড়রা যখন খেলবে তখন তাদের ডেটা পরিবর্তন করবে। এবং সার্ভারের এই আপডেটগুলি সংরক্ষণ করা দরকার।

কিন্তু কিভাবে ?

আমি সেখানে দুটি উপায় মনে করি:

1) সার্ভার রান সময় র‌্যামে সংরক্ষণ করবে এবং কোনও সময় বা ঘন্টার পর ঘন্টা সার্ভারটি এসএমএল থেকে ডেটা (আপডেট) র‌্যাম থেকে লিখবে। তবে বিদ্যুৎ চলে গেলে বা কোনওভাবে সার্ভার বন্ধ হয়ে গেলে আপডেটগুলি সংরক্ষণ করতে পারে না। অবশ্যই আমি আপডেটগুলি হারাতে চাই না।

2) সার্ভার রান সময় ডাটাবেস আপডেট আপডেট করবে। কিন্তু গতির কি হবে? আমি একটি পদ্ধতি চিন্তা। আমি আপনাকে চিত্র সহ নীচে দেখাব। এই পদ্ধতিতে আমি কি 1000 অনলাইন প্লেয়ারের জন্য পর্যাপ্ত গতি পেতে পারি? এখানে চিত্র বর্ণনা লিখুন


11
আপনি কোন মানদণ্ড করেছেন? আপনার কী মনে করে ডাটাবেস অপারেশনগুলি আপনার গেমের জন্য একটি সমস্যা হয়ে উঠবে?
কংগ্রেসবঙ্গাস

3
যদি আপনার গেমের রাজ্যটি আসলে সম্পর্কিত হয়? আপনি কি নিশ্চিত যে আপনি একটি এসকিউএল ডাটাবেস চান?
মনিকা মনিকা

6
এছাড়াও হ্যাশগুলি ব্যবহার করে কীভাবে পাসওয়ার্ডগুলি হ্যান্ডেল করবেন তা দয়া করে পড়ুন। বা কমপক্ষে ব্যবহারকারীকে জানিয়ে দিন যে তাদের পাসওয়ার্ড সরল পাঠ্য হিসাবে সংরক্ষণ করা হচ্ছে, যাতে তারা অন্য সুরক্ষিত পাসওয়ার্ড ব্যবহার না করার বিষয়ে সচেতন হয়।
টমটস্যাগ্ক

24
পার্শ্ব নোট হিসাবে, আপনি যদি একটি বাণিজ্যিক এমএমও তৈরি করতে চান এবং আপনি এই জাতীয় প্রশ্ন জিজ্ঞাসা করছেন, আপনার সম্ভবত আরও ছোট কিছু দিয়ে শুরু করা উচিত। এমএমওগুলি মোটেও অবিশ্বাস্যরকম শক্ত, তাদের সঠিকভাবে করা যাক এবং ব্যবসার দৃষ্টিকোণ থেকে এগুলি দুর্দান্ত নয়। যদি এটি কেবল একটি ব্যক্তিগত জিনিস এবং আপনি উচ্চ-প্লেয়ার-কাউন্টে যেতে চান, players৪ জন খেলোয়াড়ের মতো কিছু শুরু করুন, তারপরে আপনার পথে কাজ করুন। কোনও অভিজ্ঞতা ছাড়াই স্ক্র্যাচ থেকে "নিখুঁত" আর্কিটেকচারটি ডিজাইনের চেষ্টা করার চেয়ে অনেক সহজ হবে। এই দেখুন ।
মনিকা এর মামলা মামলা

1
আপনি একটি সাধারণ এপিআই লিখতে পারেন যা স্টোরেজ অজোনস্টিক। তারপরে এমন একটি অ্যাডাপ্টার লিখুন যা বিলম্বিত স্টোরেজের জন্য র্যামে ডেটা ক্যাশে করে। অথবা আপনি অ্যাডাপ্টার লিখতে পারেন যা এসকিউএল ডিবিতে ফ্লাশ করার আগে অস্থায়ী ফাইলের ডেটা ক্যাশে করে। কোনটি সেরা তা সন্ধানের জন্য আপনি ক্যাশে চালু এবং বন্ধ করতে পারেন। আপনার খুব বেশি ম্যাস্ক অতিরিক্ত কোড লেখার দরকার নেই, যদি আপনি আপনার আর্কিটেকচারটি সঠিকভাবে নির্মিত হয়।
0xC0DEGURU

উত্তর:


37

বেশিরভাগ এমএমও (বা একই ধরণের আর্কিটেকচার ব্যবহার করে এমন প্রকল্পগুলি) আমি প্রথম পদ্ধতিটি ব্যবহার করেছি বা ব্যবহার সম্পর্কে জানতে পারি: গেম সার্ভারগুলি মূলত সার্ভার প্রক্রিয়াগুলি চালিত মেশিনগুলিতে র‌্যামের সাথে কাজ করে এবং পর্যায়ক্রমে কোনও এসকিউএল ডাটাবেসে প্রাসঙ্গিক গেমের ডেটা সিরিয়াল করে দেয় সংরক্ষণাগার জন্য (যদি একটি ব্যবহার করা হয়)।

পাওয়ার ব্যর্থতা সম্পর্কিত যে সমস্যাগুলি আপনি নোট করেছেন তা বৈধ, তবে প্রক্রিয়াটিতে ক্র্যাশ হওয়ার মতো সমস্যার তুলনায় কম সম্ভাবনা রয়েছে (আপটেম নির্ভরযোগ্যতা সাধারণত সেই জিনিসগুলির মধ্যে একটি যা আপনি ডেটাসেন্টারটি দিয়েছিলেন)। কিন্তু এখনো. সেভের ব্যবধানটি সুর করার মতো বিষয়গুলির মাধ্যমে আপনি এই বিষয়গুলি প্রশমিত করুন (সুতরাং ব্যর্থতা কেবল কয়েক মিনিটের অগ্রগতির জন্য ব্যয় হয়), একাধিক মেশিনে সেভ সারিগুলি বিতরণ করে, সংরক্ষণের জন্য প্রয়োজনীয় ডেটার পরিমাণ আক্রমণাত্মকভাবে বাদ দেয় এবং পুনরায় চালুযোগ্য সেভ বাস্তবায়ন করে like লাইনে দাঁড়িয়ে থাকতো।

সাধারণভাবে বলতে গেলে এসকিউএল সার্ভারটি নিজেই প্রধান মেমরি হিসাবে ব্যবহার করা অত্যন্ত বিরক্তিকর ধীর হতে চলেছে (এবং কষ্টকর)। আমি আপনার প্রস্তাবনায় পর্যাপ্ত বিশদটি দেখতে পাচ্ছি না এটি নিশ্চিত করে বলতে সক্ষম হতে যে এটি প্রায় 1000 খেলোয়াড়ের জন্যই কাজ করবে - এটি সম্ভবত ঠিক থাকবে fine তবে আমি বিশ্বাস করি না আপনি আক্রমণাত্মকভাবে স্কেলযোগ্য করতে পারবেন।

আরও, এটি সমস্যার সমাধান করে না। সংরক্ষণ প্রক্রিয়া চলাকালীন একটি শক্তি ব্যর্থতা তবুও একই ধরণের পুনরায় চালু করতে সক্ষম সংরক্ষণের সারিতে কার্যকর করার জন্য কাজ না করা হলে ডেটা হারাবে বা দূষিত হবে (যা তবুও কেবল বিপর্যয়কর ডেটা ক্ষতির সম্ভাবনা মারাত্মকভাবে হ্রাস করে, এটি এটিকে প্রতিরোধ করে না) ।

আমি আপনাকে প্রথম পদ্ধতির সাথে যেতে সুপারিশ করব।


10
"সেভ ব্যবধানটি সুর করার" বিষয়ে, আমি যে সর্বশেষ এমএমওতে কাজ করেছি তার সক্রিয় খেলোয়াড়ের সংখ্যার উপর ভিত্তি করে একটি সঞ্চয় ব্যবধান ছিল। আমরা জানতাম যে এটি লক্ষণীয় বাধা ছাড়াই প্রতি সেকেন্ডে এক্স প্লেয়ারদের ডেটা সংরক্ষণ করতে পারে, সুতরাং আমাদের কেবল এটি ঘোরানো ভিত্তিতে প্রতি সেকেন্ডে এক্স প্লেয়ারের অধীনে কিছুটা সংরক্ষণ করতে পেরেছিল। এটি ব্যস্ত দিনগুলিতে প্রতি দু'মিনিট বা ততোধিক সময় প্রতিটি প্লেয়ারের জন্য সেভ হয়ে যায় এবং ধীর সময়ে এক মিনিট দু'বার হতে পারে।
মিডবিটস

4
"রিস্টার্টেবল সেভ ক্যু" অনেকগুলি ফাইল সিস্টেম এবং ডাটাবেস ইঞ্জিন দ্বারা কার্যকর হিসাবে একটি জার্নালের মতো শোনাচ্ছে?
মহাকর্ষ

6
এই বিষয়গুলি এমএমও বা এমনকি ভিডিও গেমগুলির পক্ষে মোটেই অনন্য নয় । অস্তিত্বের প্রায় প্রতিটি ওআরএম কিছু ধরণের ক্যাশে / ব্যাচিং প্রক্রিয়া সরবরাহ করে। আপনার নিজের সমাধানটি রোল করার দরকার নেই।
ব্লুরাজা - ড্যানি প্লেফুঘুফুট

3
যদি আপনি কোনও নির্দিষ্ট বিরতিতে কোনও ডিস্কে সঞ্চয় করার কাজ শেষ করেন, আমি এমন একটি সিস্টেম ডিজাইনের পরামর্শ দেব যেখানে লোকেরা বিরল ড্রপ / ডাই / ইত্যাদির সাথে সাথেই জিনিসগুলি সংরক্ষণ করা যায় can এইভাবে, যদি কোনও সার্ভার ক্র্যাশ বা কিছু থাকে তবে বড় বড় কিছু সম্পন্ন লোকেরা খুব মন খারাপ করবে না।
জন

5
@ জন, এবং তারপরে আপনি লোকেদের অনুলিপি তৈরি করতে সক্ষম হওয়ার সমস্যায় পড়ে। আদর্শভাবে, আপনি একক লেনদেন হিসাবে পুরো গেমের রাজ্যকে পর্যায়ক্রমে সংরক্ষণ করেন। আপনি একবার টুকরো টুকরো সংরক্ষণ শুরু করার পরে, আপনি এমন পরিস্থিতিতে বাছাই করবেন যেখানে ক্র্যাশ হওয়ার ফলে অসংগতিযুক্ত ডেটা হতে পারে; যে খেলোয়াড়রা চাহিদা অনুযায়ী ক্র্যাশটিকে ট্রিগার করতে পারে, বা ক্র্যাশ হওয়ার সম্ভাবনা রয়েছে তার আগেও ভবিষ্যদ্বাণী করতে পারে এমন খেলোয়াড়রা তাদের সুবিধার্থে এটি কাজে লাগাতে পারে।
চিহ্নিত করুন

15

1000 প্লেয়ার সমস্যা হতে পারে বা নাও করতে পারে। এটি আপনাকে কত ঘন ঘন ডাটাবেস আপডেট করার প্রয়োজন তার উপর নির্ভর করে। তবে একটি সহজ সমাধান রয়েছে: এটি নিজের সার্ভারে ডাটাবেস রাখুন।


আমি কীভাবে ডেটাবেস সিস্টেমটি এমন একটি গেম কাজ করে যা লোকেরা একটি এমএমও-লাইট কল করবে - এটিকে আমি প্রকাশ করব না - আমি এখনও এটি বলতে পারি যে এটি ধারাবাহিকভাবে 1000 এরও বেশি খেলোয়াড় রয়েছে, এটি বিমূর্ততা:

  • তারা ব্যক্তিগত চরিত্রের তথ্যের জন্য তালিকাভুক্ত "নো-এসকিউএল" ডাটাবেস ব্যবহার করে (জায়, সরঞ্জামাদি, অনুরূপ)।
  • তারা জনসাধারণের অক্ষর সম্পর্কিত তথ্যের জন্য আরও traditionalতিহ্যবাহী রিলেশনাল ডাটাবেস ব্যবহার করে যা খুব কমই আপডেট হয় (নাম, অর্জন, ইত্যাদি ...) এবং পরিসংখ্যান।

ডকুমেন্ট ভিত্তিক ডাটাবেস ব্যবহার করা এই ক্ষেত্রে পারফরম্যান্সের জন্য একটি ভাল ধারণা হতে পারে। যোগদান এবং সমষ্টিগুলি করা খারাপ হলেও এটি ডেটা অ্যাক্সেসের পক্ষে ভাল ... তবে তারা সেখানে থাকা ডেটা দিয়ে তা করবে না।

অন্যদিকে, যখন তাদের প্রত্যেকের জন্য অন্য বস্তুর সাথে কোনও বস্তু পরিবর্তন করার মতো কিছু করা দরকার, তখন একটি ব্যাকগ্রাউন্ড স্ক্রিপ্ট চালানো দরকার যা চরিত্র অনুসারে অক্ষরে চলে এবং সেগুলি একে একে আপডেট করে, এটি লক্ষণীয় সময় নেয়।


চরিত্রের ডেটা ক্লায়েন্ট এবং সার্ভারে উভয়ই বিদ্যমান এবং উভয় পক্ষের একই ক্রিয়াকলাপ সম্পাদন করে সিস্টেমটি তাদের সিঙ্কে রাখার জন্য ডিজাইন করা হয়েছে।

এখন, যখন কোনও খেলোয়াড় সিস্টেমের সাথে লেনদেন করে - বলুন NPC বা এর অনুরূপ মাধ্যমে অন্যের জন্য কোনও আইটেম এক্সচেঞ্জ করুন - এর এই পর্যায়ে রয়েছে:

  • অপারেশনটি বৈধ কিনা তা ক্লায়েন্টরা পরীক্ষা করে
  • ক্লায়েন্ট সার্ভারে অপারেশন প্রেরণ করে (async অপারেশন)
  • ক্লায়েন্ট তার মডেলটি র‍্যামে আপডেট করে
  • অপারেশনটি বৈধ কিনা সার্ভারটি পরীক্ষা করে
  • সার্ভারটি তার মডেলটি র‍্যামে আপডেট করে
  • সার্ভারটি ডাটাবেস আপডেট করে (async অপারেশন)
  • সার্ভার ক্লায়েন্টকে বলে যে পরিবর্তনটি ঘটেছে

দ্রষ্টব্য :

  • ডাটাবেস আপডেটগুলি, যদিও অ্যাসিঙ্ক, ঠিক এখনই সম্পন্ন হয়। গেম সার্ভার যে কোনও কারণে নিচে গেলে, খুব বেশি ক্ষতি হয় না।
  • পারফরম্যান্স অবক্ষয় তাদের নিজস্ব সার্ভারে ডাটাবেস স্থাপন করার জন্য কোনও বড় বিষয় নয়।

খেলোয়াড়দের মধ্যে ট্রেডগুলি একইভাবে পরিচালনা করা হয়, খেলোয়াড়দের অন্য খেলোয়াড়দের কেলেঙ্কারী প্রতিরোধ করার জন্য অতিরিক্ত নিয়ম এবং কোনও লেনদেন পূর্বাবস্থায় ফিরে যাওয়ার প্রয়োজন হলে অতিরিক্ত ট্রেসিবিলিটি। শুনেছি সমস্ত লেনদেনের বিশেষ লগ রয়েছে যা কিছু সময়ের জন্য রাখা হয় (যখন কেউ অভিযোগ করেন তখন সমস্যাগুলি সমাধান করতে), আমি জানি না যে অংশটি কীভাবে কাজ করে সে সম্পর্কে আমি আরও জানি না।


কখনও কখনও কিছু ভুল হয়ে যায়, এর দুটি সম্ভাব্য ফলাফল রয়েছে:

  • তাত্ক্ষণিকভাবে ত্রুটিটি ঘটলে, সার্ভার ক্লায়েন্টকে বলবে, যা অপারেশনটিকে ফিরিয়ে দেবে (প্লেয়ারটি অপারেশনটিকে পূর্বাবস্থায় ফিরে দেখায়)।
  • ইউআই বলে যে প্লেয়ারটির একটি আইটেম রয়েছে তবে সার্ভার তাতে রাজি হয় না। যদি ব্যবহারকারী এটি ব্যবহার করার চেষ্টা করে তবে এটি সার্ভারকে জিজ্ঞাসা করবে এবং ব্যর্থ হবে, জাল বস্তুটিকে অব্যবহারযোগ্য করে। জায়টি পুনরায় লোড করা হলে মিথ্যা বস্তুটি চলে যায়, যা মডেলটিকে সিঙ্ক্রোনাইজ করার সুযোগ হিসাবে ব্যবহৃত হয়।

উভয় ক্ষেত্রেই, ক্লায়েন্ট ত্রুটি সম্পর্কে অবগত এবং প্লেয়ার যা করছিল সেগুলি সহ এটি লগ করে ফেলবে। ক্লায়েন্ট সাইড লগিং সব সময় ঘটছে। তারপরে, লগআউটে, কোনও ত্রুটি থাকলে, ক্লায়েন্ট সার্ভারে লগগুলি প্রেরণ করে।


এই গেমটি বেশিরভাগ এমএমওআরপিজির dailyতিহ্যবাহী প্রতিদিনের বা সাপ্তাহিক রক্ষণাবেক্ষণের সময়টি ব্যবহার করে না। নির্ধারিত রক্ষণাবেক্ষণ প্রায়শই কাউন্টার, টাইমার, ডেটাবেস পদ্ধতি চালাতে ব্যবহৃত হয়। এগুলি আপডেটের জন্য সার্ভার সংস্করণগুলিকে অদলবদল করারও সুযোগ।


ধন্যবাদ, কিন্তু উদাহরণস্বরূপ আন্দোলন কি খেলোয়াড়দের সম্পর্কে তার বর্তমান অবস্থান থেকে একটি প্লেয়ার প্যাচসমূহ যদি: x:10,y:10,z:10করতে x:11,y:11,z:11, এই ডাটাবেসের মধ্যে সংরক্ষণ করা হবে এখুনি? খেলোয়াড় যদি চলতে থাকে তবে তার অর্থ আমরা তার বর্তমান অবস্থানটি প্রতি 1 সেকেন্ড বা তারও কম সংখ্যক সংরক্ষণ করি এবং যদি কয়েক হাজার খেলোয়াড় থাকে তবে এটি প্রতি সেকেন্ডে ডিবি-র লক্ষ লক্ষ কোয়েরি। এটি কি এইভাবে কাজ করে?
dwix

2
প্লেয়ারের অবস্থানটি খুব কমই ডাটাবেসে সংরক্ষণ করা উচিত। আপনি কেবল চাইবেন যে বিশেষ ইভেন্টগুলিতে মেনু খোলার মতো, ক্যাম্পফায়ার শুরু করা, বিশ্রাম নেওয়া ইত্যাদি the গেমের উপর নির্ভর করে এটি এমনকি সেই বিশদটি সংরক্ষণ করা যাবে না। কিছু গেম আপনাকে সর্বদা নিকটবর্তী শহরে ইত্যাদিতে পরিণত করে তোলে, যাতে এটি অবস্থানটি সংরক্ষণের ঝামেলাও বাঁচায়। তবে সেই মতামত ভিত্তিক পরিবর্তিত হয়।
নিকো

1
@ ডুইক্স আমি যে গেমটির কথা বলি, খেলোয়াড়ের অবস্থান এমনকি সেভ করা যায় না। আপনি যদি লগ আউট এবং লগ ইন করেন বা সার্ভারটি ডাউন হয়ে যায় তবে প্লেয়ারটিকে নিরাপদ পরিচিত অবস্থানে ফিরিয়ে দেওয়া হবে (সম্পাদনা করুন: এটি একটি ব্যক্তিগত উদাহরণ, যদি আপনি চান তবে "বাড়ি", তবে এটি সবার জন্য একই)। তবে কিছু গেম খেলোয়াড়ের সঠিক অবস্থান ধরে রাখে, এমনকি দুর্ঘটনাজনিত সংযোগ বিচ্ছিন্নও across এটি করার জন্য, সাধারণ অ্যাপ্রোচ সেই তথ্যটি কম ঘন ঘন সঞ্চয় করে। নির্বিশেষে, আপনি সার্ভারটি ডাটাবেসে অপেক্ষা করছেন তা করবেন না।
থেরোট

1
@ দ্ব্বিক্স যখন অবতারের অবস্থান সম্পর্কে কথা বলছেন, আপনি কি historicalতিহাসিক মূল্যবোধের বিষয়ে সত্যই চিন্তা করেন না, তাই না? ঠিক আছে, ডাটাবেসটি যদি বোতল ঘাড় হয়, তবে ডেটা থ্রোট্ট করুন। প্রতিটি সার্ভারের টিক সংরক্ষণ করার পরিবর্তে কম ঘন ঘন সঞ্চয় করুন। এর অর্থ হ'ল ডাটাবেসটিতে সর্বাধিক আপ টু ডেট মান থাকবে না, তবে এটি এত বেশি কার্য সম্পাদনকে প্রভাবিত করবে না। এদিকে সার্ভারটি এখনও আপডেটের মানটি র‍্যামে রাখবে এবং এটি এর সাথে কাজ করে। সংযোজন: সত্যই আমি অবস্থানগুলি সংরক্ষণের বিরুদ্ধে পরামর্শ দেব, তবে কিছু গেম এটি করে।
থেরোট


7

উভয় পন্থা এমএমওআরপিজি ব্যবহার করা হয়। মেমরিতে সমস্ত কিছু রাখা এবং পর্যায়ক্রমে ডিস্কে এটি নির্দেশ করা যাচাই করা কমপক্ষে পুরানো গেমগুলির জন্য সর্বাধিক জনপ্রিয় বিকল্প বলে মনে হয়। মোটামুটি ভাল প্রয়োগ ও স্কেলিং করা মোটামুটি সহজ হওয়ার সুবিধা রয়েছে তবে এটি নির্ভরযোগ্য করে তোলা সম্পূর্ণ বিকাশকারীকে করতে পারে। এসকিউএল ডাটাবেসগুলি এসিডি বৈশিষ্ট্যগুলি সরবরাহ করে যা নির্ভরযোগ্যতা সহজ করে তোলে তবে ভাল প্রয়োগের জন্য সামগ্রিকভাবে আরও জটিল এবং স্কেলিংয়ের ক্ষেত্রে সমস্যা হতে পারে।

ইভটি অনলাইন একটি এমএমওর একটি উদাহরণ যেখানে সবকিছু এসকিউএল ডাটাবেসে সংরক্ষিত থাকে। আমি মনে করি এটি প্রায় 60,000 একসাথে ব্যবহারকারীদের কাছে পৌঁছেছে এবং লোডটি ধরে রাখতে কয়েক বছর ধরে ডাটাবেস সার্ভারগুলিতে কিছু ব্যয়বহুল হার্ডওয়্যার উত্সর্গ করতে হয়েছিল। তবে ইভিই বেশিরভাগ এমএমওআরপিজির তুলনায় ব্যবহারকারীর জন্য প্রচুর পরিমাণে ডেটা সঞ্চয় করে এবং অনেক বেশি ঘন এবং বিবিধ লেনদেন করে। ডাটাবেসের এসিডি বৈশিষ্ট্যগুলি পুরো বৃহত এবং জটিল ডাটাবেসটিকে সর্বদা একটি সামঞ্জস্যপূর্ণ অবস্থায় রাখতে দেয়।

উদাহরণস্বরূপ, যখন কেউ অন্য খেলোয়াড়কে আইটেম দেয় তখন কেসটি বিবেচনা করুন। ইভির ডেটাবেস গ্যারান্টি দেয় যে ক্র্যাশ বা পাওয়ার ব্যর্থতা এমনকি আইটেমটি কেবলমাত্র একটি প্লেয়ারের ইনভেস্টরিতে শেষ হয়। তা হ'ল, ডাটাবেস লেনদেন যা আইটেমটি একটি প্লেয়ারের ইনভেন্টরি থেকে সরিয়ে দেয় এবং এটিকে অন্য খেলোয়াড়ের সাথে যুক্ত করে তা হল পারমাণবিক। লেনদেন হয় সম্পূর্ণরূপে সম্পূর্ণ হয় বা হয় না। আপনি কোনও রাজ্যে শেষ করতে পারবেন না যদি আইটেমটি খেলোয়াড়ের তালিকা বা উভয় ক্ষেত্রেই না থাকে।

একটি এমএমওআরপিজি যা প্লেয়ারের ডেটা মেমরিতে রাখে এবং পর্যায়ক্রমে চেকপয়েন্টগুলিতে এটি নিজেকে এই পারমাণবিকতা প্রয়োগ করতে হয়। এটি করার একটি উপায় হ'ল একই সাথে প্রতিটি প্লেয়ারের ডেটা চেকপয়েন্ট হবে, এটি নিশ্চিত করে যে নতুন চেকপয়েন্টটি অতি সাম্প্রতিক চেকপয়েন্ট হিসাবে বিবেচিত হওয়ার আগে ডিস্কের প্রতি সম্পূর্ণ প্রতিশ্রুতিবদ্ধ। গেমটি নিশ্চিত করতে হবে যে প্লেয়ারের ডেটা চেকপিসড হওয়ার সময় পরিবর্তিত হতে পারে না। প্রচুর পরিমাণে সক্রিয় খেলোয়াড়ের সাথে, চ্যালেঞ্জটি এতক্ষণে দেরি না করেই এই সমস্ত করছে যে খেলোয়াড়রা খেয়াল করবে।

ধারাবাহিকতা কতটা গুরুত্বপূর্ণ তা অবমূল্যায়ন করবেন না। আপনি যখন আপনার গেমটি বিকাশ করছেন তখন এটি অনেকটা ক্র্যাশ হয়ে যাবে। আইটেমগুলি কেন অদৃশ্য হয়ে যাচ্ছে এবং / বা সদৃশ হচ্ছে তা আপনি খুঁজে বের করতে চাইবেন না, যখন সমস্যাটি কোনও সম্পর্কযুক্ত সমস্যার কারণে খারাপ সময়ে গেমটি ক্র্যাশ করছে তখন তা নয়। তদুপরি যখন আপনার গেমটি লাইভ হয়, তখন এটি আপনি যেভাবে প্রত্যাশা করেছিলেন তার চেয়ে বেশি ক্রাশ হবে। আপনার সার্ভার যা পরীক্ষার অধীনে পুরোপুরি পরিচালিত হয়েছিল, হঠাৎ করেই পুরো লোড এবং প্লেয়ারদের এমন করণীয় যা আপনি তাদের প্রত্যাশা করেননি তার অধীনে অসংখ্য বাগগুলি উন্মোচিত করবে।

মনে রাখবেন যে বেশিরভাগ এমএমওআরপিজি প্রকৃত গেম ডেটার জন্য না থাকলেও অ্যাকাউন্ট সম্পর্কিত তথ্যের জন্য এসকিউএল ডাটাবেস ব্যবহার করে। গেমের রাজ্যটিকে ধারাবাহিক অবস্থায় রাখার চেয়েও গুরুত্বপূর্ণ, বিলিং রাষ্ট্রকে ধারাবাহিক রাখা। গেমের ডাটাবেসটি দূষিত হওয়ার জন্য সবচেয়ে খারাপ ক্ষেত্রে হ'ল আপনাকে প্রতিদিনের ব্যাকআপ থেকে ডাটাবেসটি পুনরুদ্ধার করতে হবে। অ্যাকাউন্ট ডেটাবেস দূষিত হওয়ার জন্য সবচেয়ে খারাপ ক্ষেত্রে হ'ল সমস্ত চার্জব্যাকের কারণে আপনি দেউলিয়া হয়ে যান।

আপনার প্রকল্পের জন্য আপনি সম্ভবত যে কোনও পথে যেতে পারেন। একযোগে 1000 জন ব্যবহারকারী সম্ভবত এসকিউএল সার্ভারের কোনও পণ্য পিসিতে কী পরিচালনা করতে পারে তার সীমাটি সরিয়ে ফেলবে না, তবে অনেকগুলি লেনদেনের প্রকৃতির উপর নির্ভর করবে। আপনি যদি এসকিউএল এবং রিলেশনাল ডাটাবেস ডিজাইনের সাথে পরিচিত হন তবে এটি আপনার পক্ষে কাজ করতে পারে। আপনি লেনদেনকে যথাসম্ভব হ্রাস করতে চাইবেন, প্লেয়ার বর্তমানের হিটপয়েন্টগুলির মতো কোনও কারণে আপনি কেবল সময়ে সময়ে এটি ডাটাবেসে সংরক্ষণ করতে চান যেহেতু এই জাতীয় পরিসংখ্যানগুলি অগত্যা সামঞ্জস্যপূর্ণ হওয়ার প্রয়োজন নেই। (পিভিপি গেমগুলিতে তারা সম্ভবত ...) ডেটাবেজে দানব এইচপি জাতীয় জিনিসটি মোটেও সংরক্ষণ করবেন না, বেশিরভাগ গেমগুলিতে কেবল প্লেয়ার সম্পর্কিত ডেটা অবিরত থাকে।

অন্যদিকে আপনি যদি এসকিউএল উইজার্ড না হন তবে আপনি নির্ভরযোগ্যতার সাথে কাজ করার জন্য মেমরিতে সমস্ত ডেটা রাখার বিষয়টি আরও সহজ পেতে পারেন। এসকিউএল ডাটাবেসগুলি ধারাবাহিকতা এবং নির্ভরযোগ্যতা সহজ করে তোলে তবে এটি স্বয়ংক্রিয় নয়। একটি খারাপভাবে ডিজাইন করা ডাটাবেসটি খারাপভাবে সম্পাদন করতে পারে এবং অসঙ্গতিগুলির দিকে নিয়ে যেতে পারে। আপনি যদি না করেন তবে লেনদেনগুলি পারমাণবিক হবে না। যদি আপনি ধর্মীয়ভাবে প্যারামিটারাইজড স্টেটমেন্ট ব্যবহার না করেন তবে আপনি নিজেকে এসকিউএল ইঞ্জেকশন আক্রমণে খুলবেন।


0

বিভিন্ন গেমস বিভিন্ন উপায়ে জিনিস সঞ্চয় করে। প্রায়শই গেম সংস্থাগুলি এটি করার জন্য কিছু উপায় তৈরি করে এবং তাদের বেশিরভাগ গেম একই পদ্ধতি ব্যবহার করে। অবশ্যই, বিভিন্ন স্টুডিওগুলি প্রায়শই বিভিন্ন উপায়ে ব্যবহার করে। এসকিউএল অবশ্যই গেমসের জন্য ব্যবহৃত হয়, যেমন সিসিপি (ইভি) এসকিউএল সার্ভারের একটি নেটওয়ার্ক (বা কমপক্ষে ছিল) পেয়েছিল, এখন তারা কীভাবে এটি করে তা আমি নিশ্চিত নই। অন্যরা, কেবল প্রচুর ফাইল ব্যবহার করুন।

বিভিন্ন গেমের ডেটা লেনদেন পরিচালনা করতে, অজগনীয় "ডেটা ব্রোকার মেকানিজম" তৈরি করে শুরু করতে পারেন? যেহেতু আপনি কেবল যাইহোক পরীক্ষা করছেন, তাই এমন একটি ব্যবস্থা তৈরি করুন যা আপনাকে গেমের নিজস্ব দৃষ্টিকোণ থেকে স্টোরেজ সম্পর্কে খুব বেশি যত্ন নেওয়ার প্রয়োজন না করে তোলে। অর্থ, হোস্ট অ্যাপ্লিকেশন থেকে কীভাবে মনোনিবেশ করুন আপনি এটি পরিচালনা করতে চলেছেন।

ব্যক্তিগতভাবে আমি মনে করি যদি আপনি গেমটি এবং ব্রোকার নিজেই পুনর্লিখন না করে প্রকৃত স্টোরটি স্যুইচ করতে পারেন তবে এটি দুর্দান্ত সম্পদ হবে। ব্রোকারের সাথে কথা বলার জন্য একই ইন্টারফেস সহ কেবলমাত্র অন্য মডিউলে স্যুইচ করুন।

নিজেই ডেটা সংরক্ষণ করার বিষয়টি সম্ভবত কোনও সমস্যা হতে পারে না se হোস্ট এবং সমস্ত ক্লায়েন্টের মধ্যে / স্টোর থেকে / দক্ষতার সাথে ডেটা শিপিং, আরও জটিল হতে পারে। আমি কি পুরো প্লেয়ারের ডেটা সেটটি শিপ করে থাকি, বা যদি আমি এটিকে কিছু অংশে বিভক্ত করি, তবে আমি কোন গ্রানুলারিটিটি ভাগ করে নেওয়ার জন্য বেছে নেব ইত্যাদি Which কোনটি কোন পরিস্থিতিতে আরও সংস্থার নিবিড় etc.

ডেটা পাঠাতে একটি ফর্ম্যাট, এক্সএমএল হতে পারে। আপনি কীভাবে এটিকে আরও সঙ্কুচিত করতে পারেন সেভাবে আপনি আরও সহজেই গতিশীল হতে পারেন। এক অক্ষর বনাম একাধিক অক্ষর বা আইটেমের সংগ্রহ বনাম একটি আইটেম ইত্যাদি আপনি এক্সএমএলকে এক্সএমএল হিসাবে (এসকিউএল) সংরক্ষণ করতে পারেন এবং / অথবা এসকিউএল এটি এক্সএমএল থেকে আরও লেনদেনের ফ্যাশনে বিতরণ করতে পারেন আপনি আসলে কীভাবে ডেটা সঞ্চয় করতে চান।

আর একটি উপায় বাইনারি, যা শিপিংয়ের ক্ষেত্রে আরও দক্ষ, তবে অন্যান্য পরিস্থিতিতে আরও বেশি ব্যয় করতে পারে।

১,০০০ ক্লায়েন্টের সাথে, আপনি শুরু করতে এবং সহজেই প্রতি ক্লায়েন্টে 10 এমবি সঞ্চয় করতে পারেন এবং কেবল 10 গিগাবাইট কার্যকর র‌্যাম ব্যবহার করতে পারেন that তথ্যটি পরিচালনার জন্য কিছু সিস্টেম প্রশাসনিক র‌্যাম যুক্ত করুন, অন্য কোনও জিবি বা দুটি বলুন। আপনি ইতিমধ্যে ব্যবহারের জন্য ডেটা কাঠামোতে হোস্টে র‌্যাম রাখতে পারেন। এবং ক্রিয়াকলাপের উপর নির্ভর করে বিভিন্ন ফ্রিকোয়েন্সিগুলিতে অনলাইনে কে নির্ভর করে ডায়নামিকভাবে লোড / সেভ করুন online

এমনকি আপনি প্রতিটি ক্লায়েন্টের তথ্য একটি পৃথক ফাইলে সংরক্ষণ করতে পারেন ইত্যাদি।


0

* অনলাইনে * প্লেয়ারগুলিকে র‌্যামে রাখুন এবং লগ আউট করার সময় তাদেরকে একটি ডাটাবেসে (এসকিউএলাইট? মাইএসকিউএল?) চাপ দিন। যদি আপনি লগআউট চলাকালীন আইও স্টলিং সম্পর্কে উদ্বিগ্ন থাকেন তবে প্রতিটি লগআউটকে তার নিজস্ব থ্রেড দিন, মূল / গেমের থ্রেডে এটি করবেন না (আসলে আমি প্রতিটি অনলাইন প্লেয়ারের জন্য ডেডিকেটেড প্লেয়ার থ্রেড রাখি, এটি নেটওয়ার্কিং কোডটিকে এত সহজ করে দিয়েছে async নেটওয়ার্ক io পদ্ধতির চেয়ে)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.