সদৃশ টেবিল তৈরি এড়াতে প্রতিশব্দ ব্যবহার করা কি ভাল ধারণা?


13

আমাদের কাছে একই একই ডাটাবেসের 3 অনুলিপি রয়েছে। সমস্ত 3 ডাটাবেসের একটি Usersটেবিল রয়েছে এবং একটি ব্যবহারকারী সর্বদা 3 একই ডাটাবেসে একই একই সেটিংস সহ উপস্থিত থাকবে। যে কোনও সময় আমরা কোনও ব্যবহারকারী যুক্ত বা সম্পাদনা করতে চাই আমাদের 3 টি ডাটাবেস আপডেট করতে হবে।

Usersডাটাবেস 2 এবং 3 থেকে টেবিলটি মুছে ফেলা এবং এটি Synonymডাটাবেস 1-এ নির্দেশ করে এমনটি দিয়ে প্রতিস্থাপন করা কি আরও ভাল ধারণা হবে ?

এখানে আমি যে পেশাদারদের / বিবাদগুলি ভাবতে পারি তা এখানে:

পেশাদাররা

  • সহজ রক্ষণাবেক্ষণ 3 টির পরিবর্তে এক জায়গায় ব্যবহারকারীদের আপডেট করতে পারে
  • ব্যবহারকারীর আইডিগুলি ডাটাবেসগুলির মধ্যে মিলবে (প্রচুর অ্যাড-অন অ্যাপ্লিকেশনগুলি ইউজারআইডের উপর ভিত্তি করে গুরুত্বপূর্ণ)

কনস

  • এটি স্ট্যান্ডার্ড পদ্ধতি মনে করবেন না, তাই বিভ্রান্তিকর হতে পারে
  • ব্যবহারকারীদের ডাটাবেসের মধ্যে অভিন্ন সেটিংস থাকতে হবে
  • ( নীচে জিবিএন এর উত্তর থেকে ) যদি ডেটাবেস 1 কখনও নিচে চলে যায়, ডেটাবেস 2 এবং 3ও অনুপলব্ধ থাকবে। এছাড়াও পুনরুদ্ধারের ক্ষেত্রে ডেটাটি অসঙ্গতিযুক্ত হওয়ার সম্ভাব্য সমস্যা রয়েছে

এটি এমন একটি বিকল্প যা আমি কয়েকটি টেবিলের জন্য বিবেচনা করছি যা কেবলমাত্র Usersসারণী নয়, সেটিংসযুক্ত সেটিংগুলি ধারণ করে । এটি উদাহরণস্বরূপ ব্যবহারকারীদের ব্যবহার করা হচ্ছে যেহেতু এটি বোঝা সহজ।


3
এগুলির মধ্যে পার্থক্যগুলি সিঙ্ক্রোনাইজ / মার্জ করার জন্য কি কোনও স্ক্রিপ্ট থাকা আরও অর্থপূর্ণ হবে? আমি ব্যক্তিগতভাবে 2 টি ডাটাবেস তৈরি করা পছন্দ করি না কারণ এর মতো প্রতিশব্দ হিসাবে তৃতীয়টির উপর নির্ভর করে।
হতাশ

@ ফ্রেস্ট্রেটেড উইথফর্মস ডিজাইনার এটি আরও অনেক কাজ বলে মনে হচ্ছে এবং স্বয়ংক্রিয়-উত্পন্ন ক্ষেত্রগুলিতে যেমন প্রাথমিক কী হিসাবে পরিবর্তনগুলি মার্জ করা শক্ত hard
রাচেল

এটি নির্ভর করে আপনি কীভাবে অভিনব হতে চান। আপনি যদি তাদের মধ্যে পরিবর্তনগুলি ভাগ করতে চান তবে হ্যাঁ এটি জটিল হয়ে উঠতে পারে। আপনি যদি একজনকে মাস্টার হিসাবে মনোনীত করতে চান তবে এটি কেবল মাস্টারের বিষয়বস্তু দিয়ে অন্যের বিষয়বস্তুগুলিকে ওভাররাইট করার বিষয়।
হতাশ

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

উত্তর:


6

আপনার একই ব্যবহারকারীদের সাথে 3 টি ডাটাবেস কেন?

এখন যদি একটি ডাটাবেস নীচে যায় তবে কি হবে?

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

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

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

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

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

