লক তৈরি টেবিল


19

অন্য একটি অ্যাপ্লিকেশনটিতে আমি খারাপ ডিজাইনের দ্বারা আঘাত পেয়েছিলাম: একাধিক থ্রেড EnsureDatabaseSchemaExists()একইসাথে একটি পদ্ধতি চালায় যা মূলত: এরূপ দেখায়:

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'MyTable') AND type = N'U') BEGIN

    CREATE TABLE MyTable ( ... );

END

তবে, একটি সিরিয়ালিজেবল লেনদেনে কার্যকর করা হলেও এই কোডটি থ্রেড-নিরাপদ বলে মনে হচ্ছে না (অর্থাত্ সমান্তরাল কোডটি একাধিকবার টেবিল তৈরি করার চেষ্টা করে)। অন্য কোনও থ্রেডকে একই একই নির্বাচনী স্টেটমেন্টটি করতে বাধা দেয় এমন লক অর্জনের জন্য এসইএলপেট-স্টেটমেন্টকে জোর করার কোনও সুযোগ আছে কি?

মাল্টি-থ্রেডেড-এনএসিউরসকেমাএক্সজিস্টস () পদ্ধতিগুলির জন্য কি আরও ভাল প্যাটার্ন রয়েছে?

উত্তর:


18

আপনার পক্ষে সেরা বাজি হ'ল স্প্রেজিট অ্যাপলক ব্যবহার করে পুরো ক্রিয়াকলাপটি ( SELECTএবং CREATE TABLE) রক্ষা করতে একটি স্বচ্ছ যুক্ত লেনদেন ব্যবহার করা এবং একটি কাস্টম এক্সক্লুসিভ লক অর্জন করা । সিস্টেম অবজেক্টগুলি বিচ্ছিন্নকরণের স্তরের অনুরোধগুলিকে সম্মান করে না এবং নকশার দ্বারা ব্যবহারকারীর টেবিলের মতো লকগুলি ব্যবহার করে।

মূল কোডে রেসের শর্তটি হল যে কোনও থ্রেড যতক্ষণ না CREATE TABLEস্টেটমেন্টটি পাওয়া যায় তার আগে টেবিলের অস্তিত্ব টানতে পারে একাধিক থ্রেড ।


6
+1 কেবল নিশ্চিত করে নিন যে অ্যাপলকটি নির্বাচন চেকটি আবৃত করে । অন্যথায় আপনি ডেডলকগুলি পরিচয় করিয়ে দিন। আদর্শভাবে কেউ এস মোডে অ্যাপ্লিকেশনটি লক পেতে পারে, চেক করতে হবে, এক্সে আপগ্রেড করবে, তবে এটি জটিল (কমপক্ষে বলতে ...)। সবচেয়ে নিরাপদ বিকল্পটি এক্স অর্জন করা, তারপরে পুরো ডিবি স্কিমা মোতায়েন করুন। এটি একটি বিরল বিকল্প (উদাহরণস্বরূপ, অ্যাপ্লিকেশন প্রারম্ভকালে) হওয়া উচিত যাতে এক্স লকটি তেমন গুরুত্বপূর্ণ নয়।
রিমাস রুসানু

12

আমার প্রস্তাবটি হ'ল সেরা চেষ্টা করার চেষ্টা / ধরার চেষ্টা করা উচিত। সদৃশ ক্ষেত্রে যথাযথভাবে ডুপ্লিকেট কেস পরিচালনা করুন। বাদ দাও...

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


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

4
এছাড়াও বিবেচনা করুন যে একটি উন্নত সুবিধাগুলি প্রসঙ্গে (যেমন অ্যাডমিন দ্বারা) চালানোর জন্য স্থাপনা / সেটআপ পুরোপুরি ঠিক আছে, তবে সাধারণ বিকল্পগুলি এটি নয়। বর্তমানে আপনি CREATE TABLEস্বাভাবিক
অপের
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.