মোবাইল অ্যাপ্লিকেশনগুলিতে ডেটা সিঙ্ক্রোনাইজেশন - একাধিক ডিভাইস, একাধিক ব্যবহারকারী


42

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

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

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

  1. ব্যবহারকারী এ অফলাইন এবং রেকর্ড # 100 সম্পাদনা করে
  2. ব্যবহারকারী বি অফলাইন এবং রেকর্ড # 100 সম্পাদনা করছে
  3. ব্যবহারকারী সি অফলাইন এবং রেকর্ড # 100 মুছে ফেলে
  4. ব্যবহারকারী সি অনলাইন হয় (সম্ভবত, রেকর্ড # 100 সার্ভারে মুছে ফেলা উচিত)
  5. ব্যবহারকারী এ এবং বি অনলাইনে চলে যায় তবে তারা সম্পাদিত রেকর্ডগুলির অস্তিত্ব নেই

উপরের মতো সব ধরণের পরিস্থিতি উঠে আসতে পারে।

কীভাবে এটি পরিচালনা করা হয়? আমি মাইএসকিউএল ব্যবহার করার পরিকল্পনা করছি, তবে ভাবছি যে এই জাতীয় সমস্যার জন্য এটি উপযুক্ত না কিনা।

উত্তর:


30

আমি বর্তমানে ঠিক একই প্রয়োজনীয়তা এবং সমস্যাগুলি নিয়ে একটি মোবাইল / ডেস্কটপ / বিতরণ অ্যাপ্লিকেশনটিতে কাজ করছি।

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

সাধারণত, এগুলি কীভাবে ফুটে উঠেছে তা হ'ল আপনার একটি সম্ভাব্য ডেটা রেকর্ড রয়েছে যা এন ক্লায়েন্টগুলিতে বিতরণ করা হয়েছে, যারা একই সময়ে এটি সম্পাদনা করতে পারে। আপনার যা দরকার তা হ'ল

  1. একটি সঠিক সংস্করণ নিয়ন্ত্রণ / লকিং প্রক্রিয়া,
  2. একটি সঠিক অধিকার / অ্যাক্সেস পরিচালনা,
  3. একটি সঠিক সিঙ্ক্রোনাইজেশন / ক্যাশিং কৌশল

(1) এর জন্য আপনি কিছু নিদর্শন প্রয়োগ করতে পারেন: দুটি ঘন ঘন ব্যবহৃত লক কৌশল আছে: আশাবাদী অফলাইন লকিং , এবং নিরাশাবাদী অফলাইন লকিং । এর মধ্যে কিছুগুলি বিভিন্ন সংস্করণ নিয়ন্ত্রণ "নিদর্শনগুলিতে" প্রয়োগ করা হয় যেমন মাল্টি ভার্সন কনকুরન્સી নিয়ন্ত্রণ (এমভিসিসি), যা প্রতিটি ডেটা রেকর্ডের জন্য একটি কাউন্টার (একটি খুব সাধারণ "টাইম স্ট্যাম্পের ধরণের সাজানোর") ব্যবহার করে থাকে, যা রেকর্ড পরিবর্তিত হলে আপডেট হয় ।

(২) এবং (৩) এগুলি নিজেই খুব বিস্তৃত ইস্যু, যার (১) এর স্বাধীনভাবে মোকাবিলা করা দরকার। আমার অভিজ্ঞতা থেকে কিছু পরামর্শ:

  • একটি ক্লায়েন্ট-সার্ভার প্রযুক্তি ব্যবহার করুন যা আপনার জন্য বেশিরভাগ সমস্যার সমাধান করে। আমি কাউচডিবি এর মতো কয়েকটি ওয়েব প্রযুক্তির সুপারিশ করছি , যা অপটিমাস্টিক অফলাইন লকিং + এমভিসিসি, (2) ওয়েব এপিআইয়ের মাধ্যমে, এবং (3) এইচটিপি কেচিংয়ের মাধ্যমে খুব ভালভাবে পরিচালনা করে।

  • আপনি যদি প্রমাণিত প্রযুক্তি এবং পদ্ধতির উপর নির্ভর করতে পারেন তবে নিজেকে জিনিস আবিষ্কার না করার চেষ্টা করুন। আমি বিশ্বাস করি যে বিদ্যমান প্রযুক্তি / নিদর্শনগুলির গবেষণা এবং তুলনা করতে ব্যয় করা কোনও ঘন্টা আপনার নিজের সিস্টেম (গুলি) বাস্তবায়নের চেষ্টা করার চেয়ে অনেক ভাল ব্যয় হয়েছে।

  • সম্ভব হলে একজাতীয় প্রযুক্তি ব্যবহার করার চেষ্টা করুন। "সমজাতীয়" দ্বারা আমি বোঝাচ্ছি এমন প্রযুক্তিগুলি যা একই নীতিগুলি মাথায় রেখে তৈরি করা হয়েছে, যেমন ওয়েব ২.০ ব্যবহারের পরিস্থিতি scen একটি উদাহরণ: স্থানীয় অ্যাপ্লিকেশনগুলির জন্য এসকিউএল ব্যবহার করার চেয়ে একটি স্থানীয় কাউচিং কৌশল সহ একটি উপযুক্ত কাউচডিবি এবং আরএসটি ক্লায়েন্ট (ওয়েব এপিআই) ব্যবহার করা ভাল পছন্দ।

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

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


+1 আশাবাদী বনাম হতাশাবাদী লক

10

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

একটি ভাল সূচনা পয়েন্ট যা আপনি বিবেচনা করা উচিত তা হ'ল অ্যাপাচি কাউচডিবি ব্যবহার করা । এটি স্কিমা-কম, এইচটিটিপি এবং জেএসএনের উপর ভিত্তি করে এবং এটির একটি খুব ভাল প্রতিরূপ প্রক্রিয়া রয়েছে। আমরা এটি একটি অনুরূপ সমস্যা সমাধানের জন্য ব্যবহার করি।

কাউচডিবি-র প্রতিরূপকরণ ব্যবস্থায় একই HTTP এপিআই ব্যবহার করা হয় যা অন্য কোনও ক্লায়েন্ট ব্যবহার করে। সুতরাং সংক্ষেপে, এটি কোনও এপিআই-র প্রতিরূপ সরবরাহ করে।

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

কাউচডিবি-র সাথে বিবেচনা করার জন্য কয়েকটি বিষয় রয়েছে।

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

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


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

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

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

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

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