আপনার আরও মন্তব্যে সম্বোধনের জন্য, যদি আপনার ব্যবহারকারীর আইডিগুলি আপনার সমস্ত অ্যাপ্লিকেশন জুড়ে আলাদা হয়, তবে আপনার দুটি নতুন ডেটাবেসকে মুখ্যটির সাথে সিঙ্কে আনার জন্য আপনি পরিকল্পিতভাবে নিচের সময়টি বিবেচনা করতে হবে (আপনার যদি ধারণাগুলির প্রয়োজন হয় তবে আলাদা প্রশ্ন জিজ্ঞাসা করুন) কীভাবে এটি সম্পাদন করা যায়, এটি কৌতূহলজনক তবে সত্য যা শক্ত তা নয়)

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

প্রতিশব্দ ব্যবহার করার জন্য একটি অতিরিক্ত কনস হ'ল আপনি আর প্রতিটি ডাটাবেসে ব্যবহারকারীদের কাছে যথাযথ এফকে রাখতে সক্ষম হবেন না।


3

অনুপস্থিত "কন" আছে

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

এটি হল প্রতিশব্দ ব্যবহার ক্রস ডাটাবেস রেফারেনশিয়াল অখণ্ডতা ধরে নেবে যা বাস্তব জীবনে ঘটতে পারে না।

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

সুতরাং, এটি করবেন না ...

ডিবিএ সম্পর্কিত সম্পর্কিত উত্তর: পুনরুদ্ধারের পরে "ক্রস-ডাটাবেস রেফারেনশিয়াল অখণ্ডতা" সম্পর্কে একটি নতুন ডাটাবেস বনাম নন-ডিবিও স্কিমা কখন ব্যবহার করবেন সে সম্পর্কে সিদ্ধান্তের মানদণ্ড


লক্ষ্যটির অস্তিত্বের সম্ভাবনা সম্পর্কে ভাল কথা, যদিও লিঙ্কটি এই প্রশ্নের সাথে কেন জড়িত তা আমি এখনও চেষ্টা করার চেষ্টা করছি
রেচেল

1
@ রাচেল: না, লক্ষ্য সারণী থাকতে পারে তবে ডেটা আরও পুরানো হতে পারে। সুতরাং আপনি যখন পুনরুদ্ধার করবেন তখন আপনার কোনও অনুপস্থিত ব্যবহারকারী রয়েছে ... লিঙ্কটি "ক্রস-ডাটাবেস
রেফারেনশিয়াল

2

আপনার ডাটাবেস প্ল্যাটফর্মের উপর নির্ভর করে, অন্য একটি বিকল্প হ'ল ডেটাবেস 2 এবং 3-এ সারণীগুলি মুছুন এবং তাদের ডাটাবেস 1-এ টেবিলের বস্তুগত দৃশ্যের সাথে প্রতিস্থাপন করুন ।

পেশাদাররা

  • সহজ রক্ষণাবেক্ষণ (ডেটা)
  • আইডি মিলছে
  • বিভ্রাট অন্যান্য ডাটাবেসগুলিকে প্রভাবিত করে না (কমপক্ষে পরিবর্তন হওয়া দরকার হওয়া পর্যন্ত)
  • টেবিলটি পুনরুদ্ধার করতে যে কোনও ডাটাবেস ব্যবহার করা যেতে পারে।

কনস

  • ডেটা আপনার রিফ্রেশ শিডিয়ুল হিসাবে কেবলমাত্র আধুনিক date
  • যদি সারণির সংজ্ঞা পরিবর্তিত হয় তবে বস্তুগত দর্শনগুলিও পরিবর্তিত হতে পারে।

এছাড়াও লক্ষ করুন যে চেহারা-আপের ফ্রিকোয়েন্সি, রিফ্রেশের ফ্রিকোয়েন্সি এবং ডেটা পরিবর্তনের ফ্রিকোয়েন্সি উপর নির্ভর করে এটি একটি প্রতিশব্দ সমাধানের চেয়ে বেশি লোড প্রবর্তন করতে পারে বা নাও পারে।


আপডেট: হতাশাগ্রস্থ উইথফোর্ডস ডিজাইনারের মন্তব্য প্ল্যাটফর্মগুলির জন্য মূলত একটি ম্যাটেরিয়াল ভিউ যা বস্তুগত দর্শন করতে পারে না। স্ক্রিপ্ট ব্যবহার করে টেবিলগুলি পর্যায়ক্রমে সিঙ্ক্রোনাইজ করা যায়। যদি একটি ডাটাবেসকে মাস্টার হিসাবে মনোনীত করা হয় তবে সমস্ত স্ক্রিপ্টগুলি এর ভিত্তিতে তাদের পরিবর্তন করতে পারে make এটিতে একটি বস্তুগত দৃষ্টিভঙ্গির সমস্ত উপকারিতা এবং বিযুক্তি থাকবে; এটি বিল্ট-ইন কার্যকারিতাটির সুযোগ নিতে পারে নি।


