কীভাবে দুটি ডেটা উত্সের মধ্যে টান সংযুক্তি হ্রাস করা যায়


10

নিম্নলিখিত স্থাপত্য সমস্যার যথাযথ সমাধান খুঁজতে আমার কিছুটা সমস্যা হচ্ছে।

ইন আমাদের সেটিং (নিচে অঙ্কিত) আমরা 2 তথ্য সূত্র, যেখানে তথ্য উৎস এক ধরন foo বিন্যাস আইটেম জন্য প্রাথমিক উৎস আছে। একটি গৌণ তথ্য উত্স বিদ্যমান যা একটি ফু-র অতিরিক্ত তথ্য পুনরুদ্ধার করতে ব্যবহার করা যেতে পারে; তবে এই তথ্য সর্বদা বিদ্যমান না।

তদুপরি, টাইপ বারের আইটেমগুলি পুনরুদ্ধার করতে ডেটা উত্স এ ব্যবহার করা যেতে পারে। যাইহোক, প্রতিটি বার একটি ফু বোঝায়। এখানে অসুবিধাটি হ'ল প্রতিটি বারে একটি ফু নির্দেশ করা উচিত যা উপলভ্য থাকলে ডেটা উত্স বি দ্বারা বাড়ানো তথ্য হিসাবে থাকে contains

আমার প্রশ্নটি হল: সাবসিস্টেমএ 1 এবং ডেটাসোর্সবি-র মধ্যে সংযুক্ত সংযোগগুলি কীভাবে সরিয়ে ফেলবেন?

http://i.stack.imgur.com/Xi4aA.png


10
এটি একটি সুন্দর স্কেচ। এটি আঁকতে আপনি কোন প্রোগ্রাম ব্যবহার করেছেন?
মার্সেলো এমডি

আপনি এটি আঁকতে আপনি কোন প্রোগ্রামটি ব্যবহার করেছেন তাও আমি জানতে চাই। অনুগ্রহ.
তুলিনাস কর্ডোভা

2
yuml.me হ'ল ডায়াগ্রামটি তৈরির সম্ভাবনার চেয়ে তিনি যে সাইটটি ব্যবহার করেছিলেন সেগুলি হ'ল।
জেসন টার্নার

1
না তো DataSourceAএবং DataSourceBইতিমধ্যে পৃথক? DataSourceAউভয় উপর নির্ভরতা রয়েছে SubSystemA.1এবং SubSystemA.2, কিন্তু না উপর DataSourceB
তুলিনাস কর্ডোভা

1
@fstuijt না, তা নয়। আপনি পরিবর্তন যদি SubsystemA.1ছাড়া অন্য কিছু ব্যবহার করতে DataSourceB, DataSourceAজানি না। DataSourceAশুধুমাত্র SubsystemA.1একটি getFoo(id)পদ্ধতি আছে যত্ন করে । তার মাঝে একটি বিমূর্ততা এর DataSourceAএবং DataSourceB
তুলিনাস কর্ডোভা

উত্তর:


3

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

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

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

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

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

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

এখন, এটি একটি বিশাল উদ্যোগ হতে পারে; আমরা যে ক্লাউডটি ব্যবহার করি তার কয়েক ডজন ডোমেন ক্লাস রয়েছে যার মধ্যে কয়েকটি রয়েছে শত শত ডেটা ক্ষেত্র, এবং - এখানে কিকার - আপনাকে খুব সহজেই অন্য একটি মেঘ বা অন্যান্য দূরবর্তী স্থানান্তরের জন্য সামঞ্জস্য রাখতে অ্যাবস্ট্রাক্ট ডেটা টাইপের বড় পরিবর্তন করতে হতে পারে তথ্য সূত্র. যে কারণে, আমি বিরক্ত করিনি; আমি উত্পন্ন ওয়েব পরিষেবা ডোমেনটি সরাসরি ব্যবহার করি এবং এখন মেঘ থেকে একটি অফসাইটে (তবে আমাদের নিয়ন্ত্রণে) ডেটা স্টোরে পরিবর্তন আসছে, যার বিবরণ আমি এখনও জানি না, আমি কেবল ফর্মগুলি পরিবর্তন করার পরিকল্পনা করছি এবং অ্যাপ্লিকেশনটির কোডবিহাইন্ডস, যেখানেই নতুন স্কিমা এবং / অথবা ডেটা অবজেক্টগুলি প্রতিবিম্বিত করতে ডেটা "সংযুক্ত" করা হয়েছে। আপনি যেভাবেই কেটে ফেলুন এটি একটি বড় কাজ It's


