অফলাইন সিস্টেমের সাথে সিঙ্ক্রোনাইজেশন


9

আমি এমন একটি সিস্টেম ডিজাইন করছি যা থেকে আমি মোবাইল ডিভাইস (যা একটি এম্বেডযুক্ত অ্যাপ্লিকেশন রয়েছে) থেকে ব্যবসায়িক ডেটা সিঙ্ক্রোনাইজ করব যা ডেটা উত্পন্ন করে এবং এটিকে আবার সার্ভারে প্রেরণ করে। প্রতিটি লাইন সিঙ্ক্রোনাইজ করা ডাটাবেসে একটি নির্দিষ্ট ব্যবসায়িক লগ উত্পন্ন করে।

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

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

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

সিঙ্ক্রোনাইজ করা ডেটার পরিমাণটি বড় হওয়ার আশা করা যায় না, সিঙ্ক্রোনাইজেশন প্রক্রিয়াও নয়।

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

আমি জানতে চাই :

  1. এভাবে যদি বোঝা যায়? ততক্ষণ সমলয় প্রক্রিয়াটির পরিমাণ এবং সময় এখনও গ্রহণযোগ্য।
  2. একটি সাধারণ উপায়ে, কোন ধারণাগুলির দিকে নজর দেওয়া উচিত। বোনাস: যদি একটি স্প্রিং মডিউলটিতে এই ধারণাগুলির কোনও বাস্তবায়ন হয়।

অফলাইনের কারণ কী? আমি যখন ডিভাইসটি অফলাইনে থাকি তখন এর অর্থ হ'ল কেবল সার্ভারে অ্যাক্সেস নেই বা এটি ইন্টারনেটেও নেই?
লাইভ

এটি ইন্টারনেটে অ্যাক্সেস নেই। বা প্রায়শই না।
ওয়ালফ্রাট

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

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

আপনার বিবরণ থেকে, আমি বুঝতে পেরেছি যে একই ডেটা আইটেমটি সার্ভারে বা এক বা একাধিক ক্লায়েন্টে পরিবর্তন করা যেতে পারে। আপনি কীভাবে একটি ডেটা আইটেমটি ত্রি-উপায়ে সিঙ্ক করবেন যা মোবাইল # 1 এ গিয়েছিল, তারপরে সার্ভারে পরিবর্তন করা হয়েছিল, তারপরে মোবাইল # 2 এ গিয়ে সেখানে পরিবর্তন করা হয়েছিল, তারপরে মোবাইল # 1 সংযুক্ত (একটি সংযোগ বিচ্ছিন্ন মোবাইল # 2 দিয়ে)?
tofro

উত্তর:


1

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

মূল ধারণাটি হ'ল ক্লায়েন্ট এবং সার্ভারে বর্তমান অবস্থা সংরক্ষণ করার পরিবর্তে ক্লায়েন্ট এবং সার্ভার পরিবর্তনের একটি তালিকা সঞ্চয় করে এবং ইভেন্ট বা প্যাচ অনুরোধের মাধ্যমে একে অপরকে বার্তা দেয়।

সুতরাং ক্লায়েন্টটি সার্ভারে সমস্ত ডেটা এবং একটি তারিখ প্রেরণের পরিবর্তে ক্লায়েন্টটি একটি ইভেন্ট প্রেরণ করে একটি সংশোধন নম্বর সহ যা ক্লায়েন্টের মনে হয় যে ডেটা আপডেট হয়েছে তার শেষবারের সাথে সম্পর্কিত। এটার মতো কিছু:

Server.send("MODIFY FOO", 3);

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

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

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

সম্পাদনা করুন: এই পদ্ধতির অন্য নাম, বা এর প্রকরণকে এই সম্পর্কিত প্রশ্নে উল্লিখিত ম্যাসেজ কাতারে বলা হয় ।


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

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

0

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

  1. মোবাইলগুলিতে কি তারিখগুলি উত্পন্ন হয়? এই ক্ষেত্রে, আপনি কি নিশ্চিত যে মোবাইলগুলিতে চলমান অ্যাপটি সর্বদা সঠিক তারিখগুলি ব্যবহার করবে? কোনও দূষিত ব্যবহারকারীর সম্পর্কে কী যে তার মোবাইল ডিভাইসে সিস্টেমের তারিখটি কিছুটা পরিবর্তন করতে সক্ষম? বিভিন্ন সময় অঞ্চল ব্যবহারকারীদের সম্পর্কে কী? @ জেফ্রি আপনাকে যেমন বলেছিল, সম্ভবত এটি ডিভাইসে উত্পন্ন তারিখগুলির উপর নির্ভর করার জন্য সেরা পন্থা নয়।

  2. আমি যদি সঠিকভাবে বুঝতে পারি তবে আপনি আশাবাদী কনকুরન્સી নিয়ন্ত্রণ ব্যবহার করেন । আপনার পদ্ধতির মধ্যে এমন কিছু দেখতে পাচ্ছি না যা অন্তর্ভুক্তভাবে ভুল।

  3. এই প্রশ্নটি বসন্তে আশাবাদী লক প্রয়োগের বিষয়ে । সম্ভবত আপনি এটি কিছু অনুপ্রেরণা খুঁজে পেতে পারেন।


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

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