আমি কি প্রতি অ্যাপ্লিকেশনটিতে একটি ডাটাবেস ব্যবহার করব বা একাধিক অ্যাপ্লিকেশনগুলির মধ্যে একটি একক ডাটাবেস ভাগ করব [বন্ধ]


33

আমার একাধিক অ্যাপ্লিকেশন রয়েছে যা একই উত্স থেকে ডেটা ব্যবহার করে। এটি কি সর্বোত্তম অনুশীলন (বা কী কী উপকার / বিবেচনা):

  • একাধিক অ্যাপ্লিকেশন দ্বারা ভাগ করা ডাটাবেসে ডেটা ছেড়ে দিন

    1. শুধুমাত্র একটি ডাটাবেস প্রয়োজন হিসাবে স্থান বাঁচায়
    2. বিভিন্ন অ্যাপ্লিকেশনগুলির বিভিন্ন অনুসন্ধানের প্রয়োজন হওয়ায় সূচকে জটিল করে তোলে
  • প্রতি অ্যাপ্লিকেশন ডাটাবেসে ডেটা আমদানি করুন

    1. প্রতি অ্যাপ্লিকেশন ডাটাবেসে সদৃশ ডেটা থাকার কারণে আরও স্থান ব্যবহার করা হয়
    2. প্রতিটি অ্যাপ্লিকেশন হিসাবে সহজ সূচীকরণ তার নিজস্ব প্রয়োজনের উপর ফোকাস করতে পারে

আমি অন্যান্য সুবিধাগুলি / অসুবিধাগুলি বাদ দিয়ে থাকতে পারি, দয়া করে যদি কোনও তালিকা থাকে তবে আপনার কর্মক্ষেত্রে এটি কীভাবে করা হয়?


1
আপনি কীভাবে অ্যাপ্লিকেশনটিকে সংজ্ঞায়িত করছেন: পৃথক বিল্ডস, বিভিন্ন বিকাশকারী?
জেফো

ডাটাবেস ভাগ করে নেওয়া পুরো ডাটাবেসটিকে একটি বড় এবং অগোছালো পাবলিক এপিআইতে রূপান্তরিত করে। এবং এটি আপনার প্রথম প্রয়োগে তৈরি করতে পারে এমন সমস্ত বিমূর্ততা মিস করছে।
প্যাট্রিক

কর্মক্ষমতা একটি সমস্যা? পর্যাপ্ত রেকর্ড সহ যা কোনও একটি বৃহত একক ডাটাবেস থেকে বিরত রাখতে পারে। স্থান সস্তা।
রিগ

উত্তর:


41

স্পেস আজকাল সস্তা, তাই আমি প্রতি অ্যাপ্লিকেশনটিতে একটি ডাটাবেস ব্যবহার করার পরামর্শ দেব।