এই উত্তরটি আমি যে সমস্যার মুখোমুখি হয়েছি তা সর্বোত্তমভাবে কভার করে এবং আমার মতে এখনও অবধি সর্বোত্তম উত্তর সরবরাহ করা হয়। তবে আমি ভাবব যে একাধিক উত্স থেকে ডেটা একত্রিত করা একটি সাধারণ সমস্যা। কোনও নকশার নিদর্শন যা সাহায্য করতে পারে?
fstuijt

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

4

এটির সাথে মোকাবিলা করার একটি উপায় হ'ল একত্রিত ডেটা উত্স তৈরি করা যাতে এক জায়গায় উভয় ডেটা উত্স থেকে ডেটা থাকে। একটি পেশা সূত্র পরিবর্তন জন্য চেক করতে কিছু সময় অন্তর চালানো হবে Aএবং B, এবং আপনার রাশীকৃত তথ্য উৎস বাক্সে "বদ্বীপ" লেখা। এটি দুটি শক্তভাবে মিলিত ডেটা উত্সকে একক সুসংগত ডেটা উত্সে রূপান্তর করবে।

বেশ কয়েকটি জিনিস আপনাকে এই পদ্ধতির গ্রহণ থেকে বিরত রাখতে পারে:

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

আমি সম্মত হই, একটি বিমূর্ত স্তর প্রবর্তনই পছন্দসই পদ্ধতি
ন্যান্টটাপির

2
ডেটা অনুলিপি না করে আপনার বিমূর্ত স্তর থাকতে পারে।
smp7d

@ smp7d এটি সামনের সুন্দর প্রান্তের পিছনে সংযুক্তিকে লুকিয়ে রাখবে; আমি ধরে নিয়েছি যে আপনি ইতিমধ্যে আপনার সিস্টেমে এরকম কিছু করছেন, কারণ অন্যথায় জটিলতাটি আপনার পুরো ডিজাইনে ছড়িয়ে দেওয়া হবে।
dasblinkenlight

ডিবি পরিবেশের উপর নির্ভর করে ডেটা অনুলিপি করার প্রয়োজনীয়তা অপসারণ করে এটি এক / একাধিক ভিউয়ের সাথেও পরিচালনা করা যেতে পারে।
ওয়াল্টার

না তো DataSourceAএবং DataSourceBইতিমধ্যে পৃথক? DataSourceAউভয় উপর নির্ভরতা রয়েছে SubSystemA.1এবং SubSystemA.2, কিন্তু না উপর DataSourceB
তুলিনাস কর্ডোভা

1

দেখে মনে হচ্ছে শীর্ষ স্তরে দুটি ধরণের রয়েছে: ফু এবং বার এবং আপনার কাছে মাত্র দুটি শীর্ষ স্তরের ক্রিয়া রয়েছে: findFoo(...)এবং findBar(...)। এটি I / O স্তরটির ইন্টারফেস।

ডেটা উত্সগুলির আপনার বিবরণ থেকে বোঝা যাচ্ছে যে এ: findFooএবং findBarবি এর জন্য একটি পদ্ধতি দুটি পদ্ধতি রয়েছে findFooAuxiliaryInformationfindFooআপনাকে এ এবং বি থেকে তথ্য মার্জ করতে হবে In