1
আপনি এসকিউএল সার্ভারে দর্শনগুলি (সূচীিত দর্শনগুলি এখানে) ক্রস-ডিবি করতে পারবেন না + তাদের রিফ্রেশ করার দরকার নেই: এগুলি "রিয়েল টাইম"
জিবিএন

@gbn এসকিউএল সার্ভার ট্যাগ যুক্ত হওয়ার আগে আমার পোস্টটি লেখা হয়েছিল।
লেইফ রিফেল

আমি আপনার উত্তরের ভিত্তিতে ট্যাগটি যুক্ত করেছি :)
রাচেল

1

আমি একটি চতুর্থ ডিবি তৈরি করব যা ভাগ করে নেওয়া ব্যবহারকারীর তথ্য সঞ্চয় করে। ব্যবহারকারীদের ডিবিতে ইশারা করে অন্যান্য ডিবিএস তৈরি করুন Synonymsবা Viewsএর প্রত্যেকটিতে।

অবশেষে আমি 3 টি বিদ্যমান ডিবিএসের প্রত্যেকটিতে একটি অ্যাপ্লিকেশন সারণী ('ইউজারডিবি.উসার্টেবল' এর সাথে এক-একের সম্পর্কের সাথে একটি টেবিল) তৈরি করব যা সেই অ্যাপ্লিকেশানটির সাথে সম্পর্কিত ব্যবহারকারী ডেটা ধারণ করে।


সম্পাদনা করুন: নীচের মন্তব্যের ভিত্তিতে

সেক্ষেত্রে প্রথম ডিবি মাস্টার ব্যবহারকারী সারণী হিসাবে কাজ করুন act Synonymsএবং অন্যান্য ডিবিএসের প্রতিটিটিতে একটি এক্সটেনশন টেবিল।

গুরুত্বপূর্ণ দ্রষ্টব্য : এই পদ্ধতির সাথে, যদি আপনার প্রথম অ্যাপটি নীচে যায়, তবে অন্য দুটি এটির সাথে টেনে নামিয়ে আনা হবে! প্রত্যেকে এই ত্রুটিটি বুঝতে পেরেছেন তা নিশ্চিত করুন।


দুঃখের বিষয় এটি আমার পক্ষে কোনও বিকল্প নয়। আমি যদি স্ক্র্যাচ থেকে কিছু ডিজাইন করতাম তবে এটি আমার পছন্দসই বিকল্প হবে তবে এই ক্ষেত্রে আমি একটি প্রাক-বিদ্যমান সিস্টেমের সাথে কাজ করছি। আমার ক্ষেত্রে, আমাদের কাছে ডেটাবেস 1 ছিল যা বহু বছরের জন্য বিদ্যমান ছিল এবং সম্প্রতি ডেটাবেসগুলি 2 এবং 3 যোগ করেছে
রাহেল

কেন সারণীগুলি মুছতে এবং প্রতিশব্দটিকে প্রথম ডিবিতে নির্দেশ করতে পারে তবে কোনও নতুনকে নয়?

দুঃখিত, আমি আপনার মন্তব্য দেখার আগে আমার মন্তব্য সম্পাদিত। ডেটাবেস 1 বহু বছর ধরে রয়েছে এবং বহু বাহ্যিক অ্যাপ্লিকেশন দ্বারা এটি অ্যাক্সেস করে। আমি এই টেবিলটি সরিয়ে দিয়ে কী ধরনের ক্ষতি করতে পারি সে সম্পর্কে আমি নিশ্চিত নই। ডেটাবেস 2 এবং 3 আরও নতুন তাই আমি মনে করি আমি ব্যবহারকারীর টেবিলটি (এবং অন্যান্য সেটিংসের টেবিলগুলি) সরিয়ে এবং প্রতিশব্দ সহ তাদের প্রতিস্থাপন করে পালাতে পারব
রাচেল

আমি আপনার সম্পাদনাটি দেখছি ... ঠিক আমি যা করার চেষ্টা করছি তা কিন্তু আমার প্রশ্নটি কি এটি একটি ভাল ধারণা বা না এবং যদি না হয় তবে কেন?
রাহেল

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