"যুক্তিসঙ্গতভাবে বড়" পরিমাণে ডেটা সংরক্ষণের ব্যবহারিক উপায় যা খুব কমই পরিবর্তন হয়?


14

প্রাক-গণিত লক টেবিল বা কিছু হিসাবে বিবেচনা করুন। আমার অ্যাপ্লিকেশনটিতে হার্ডকোডিং মানগুলির পরিবর্তে কোন ডাটাবেস ব্যবহার করা আরও বেশি অর্থবোধ করে? মানগুলি বদলাচ্ছে না এবং এগুলি রক্ষণাবেক্ষণ বিকাশকারীদের থেকে খুব ভালভাবে আলাদা করা হয়েছে। 100 মান, 1 কে, 10 কে, 100 কে? আমি প্রায় 40k মান সংরক্ষণ করতে চাই। এখনই এটি একটি মেশিন দ্বারা উত্পাদিত switchবিবৃতি (যা ভিএস 2010 অসন্তুষ্ট)।

সম্পাদনা:

যদি কেউ কৌতূহলী হন তবে আমি এখানে এটি কীভাবে পৌঁছেছি: আমার ডেটা দুটি 100 কে-এলিমেন্টের ভাসমান অ্যারে স্থির ছিল, তাই আমি এটি করেছি। ডেটা তৈরি করতে প্রায় 20 সেকেন্ড সময় লেগেছে, তাই আমি এটি একবার করেছিলাম এবং এটি বাইনারি ফর্ম্যাটর সহ এম্বেডড রিসোর্সে সিরিয়ালযুক্ত করেছি। অ্যাপ্লিকেশন শুরুতে ডেটা আনপ্যাক করা প্রায় 5 মিলিসেকেন্ড লাগে এবং প্রায় 45,000x দ্বারা আমি যে ডাটাবেস বাস্তবায়নটি প্রতিস্থাপন করছিলাম তা প্রতিস্থাপন করে (এই হার্ড-কোডিং মানগুলি আগে সেখানে সংরক্ষণ করা হয়েছিল)।

উত্তর:


5

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

আমি আপনাকে সুপারিশ করব যে আপনি স্যুইচ স্টেটমেন্টটি ব্যবহার করবেন না কারণ এটি বজায় রাখা খুব কঠিন হবে এবং এর ফলে একটি বৃহত্তর এক্সি পাদচালানের ফলস্বরূপ।

হ্যাশ-টেবিল যেমন http://support.microsoft.com/kb/309357


শেষ পর্যন্ত আমি যা করেছি তা হল: আমার আপডেট হওয়া পোস্টটি পরীক্ষা করুন।
ব্রায়ান বোয়েচার

1
ডাটাবেস পরামর্শের জন্য +1। ডাটাবেসগুলি বড় ডেটা ভলিউম সংরক্ষণ করার জন্য তৈরি করা হয় এবং আপনাকে এগুলি খুব দ্রুত আনতে দেয়।
NoChance

হ্যাশ টেবিলের চেয়ে এর জন্য অভিধান ব্যবহার করা কেন ভাল on সে সম্পর্কে স্ট্যাকওভারফ্লো . com/ প্রশ্নগুলি / 13০১71১71 / দেখুন দেখুন । ওয়াইএমএমভি
ক্রিস ম্যাককি

6

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

তবে, সি # স্যুইচ স্টেটমেন্ট ব্যবহার করে ডেটা সংরক্ষণ এবং অ্যাক্সেস করা বরং খারাপ অভ্যাস, যেহেতু দৃly়ভাবে দম্পতিদের মধ্যে ডেটা স্টোরেজ এবং ডেটা অ্যাক্সেস মডেল থাকে এবং কেবলমাত্র একটি পদ্ধতি অ্যাক্সেস পদ্ধতি (সুইচ প্যারামিটার দ্বারা) বোঝায়।

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

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

এই জাতীয় ক্ষয়ের একটি দুর্দান্ত সুবিধা হ'ল আপনি নিজের ডেটাতে অনেকগুলি ভিউ প্রয়োগ করতে পারেন, XXXk লাইনগুলি স্পর্শ না করে, যা সেই ডেটাটিকে সংজ্ঞায়িত করে।


আমি কিছু উদাহরণ দিয়ে উত্তর প্রসারিত করেছি।
ভ্যালেরা কলুপাইভ

2

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


2

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


1

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

সংখ্যাটি যখন কোনও ডিবি-এর স্যুইচ করার জন্য ঠিক তখনই যখন কোনও ডিবি ব্যবহার না করা সমস্যা হয়ে ওঠে।


আমি আমার ইন্টারফেস বাস্তবায়ন encapsulates যে চিন্তা প্রশংসা: এটি সম্ভবত অবশ্যই। কার্যকারিতাটি এক- GetValuesForInputটাইপ পদ্ধতির মাধ্যমে উদ্ভাসিত হয় এবং আমার বিশাল বিবৃতিটি বাস্তবায়নের মধ্যে গোপন থাকে।
ব্রায়ান বোয়েচার

1

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


1

আমি মনে করি এখানে মূল শব্দটি 'শক্তভাবে'

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

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


1
এটি সংকলকটি কতটা ভাল তার উপর নির্ভর করে। ডেলফিতে একটি কেস স্টেটমেন্ট অত্যন্ত দক্ষ হতে পারে।
লরেন পেচটেল

1

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

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

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

ডেটা এবং কোড পৃথক করা একটি বিশেষ অনুশীলন বিশেষ করে যদি ডেটা বড় হয়।

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