একাধিক অ্যাপ্লিকেশনগুলির মধ্যে একটি ডাটাবেস ভাগ করে নেওয়ার কিছু মারাত্মক অসুবিধা রয়েছে :

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

  • রক্ষণাবেক্ষণ এবং উন্নয়নের ব্যয় বাড়তে পারে : কোনও অ্যাপ্লিকেশনকে ডাটাবেস স্ট্রাকচারগুলি ব্যবহার করা দরকার যা হাতের কাজটির জন্য উপযুক্ত নয় তবে তারা ইতিমধ্যে উপস্থিত থাকায় এটি ব্যবহার করতে হয় যদি উন্নয়ন আরও শক্ত হয়। এটিও সম্ভবত যে কোনও অ্যাপ্লিকেশনটির সামঞ্জস্যকরণের অন্যান্য অ্যাপ্লিকেশনগুলিতেও পার্শ্ব প্রতিক্রিয়া হবে ("কেন এমন অপ্রয়োজনীয় ট্রিগার আছে ??!" / "আমাদের আর সেই ডেটার দরকার নেই!")। এটি একক অ্যাপ্লিকেশনের জন্য একটি ডাটাবেসের সাথে ইতিমধ্যে শক্ত, যখন বিকাশকারীরা সমস্ত ব্যবহারের ক্ষেত্রে / জানেন না।

  • প্রশাসন শক্ত হয়ে যায়: কোন অ্যাপ্লিকেশনটি কোন প্রয়োগের সাথে সম্পর্কিত? বিশৃঙ্খলার ক্রমবর্ধমান. আমার ডেটা কোথায় খুঁজতে হবে? কোন ব্যবহারকারী কোন বস্তুর সাথে ইন্টারঅ্যাক্ট করার অনুমতিপ্রাপ্ত? কাকে দান করব?

  • আপগ্রেড করা: আপনার এমন একটি সংস্করণ প্রয়োজন যা এটি ব্যবহার করে সমস্ত অ্যাপ্লিকেশনগুলির জন্য সর্বনিম্ন সাধারণ ডিনোমিনেটর। এর অর্থ হল যে নির্দিষ্ট অ্যাপ্লিকেশনগুলি শক্তিশালী বৈশিষ্ট্যগুলি ব্যবহার করতে সক্ষম হবে না। আপনাকে পুরানো সংস্করণগুলির সাথে থাকতে হবে। এটি উন্নয়ন ব্যয়ও কিছুটা বাড়ায়।

  • সংমেয়: আপনি কি সত্যিই নিশ্চিত যে প্রক্রিয়াগুলির মধ্যে কালানুক্রমিক নির্ভরতা নেই? একটি অ্যাপ্লিকেশন যদি পুরানো বা অন্য কোনও অ্যাপ্লিকেশন দ্বারা প্রথমে পরিবর্তন করা উচিত ছিল যে ডেটা সংশোধন করে? একই টেবিলে একই সাথে কাজ করা বিভিন্ন অ্যাপ্লিকেশন সম্পর্কে কী?

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

সম্পাদনা: যদিও আমি উল্লেখ করতে চাই যে @ সাeedদ উল্লিখিত হিসাবে, আপনি যদি সাধারণভাবে উপলভ্য কোনও পরিষেবাতে ডেটা ম্যানিপুলেশনগুলি encapsulate করতে পারেন তবে একাধিক অ্যাপ্লিকেশনগুলির সাথে একটি ডাটাবেস ভাগ করা আরও সহজ। যতক্ষণ না আপনার কাঁচা অ্যাক্সেসের প্রয়োজন হয় না এটি খুব ভাল পদ্ধতির।


@ সা Saeedদের উত্তর অনুসারে ভাগ করা ডিবিতে কোনও পরিষেবা ব্যবহার করার সময়, আমি কি এখনও একাধিক অ্যাপ্লিকেশনগুলির আলাদা চাহিদা নেই এবং ডেটাবেসটিতে বিস্তৃত বিভিন্ন সূচকের প্রয়োজন না নিয়ে উদ্বেগ নেই?
লাজ

2
@ লাজ: সম্ভবত, ব্যবহারের ক্ষেত্রে এবং প্রয়োজনীয়তার উপর নির্ভর করে।
ফ্যালকন

2
রিলেশনাল ডাটাবেস ডিজাইনের অন্যতম মৌলিক ডুপ্লিকেট ডেটা নেই। একই ডেটা ওভারল্যাপযুক্ত বিভিন্ন ডাটাবেস থাকা কেবল সমস্যা জিজ্ঞাসা করছে।
পিটার বি

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

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

23

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

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

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

আমি ব্যবহারকারী এবং পণ্যগুলির সাথে আলাপচারিতার জন্য একটি সাধারণ ইউআইও তৈরি করেছি যা এটির নিজস্ব একটি পৃথক ওয়েব অ্যাপ্লিকেশন ছিল।

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


