ঠিক আছে আমি এটি নাও পেতে পারি, তবে আমি এর উত্তর দেওয়ার চেষ্টা করি।
আপনি বলেছিলেন যে আপনার একটি উচ্চ পারফরম্যান্স সমাধান দরকার যা প্রায়শই চলে (সর্বনিম্ন 2 মিনিট) এবং আপনার একটি ভাল পদ্ধতির দরকার যা লক না করে দ্রুত হওয়া উচিত। তবে আপনি একটি ব্ল্যাকবক্স সিস্টেম চান না।
একটি ব্ল্যাকবক্স সিস্টেমের পরিবর্তে, যা লক্ষ লক্ষ স্থাপনায় ভাল ফলাফল সহ ব্যবহৃত হয়, আপনি আবার চাকাটি উদ্ভাবন করে নিজের সমাধান তৈরি করার চেষ্টা করেন? এইচএম, কিছুটা অদ্ভুত লাগছে।
আসলে এই আমার পরামর্শ।
- এমনকি যদি আপনি বলে থাকেন যে আপনি এটি ব্যবহার করবেন না তবে প্রতিলিপি । আপনি এটির জন্য এটি ব্যবহার করতে পারেন এটি বেশ সহজ এবং সর্বোত্তম সমাধান। প্রতিলিপিটি সেটআপ করা সহজ, দ্রুত প্রতিলিপি করা এবং আপনাকে আবার চাকাটি আবিষ্কার করতে হবে না। আপনি যদি লকিংয়ের বিষয়ে কেবল অদ্ভুত হন তবে আপনি এটি সেট করার চেষ্টা করতে
ISOLATION LEVELপারেন READ_COMMITTED_SNAPSHOT। আপনি এটি সম্পর্কে এখানে আরও পড়তে পারেন । এটি আপনার টেম্পডিবির একটি অংশ ব্যবহার করবে তবে আপনার টেবিলটি সর্বদা পঠনযোগ্য এবং লিখিত হয় এবং অনুলিপিটি পটভূমিতে কাজ করতে পারে।
নীচের উদাহরণটি দেখুন:
ALTER DATABASE yourDatabase SET ALLOW_SNAPSHOT_ISOLATION ON
ALTER DATABASE yourDatabase SET READ_COMMITTED_SNAPSHOT ON
- সিডিসি (পরিবর্তন ডেটা ক্যাপচার) এর সমাধানও হতে পারে। তবে এইভাবে আপনাকে নিজেরাই প্রায় সব কিছু তৈরি করতে হবে। এবং আমি অভিজ্ঞতা তৈরি করেছি যা
CDCকিছু পরিস্থিতিতে একটি ভঙ্গুর জিনিস হতে পারে। CDCএকটি পর্যবেক্ষিত টেবিলের সমস্ত ডেটা ক্যাপচার করবে (আপনার প্রতিটি দেখার টেবিলটি ম্যানুয়ালি নির্দিষ্ট করা দরকার)। এরপরে আপনি আগে মান এবং একটির পরে মান পাবেন INSERT, UPDATEবা DELETE। CDCকিছু সময়ের জন্য এই তথ্যগুলি ধরে রাখবে (আপনি এটি নিজেরাই নির্দিষ্ট করতে পারেন)। পদ্ধতির CDCআপনাকে নির্দিষ্ট টেবিলে ব্যবহার করতে হবে এবং অন্য ডাটাবেসে সেই পরিবর্তনগুলি ম্যানুয়ালি প্রতিলিপি করতে হবে। যাইহোক, CDCহুডের নীচেও এসকিউএল সার্ভারের প্রতিলিপি ব্যবহার করে। ;-) আপনি এখানে এটি সম্পর্কে আরও পড়তে পারেন ।
সতর্কতা: পরিবর্তনগুলি CDCসম্পর্কে সচেতন হবে না DDL। এর অর্থ, আপনি যদি কোনও টেবিল পরিবর্তন করেন এবং একটি নতুন কলাম যুক্ত করেন, CDCসারণীটি দেখবে তবে নতুন কলামে সমস্ত পরিবর্তন উপেক্ষা করা হবে। প্রকৃতপক্ষে এটি কেবল NULLআগের মান এবং পরে মান হিসাবে রেকর্ড করে । আপনার DDLদেখা এটিকে পুনরায় পুনরায় পুনর্নিবিষ্ট করা দরকার - একটি দেখা টেবিলে পরিবর্তন করা হয়েছে।
- আপনি উপরে বর্ণিত উপায়টি হ'ল এসকিউএল সার্ভার প্রোফাইলার ব্যবহার করে কোনও কাজের চাপ ক্যাপচার করার মতো এবং কিছু মানদণ্ডের জন্য এটি আবার অন্য ডাটাবেসে চালানো। ভাল এটা কাজ করতে পারে। তবে খুব বেশি পার্শ্ব প্রতিক্রিয়া রয়েছে তা আমার পক্ষে কিছুটা ভারী। আপনি যদি আপনার ক্লায়েন্টের কাছে কোনও প্রক্রিয়া কল ক্যাপচার করেন তবে আপনি কী করবেন। এরপরে আপনার নীতিমালা ডাটাবেসে একই কমান্ডটি চালানো যেমন সিঙ্কের বাইরে চলে গেছে? পদ্ধতিটি চলতে পারে তবে এটি আপনার ক্লায়েন্টে উপস্থিত না থাকা সারিগুলি / আপডেট / সন্নিবেশ করতে পারে। অথবা আপনি কীভাবে এক নীতি সহ একাধিক ক্লায়েন্ট পরিচালনা করেন handle আমি মনে করি এটি খুব জটিল। সবচেয়ে খারাপ ক্ষেত্রে, আপনি সম্ভবত আপনার সততা নষ্ট করেছেন।
- আর একটি ধারণা প্রয়োগ ভিত্তিক বা ট্রিগার ব্যবহারের হতে পারে be আপনি কতগুলি সারণি সিঙ্ক করতে চান তার উপর নির্ভরশীল। আপনি পৃথক স্টেজিং টেবিলে সমস্ত পরিবর্তন লিখতে পারেন এবং আপনার মাস্টারের সাথে স্টেজিং টেবিলে এই সারিগুলি সিঙ্ক করার জন্য সমস্ত এক্স মিনিট এসকিউএল সার্ভার এজেন্ট জব চালাতে পারেন। তবে আপনি কিছুটা ভারী হতে পারে যদি আপনি 150 টেবিলগুলি সিঙ্ক করার চেষ্টা করেন। আপনার একটি বড় ওভারহেড হবে
আচ্ছা এটি আমার 2 সেন্ট। আশা করি আপনার একটি ভাল ওভারভিউ আছে এবং সম্ভবত আপনি একটি সমাধান খুঁজে পেয়েছেন যা আপনার পক্ষে কার্যকর।