2 ডি টাইল মানচিত্র সংরক্ষণের জন্য একটি ভাল ফ্ল্যাট ফাইল ফর্ম্যাট কী যা কোনও দিক থেকে অসীমভাবে বাড়তে পারে?


9

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

মানচিত্রের ডেটা সংরক্ষণ করার একটি ভাল উপায় কী, 0,0 উত্সে নোঙ্গর করা যাতে মানচিত্রের কোনও আয়তক্ষেত্র থেকে মানচিত্রের একটি আয়তক্ষেত্রাকার উপসেটটি দ্রুত এবং দক্ষতার সাথে লোড করা যায়?

আমার ধারণা রয়েছে যে সম্ভবত আমার মানচিত্রটিকে আলাদা আলাদা খাতে পরিণত করা উচিত এবং তারপরে ফাইলটিতে নির্দিষ্ট সেক্টরটি কোথায় সংরক্ষণ করা হয়েছে তা সনাক্ত করতে এক ধরণের শিরোলেখ বিন্যাস ব্যবহার করা উচিত। এটি কি একটি ভাল কৌশল বা আরও ভাল, আরও দক্ষ কৌশল রয়েছে যা আমি দেখতে পারি?

উত্তর:


7

আমি তাত্ত্বিকভাবে অসীম পরিমাণে ডেটার জন্য একটি একক ফ্ল্যাট ফাইল ব্যবহার করার বিরুদ্ধে পরামর্শ দেব।

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

আপনি যদি একাধিক ফাইল জুড়ে আপনার খণ্ডগুলি ছড়িয়ে দেন, (-110, 5000) এ অংশটি পাওয়া "" অ্যাপ্লিকেশন% / গেম / মানচিত্র / -110 / 5000.dat "(বা আপনি চান অন্য কোনও ফাইলের নাম বলার বিষয়) তাদের সংকোচন শুরু)। ডাটাবেসগুলিতে কেবল একটি কোয়েরি প্রয়োজন। যদি কোনও অংশে কোনও ডেটা না থাকে তবে আপনি কেবল কিছু সংরক্ষণ করতে পারবেন না। একটি একক ফ্ল্যাট ফাইল সরাসরি ব্যাট থেকে এলোমেলো অ্যাক্সেসের গতি এবং সুবিধার্থে অফার করে না।

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

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


4

সমাধানটি বেশিরভাগ ক্ষেত্রেই মনে হয় প্রচুর ফাইলগুলিতে বিভক্ত হয়ে গেছে, তবে আপনার প্রশ্নটি কেবল একটি ফাইলই বোঝায়। এর একমাত্র বুদ্ধিমান বিকল্পটি (আমার মতে) একক ফাইলের অভ্যন্তরে খুব সাধারণ ফাইল সিস্টেম অনুকরণ করা। এটি করা খুব কঠিন কাজ নয়, তবে আপনি যদি পারেন তবে আপনার একাধিক ফাইল ব্যবহার করা উচিত really

যদি আপনাকে একটি ফাইলের সাথে লেগে থাকতে হয় তবে আপনি ext2 fs থেকে আপনার প্রয়োগের অনুপ্রেরণা খুঁজে পেতে পারেন। http://en.wikedia.org/wiki/Ext2 আমি জানি যখন কোনও গেমের জন্য আমাকে একটি সাধারণ এফএস প্রয়োগ করতে হয়েছিল তখন এটি আমাকে কিছু ভাল সিদ্ধান্ত নিতে সহায়তা করেছিল।

তবে প্রকৃতপক্ষে, যে কোনও বর্ধমান মানচিত্রের জন্য, প্রতিটি "অ্যাক্সেসড" অংশের জন্য একটি ফাইল ব্যবহার করা ভাল।


4

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

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

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


আমি sqlite sqlite.org সন্ধান করার পরামর্শ দেব । এটি অত্যন্ত স্ব-অন্তর্ভুক্ত, সূচিকৃত, ব্লবগুলি পরিচালনা করে etc.
ড্যানিয়েল ব্লেজক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.