3
যৌক্তিক বিচ্ছেদ এবং একটি পরিষ্কার আর্কিটেকচার পরামর্শ দেওয়ার জন্য +1। এসওএ এই জাতীয় জিনিসগুলি সত্যিই সহজ করে তোলে
ফ্যালকন

লজিক্যাল সংস্থার জন্য অবশ্যই +1। সংযুক্তি এবং সংহতির ভারসাম্যকে অনুকূল করতে ডেটাগুলিকে গোষ্ঠীভূত করা যাক এবং তারপরে অ্যাপ্লিকেশনগুলিকে তাদের কাজটি করার জন্য যে কোনও ডাটাবেসের মধ্যে ডুব দিতে পারে।
জোয়েল ব্রাউন

9

যদি এই অ্যাপ্লিকেশনগুলি একই ডেটা থেকে কাজ করে বোঝানো হয় - উদাহরণস্বরূপ, পণ্য এবং গ্রাহকের একই তালিকা - তবে ডাটাবেস একসাথে রাখুন। আপনি ডাটাবেসগুলি পৃথক করে কোনও লাভ করবেন না। সম্পূর্ণরূপে একটি 'মানব' সমস্যা - এটি একটি ডিস্কে সার্ভারের ঠিক বাইট। এটি এর 1 বা 100 ডাটাবেস কিনা যত্ন করে না। আপনি যদি এটি ভাগ করে নেন তবে আপনাকে ডেটা সিঙ্ক্রোনাইজেশনের সাথে ডিল করতে হবে। আপনি যে সূচকগুলি নিয়ে এসেছেন তা আসল সমস্যা নয় - ডিবি বিভক্ত হলে আপনি সূচকগুলি বজায় রাখার জন্য একই পরিমাণে প্রসেসরের সময় ব্যয় করতেন।

যদি পারফরম্যান্সটি কোনও সমস্যা হয়ে উঠতে শুরু করে তবে জিনিসগুলিকে ভারসাম্য বজায় রাখতে একাধিক সার্ভারে db টি প্রতিলিপি করুন।


3

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

তদ্ব্যতীত, লেখাগুলি কার্যকর হওয়ার সময় ডেটাটির স্থানীয় কপি তৈরি করা বিপজ্জনক হতে পারে। যদি AppA এবং AppB উভয়ের কাছে কিছু ভাগ করা ডেটার একটি অনুলিপি থাকে এবং AppA এটি আপডেট করে, অ্যাপিবির এখনও পুরানো ডেটা থাকবে। অথবা, আপনাকে ডেটা সিঙ্কে রাখার জন্য ট্রিগার সেটআপ করতে হবে।


+1: একক ডাটাবেসে একাধিক অ্যাপ্লিকেশন ম্যাপ করা যথেষ্ট সহজ।
কেভিন cline

0

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

সুতরাং আমি ডাটাবেস কাঠামোটি অনুকূলিত করেছিলাম এবং এই কেন্দ্রীয় ডাটাবেসে প্রাসঙ্গিক অংশগুলি সঙ্কুচিত করে ফেলেছি, তবে সমস্ত কিছু বাদ দিয়েছি।

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

উপরের ক্ষেত্রে কমন ডিবি ব্যবহার করা এড়ানো যায় নি, তবে মনে রাখবেন যে আমি কয়েকটি টেবিল আলাদা ডিবিতে আলাদা করে রেখেছিলাম, এটি সাধারণ প্রশ্নের অংশ নয়।

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

সব মিলিয়ে আপনি সাধারণ প্রশ্নের জন্য একটি সাধারণ ডাটাবেস বজায় রাখতে পারেন, তবে আপনার প্রতিটি অ্যাপ্লিকেশনের জন্য একটি রাখতে পারেন।


0

আপনি কি আপনার অ্যাপ্লিকেশন আর্কিটেকচার সম্পর্কে আরও বিস্তারিত বলতে পারেন?

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

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