এমএমও সার্ভারগুলির জন্য গেম লগ ফর্ম্যাট


12

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

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

তবে কাস্টম বাইনারি লগ ফর্ম্যাটগুলি তৈরি করতে শেখা শুরু করার বিষয়ে আমি নিশ্চিত নই। কাস্টম লগ ফর্ম্যাট তৈরি করার বিষয়ে, বা বিষয়টিতে কোনও প্রস্তাবিত কাগজপত্র / নিবন্ধগুলি নিয়ে আপনার অভিজ্ঞতাগুলি কী?

উত্তর:


7

ইন স্তেনধাল আমরা সারিতে খেলা ঘটনা যুক্ত করা এবং তারপর তাদের প্রক্রিয়াকরণের দ্বারা কার্য-সম্পাদনার সমস্যা মীমাংসিত পটভূমিতে অ্যাসিঙ্ক্রোনাস

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

তবে লগ লিখতে সমস্যা হ'ল এক দিক:

লগগুলি দিয়ে আপনি কোন প্রশ্নের উত্তর দিতে চান?

কালানুক্রমিকভাবে সম্পূর্ণ লগটি কেবল পড়া সহজ; বা এক খেলোয়াড়ের জন্য এটি ফিল্টার।

তবে এর মতো প্রশ্ন থাকতে পারে:

  • গতকাল বেথ কর্তৃক অ্যানটন কোন আইটেম মাটিতে ফেলেছিল? কোন খেলোয়াড় এখন তাদের মালিক? (আন্তন তার আইটেমটি চুরি হয়ে যাওয়ার বিষয়ে অভিযোগ করেছিল)
  • একটি গড় খেলোয়াড়ের 100 স্তরে পৌঁছতে কত সময় প্রয়োজন? কোন খেলোয়াড় উল্লেখযোগ্যভাবে দ্রুত হয়েছে? শুধুমাত্র প্রথম চরিত্রের জন্য?
  • এমন খেলোয়াড়রা আছেন যারা বিপুল পরিমাণে গেম-মানি পরিচালনা করেন? এটি কোন খেলোয়াড়ের কাছে পাস হয়? বিনিময়ে মূল্যবান কিছু ছাড়া?
  • দুর্বল খেলোয়াড়রা কি এমন শক্তিশালী প্রাণীকে হত্যা করতে সক্ষম হয় যে তারা আইনত হত্যা করতে সক্ষম হবে না?
  • ...

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

আমাদের গেমসেন্টস টেবিলটিতে 51,429,139 টি সারি রয়েছে (গত বছর) এবং আমাদের একটি ডেডিকেটেড আইটেলগ টেবিল রয়েছে যার মধ্যে 15,893,831 আইটেমের জন্য 60,360,657 সারি (সর্বদা) রয়েছে।


আপনার ডেটাবেসের সাহায্যে কত দ্রুত অনুসন্ধান করা হচ্ছে? আমি লগ সহ একইসাথে ডেটাবেস পেয়েছি এবং তিনমাসে আমরা প্রায় 100,000,000 সারি পরে পেয়েছি। আমরা স্টোরেজ হিসাবে মাইএসকিউএল ব্যবহার করি এবং এর কার্যকারিতা খারাপ। সাধারণ ক্যোয়ারী যা প্লেয়ারের সমস্ত ক্রিয়াকে তালিকাবদ্ধ করে (কেবলমাত্র ২০,০০০) সারি প্রায় 60 সেকেন্ডেরও বেশি সময় নেয়।
ব্যালন

1
সূচী কলামগুলিতে সরল প্রশ্নগুলি তাত্ক্ষণিক। জটিল প্রশ্নগুলি কিছুটা সময় নিতে পারে, 60 সেকেন্ডের ক্যোয়ারীগুলি ঘটে তবে সেগুলি খুব বিরল। আমরা টেবিলটিকে খুব ভারীভাবে সূচক দিয়েছি এবং সংযোজনীয়ভাবে এগুলি করে themোকানোর ক্ষেত্রে জরিমানার ক্ষতিপূরণ দিয়েছি।
হেন্ডরিক ব্রুমারম্যান

হুম আমি মনে করি যে আমার সমস্যাটি হ'ল ফলাফল সেটটি বেশ বড়, প্রায়শই একজন খেলোয়াড়ের জন্য 3000 থেকে 150000 রেকর্ডের মধ্যে থাকে। সুতরাং এটি এত দীর্ঘ সময় নেয় কেন এটি কারণ হতে পারে, কারণ এটি ছোট ফলাফলের সেটগুলির জন্য খুব দ্রুত কাজ করে।
ব্যালন

4

দক্ষতা বলতে কী বোঝ? এটি ডিস্কে বা ক্যোরির গতিতে আকারের হোক না কেন, একটি সম্পর্কযুক্ত ডাটাবেস আপনার মালিকানাধীন বাইনারি ফর্ম্যাটটিকে প্রায় হারিয়ে বা সমান করতে চলেছে এবং ব্যবহারে আরও সহজ এবং আরও নমনীয় হবে।

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

সুতরাং আমি যা পেয়েছি তার সাথে লেগে থাকার পরামর্শ দেব।


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

কাস্টম ইভেন্ট লগ সেটআপ কঠোর কালানুক্রমিক প্লেব্যাক আলা এফপিএস ডেমো রেকর্ডিংয়ের জন্য কার্যকর হবে, তবে এটি সমাধান করা খুব আলাদা সমস্যা। ব্যাপকভাবে মাল্টিপ্লেয়ার ক্লায়েন্ট-সার্ভার গেমসের জন্য ডেমো রেকর্ডিংয়ের অনুরূপ কিছু বিকাশের অভিজ্ঞতা কি কারও আছে?
চার্লস এলিস

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

3

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


0

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

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

সাধারণত গেমের ইভেন্টগুলি এ জাতীয় কিছু দেখায় (এটি বিশেষত ডেল্টাডিএনএর ফর্ম্যাট)

{
 "eventName":"specific event code – eg. gameStarted",
 "userID":"ABCD1-4321a879b185fcb9c6ca27abc5387e914",
 "sessionID":"4879bf37-8566-46ce-9f3b-bd18d6ac614e",
 "eventTimestamp":"yyyy-mm-dd hh:mm:ss.SSS",
 "eventParams":
  {
   "platform":"WEB",
   "param1":"stringParam",
   "param2":true,
   "param3":1234,
   "param4":["a","b","c"]
  },
}

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

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