অ্যান্ড্রয়েডে ডেটা সিঙ্ক করার জন্য ডিজাইন


23

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

  1. নিয়মিত একটি ইন্টেন্ট পরিষেবা চালানো যা নেটওয়ার্ক থেকে ডেটা ডাউনলোড করে এবং ডাটাবেসে সঞ্চয় করে।
  2. একটি সিঙ্ক অ্যাডাপ্টার প্রয়োগ করা যা পর্যায়ক্রমে চলমান।

উপরের কোনটি আপনার অ্যাপ্লিকেশনটিতে রাখার পরামর্শ দিন এবং কেন?

উত্তর:


12

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

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


18

আপনার কী ধরনের সিঙ্ক প্রয়োজন তা এটার উপর নির্ভর করে।

পর্যাবৃত্ত

যদি আপনার অ্যাপ্লিকেশনটি এমন কোনও নিউজ অ্যাপ্লিকেশন যা প্রতিদিন নির্দিষ্ট সময়ে পোস্টগুলি প্রকাশ করে (প্রতিদিন lets.৪৫ পূর্বাহ্নে বলে দেওয়া যাক), তবে আপনি একটি ব্যাকগ্রাউন্ড পরিষেবাদিতে একটি পর্যায়ক্রমিক টাস্কটি চালান, সকাল ৮ টায় বলুন।

যেমন : ড্রিপলার তারা আমাকে প্রতিদিন একবার বিজ্ঞপ্তি দেয় (প্রায় 6.30 অপরাহ্ন)। আমি বিশ্বাস করি তারা একটি পর্যায়ক্রমিক টাস্ক ব্যবহার করে।

ইভেন্ট ট্রিগারড

যদি আপনার ডেটা স্থানান্তরটি ব্যবহারকারীর ক্রিয়া দ্বারা ট্রিগার করা হয়, তবে ডেটা স্থানান্তরের জন্য একটি পটভূমি পরিষেবা বা অ্যাসিঙ্কটাস্ক ব্যবহার করুন।

যেমন : ড্রপবক্স / এভারনোট ote আমি যখন অ্যাপ্লিকেশনটির সাথে যোগাযোগ করি তখন সেগুলি সিঙ্ক হয়।

ক্ষণিক

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

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

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


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

@ আকাশরামণি আপনাকে এই ক্ষেত্রে জিসিএম / পার্স ব্যবহার না করার কোনও কারণ আমি দেখতে পাচ্ছি না। যাইহোক, পার্সি আপনাকে একটি নির্দিষ্ট বিন্দু ছাড়িয়ে বিল দেওয়ার সময় GCM বিনামূল্যে। যদি আপনার আপডেটগুলি 4096 বাইটের মধ্যে ভাল হয় তবে আপনি সরাসরি আপডেটটি পাঠাতে পারেন। যদি আপনার স্কোর আপডেটগুলি খুব ঘন ঘন হয় তবে জিসিএম (ক্রিকেটের স্কোরের জন্য বলুন) এর পরিবর্তে পোলিং ভাল ধারণা হতে পারে। আমি বিলম্বিতা এবং সিপিইউ / ব্যাটারি ব্যবহারের জন্য পোলিং এবং জিসিএম উভয়ই পরীক্ষা / প্রোফাইল দেওয়ার পরামর্শ দেব।
সন্দীপ

এডাব্লুএসের একটি বিজ্ঞপ্তি সমাধান রয়েছে যা ক্রস প্ল্যাটফর্ম এবং ক্রস মার্কেট। দেখুন: docs.aws.amazon.com/sns/latest/dg/SNSMobilePush.html
ব্রিল প্যাপিন

3

এর একটি দিক রয়েছে SyncAdapterযা অন্যান্য উত্তর দ্বারা উল্লেখ করা হয়নি।

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


2

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

আপনি যদি অ্যান্ড্রয়েড ট্রানিং গাইডটি পরীক্ষা করেন তবে এটি একটি সিঙ্ক অ্যাডাপ্টার তৈরি করে

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


2

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

তাত্ক্ষণিক কাজের জন্য আমরা ব্যবহার করতে পারি,

স্বল্প মেয়াদী কাজের জন্য অ্যাসিঙ্কটাস্কটি 3-4 সেকেন্ড হতে পারে।

দীর্ঘ চলমান কার্যগুলির জন্য ইনটেন্স সার্ভিস


থাম্ব পছন্দগুলির নিয়মের জন্য দুর্দান্ত ব্রেকডাউন।
ব্রিল প্যাপিন

0

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

আমি আমার লাইব্রেরিকে আমার সার্ভারে ইনটেন্স সার্ভিস ওয়েব কল করতে বলার জন্য আসলে একটি সিঙ্কএডাপ্টার ব্যবহার করি। এই "সিঙ্ক" অপারেশন পরিচালনা করা জটিল is

আমি এখন যে পদ্ধতি গ্রহণ করছি তা হ'ল সিঙ্কআরসাল্ট অবজেক্টটিকে সম্পূর্ণভাবে বিসর্জন দেওয়া এবং প্রতিটি ব্যক্তি "সিঙ্ক" এর ফলাফলগুলি লগ করার জন্য একটি পরিষেবা ব্যবহার করা

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