যে প্রকল্পে আমি কাজ করছি তাতে ডাটাবেসের কয়েকটি টেবিলের সারিগুলিতে প্রতিটি পরিবর্তন অবশ্যই পরবর্তী নিরীক্ষা বা রোলব্যাকের জন্য ট্র্যাক করা উচিত । সারিটি কে সংশোধন করেছে, কোন আইপি ঠিকানা এবং কখন, এবং পূর্ববর্তী সংস্করণটি পুনরুদ্ধার করতে সক্ষম হতে হবে তা অবশ্যই খুঁজে পাওয়া সহজ।
অনুরূপ জিনিস স্ট্যাক এক্সচেঞ্জ দ্বারা উদাহরণস্বরূপ ব্যবহৃত হয়। আমি যখন অন্য কারও প্রশ্ন পরিবর্তন করি, তখন এটি খুঁজে পাওয়া যায় এবং পরিবর্তনগুলি রোলব্যাক করা সম্ভব হয়।
আমার বর্তমান স্কীমার বেশিরভাগই একই বৈশিষ্ট্য (নীচে) গড়ে ওঠা একটি গড় ব্যবসায়িক অ্যাপ্লিকেশনটি দেওয়া একটি ডাটাবেসে কোনও সামগ্রীর প্রতিটি পরিবর্তন সংরক্ষণ করার জন্য ব্যবহৃত সাধারণ কৌশলটি কী ?
- অবজেক্টগুলির তুলনামূলকভাবে ছোট আকার রয়েছে:
nvarchar(1000)
উদাহরণস্বরূপ কিছু হতে পারে তবে বাইনারি ডেটাগুলির বিশাল ব্লব নয়, এটি সরাসরি ডিস্কে সঞ্চিত এবং সরাসরি অ্যাক্সেস করা হয়, এবং মাইক্রোসফ্ট এসকিউএল এর মাধ্যমে নয়filestream
, - ডাটাবেস লোডটি বেশ কম এবং পুরো ডাটাবেসটি একটি সার্ভারে একটি ভার্চুয়াল মেশিন দ্বারা পরিচালিত হয়,
- পূর্ববর্তী সংস্করণে অ্যাক্সেসটি সর্বশেষতম সংস্করণে অ্যাক্সেসের মতো দ্রুত হওয়া দরকার না, তবে এখনও আপ-টু-ডেট হতে হবে এবং খুব ধীর নয় ²
<TL-ড>
আমি নিম্নলিখিত কেসগুলি সম্পর্কে ভেবেছিলাম, তবে সেই ধরণের পরিস্থিতিতে আমার কোনও বাস্তব অভিজ্ঞতা নেই, তাই আমি অন্যের মতামত শুনব:
আইডি এবং সংস্করণ অনুসারে সারিগুলি আলাদা করে একই টেবিলে সমস্ত কিছু সঞ্চয় করুন। আইএমও, এটি মারাত্মকভাবে নির্বোধ এবং পারফরম্যান্স স্তরে শীঘ্রই বা আঘাত করবে। এই পদ্ধতির সাথে, সর্বশেষতম আইটেমগুলিতে এবং সংস্করণগুলির সন্ধানে আলাদা সুরক্ষা স্তর নির্ধারণ করাও অসম্ভব। সবশেষে, প্রতিটি ক্যোয়ারী লিখতে আরও জটিল হবে। প্রকৃতপক্ষে, আপ-টু-ডেট ডেটা অ্যাক্সেস করতে, আমাকে প্রতিটি গ্রুপের শেষ সংস্করণে আইডি দ্বারা সমস্ত কিছু গ্রুপ করতে এবং পুনরুদ্ধার করতে বাধ্য করা হবে।
এক সারণীতে সর্বশেষতম সংস্করণ সংরক্ষণ করুন এবং প্রতিটি পরিবর্তনে অপ্রচলিত সংস্করণটিকে অন্য স্কিমাতে অন্য টেবিলের অনুলিপি করুন। ত্রুটিটি হ'ল প্রতিবার, আমরা প্রতিটি মান সংরক্ষণ করি, এমনকি যদি এটি পরিবর্তন না হয়। অপরিবর্তিত মানগুলিকে সেট করা
null
কোনও সমাধান নয়, যেহেতু যখন মানটি পরিবর্তন হয়null
বা এ থেকে হয় তখন আমাকেও ট্র্যাক করতে হবেnull
।এক সারণীতে সর্বশেষতম সংস্করণ এবং অন্য সারণীতে পূর্বের মানগুলির সাথে পরিবর্তিত বৈশিষ্ট্যের তালিকা সংরক্ষণ করুন। একটি আছে হয় সবচেয়ে গুরুত্বপূর্ণ এক যে একমাত্র উপায় পূর্ববর্তী মূল্যবোধের ভিন্নধর্মী ধরনের সাজাতে একই কলাম রয়েছে: এই দুটি সংক্রান্ত ত্রুটিগুলি থাকার মনে হয়
binary(max)
। দ্বিতীয়টিটি হ'ল এটি আমার বিশ্বাস, ব্যবহারকারীর কাছে পূর্ববর্তী সংস্করণগুলি প্রদর্শন করার সময় এই জাতীয় কাঠামোটি ব্যবহার করা আরও কঠিন।আগের দুটি পয়েন্টের মতো একই কাজ করুন তবে সংস্করণগুলি পৃথক ডাটাবেসে সংরক্ষণ করুন store পারফরম্যান্স অনুসারে, একই ডাটাবেসে পূর্ববর্তী সংস্করণগুলি রেখে সর্বশেষ সংস্করণগুলিতে অ্যাক্সেস কমিয়ে দেওয়া এড়াতে এটি আকর্ষণীয় হতে পারে; তবুও, আমি বিশ্বাস করি যে এটি একটি অকালীন অপটিমাইজেশন এবং যদি কেবল একই ডাটাবেসে পুরানো এবং সর্বশেষ সংস্করণ থাকা বাধা হবার প্রমাণ থাকে তবেই তা করতে হবে।
</ TL-ড>
¹ উদাহরণস্বরূপ, এইচটিটিপি লগগুলির জন্য করা হিসাবে এটি কোনও লগ ফাইলে পরিবর্তনগুলি সংরক্ষণ করা অগ্রহণযোগ্য হবে এবং সার্ভারের লোডটি সর্বনিম্ন হলে রাতে লগ থেকে ডেটাবেসে ডাটা ফ্লাশ করে। বিভিন্ন সংস্করণ সম্পর্কিত তথ্য অবিলম্বে বা প্রায় অবিলম্বে উপলব্ধ থাকতে হবে; কয়েক সেকেন্ড বিলম্ব গ্রহণযোগ্য।
Frequently তথ্যগুলি খুব ঘন ঘন এবং কেবলমাত্র ব্যবহারকারীদের নির্দিষ্ট গোষ্ঠী দ্বারা অ্যাক্সেস করা হয় না, তবে তবুও সংস্করণগুলির তালিকার জন্য 30 সেকেন্ড অপেক্ষা করার জন্য তাদের বাধ্য করা অগ্রহণযোগ্য হবে। আবার কয়েক সেকেন্ড বিলম্ব গ্রহণযোগ্য।