আপনি কী "টাইট কাপলিং" উল্লেখ করছেন তা আমি নিশ্চিত নই। দুটি ডেটাসেট অন্তর্ভুক্ত তিনটি ধরনের তথ্য আছে: Bar, Foo, এবং FooAuxDataFooএবং FooAuxDataইনপুট ডেটা সহজাত সংযোগ এবং হ্রাস করা যায় না। তবে এই মিলনটি কেবল findFooপদ্ধতিতে উপস্থিত হওয়া উচিত । এটিই আপনি করতে পারেন সেরা। প্রয়োজনীয়তা এক জায়গায় প্রয়োগ করা হয় is যদি এটি পরিবর্তন হয় তবে আপনাকে সেই কোডটি পরিবর্তন করতে হবে।


0

আপনি পারবেন না।

যদি আমি সঠিকভাবে বুঝতে পারি, Fooএবং Barথেকে এসেছি dsABarগুলি অন্তর্গত Fooগুলি।
বাঞ্ছনীয়, আপনি না চান Barনির্ধারিত গুলি Fooগুলি, যদি না Fooদ্বারা supplemented হয়েছে Foo.enhancedInfoযে থেকে আসে dsB

BarS কে Foos বরাদ্দের জন্য আপনার পছন্দটি হ'ল আপনার আঁট মিলন তৈরি করছে। আমি এটি "প্রয়োজনীয়তা চ্যালেঞ্জ" হিসাবে যোগ্যতা অর্জন করব যা আপনাকে কোনও নির্দিষ্ট পথে বাধ্য করছে।

সুতরাং প্রযুক্তিগত চ্যালেঞ্জগুলি হ'ল যে dsBকোনও প্রদত্ত তথ্য থাকতে পারে Fooএবং dsBনাও থাকতে পারে এবং এটি উপলভ্যও নাও হতে পারে।

আপনার পক্ষে সিদ্ধান্ত নেওয়া দরকার যে এই পছন্দটিটি Foo.enhancedInfoসত্যই কতটা কঠোর এবং দ্রুত । সেই প্রয়োজনীয়তার ভিত্তিতে, আপনি হয় কোনও Foo+ Barঅবজেক্ট সরবরাহ করার সিদ্ধান্ত নিতে পারেন , না। অ-বর্ধিত Fooসরবরাহের অনুমতি দেওয়া কেবল যুক্তিটিকে জটিল করে তোলে এবং আমাকে বলে যে অগ্রাধিকারটি প্রদর্শিত হওয়ার মতো কঠোর নয়। তা নির্ধারণ রুপভেদ Foo, Foo.enhancedএবং Barআপনার আবেদন (গুলি) সমর্থন করতে পারে না এবং আপনি আপনার চূড়ান্ত উত্তর আছে।

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


অন্য উপায়ে রাউন্ড: ফু গুলি বার এর অন্তর্গত
fstuijt

@fstuijt আমি আমার উত্তরটি কিছুটা আপডেট করব। মূলত, এটি একই থাকবে remain আপনি কীভাবে বার + ফু এর সার্ভার আপ করতে চান তা সিদ্ধান্ত নেওয়া দরকার।

0

যদি ডেটা উত্স বিতে থাকা ডেটাগুলি নিজের মতো করে দাঁড়াতে না পারে, আপনি যদি সম্ভব হয় তবে এটি সম্ভবত ডেটা উত্স এ-তে স্থানান্তর করতে চান।

এগুলি যদি স্বতন্ত্র তবে সম্পর্কিত হয় তবে আপনার ডেটা ভার্চুয়ালাইজেশনটি দেখে নেওয়া উচিত । এটি অ্যাপ্লিকেশনগুলিকে অজ্ঞায়নের পদ্ধতিতে ডেটাটিকে একটি সেট হিসাবে (যখন উপযুক্ত হবে) হিসাবে বিবেচনা করতে দেবে। আপনার প্ল্যাটফর্মের উপর নির্ভর করে সম্ভবত একটি বিদ্যমান ফ্রেমওয়ার্ক / লাইব্রেরি থাকবে যা আপনাকে এটি বাস্তবায়নে সহায়তা করতে পারে।

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