একটি ভিন্ন পদ্ধতি হচ্ছে সেভ ডাটাতে একটি অতিরিক্ত ফিল্ড যুক্ত করুন: কয়েনের সংখ্যা যোগ হবে (ডেল্টা) সর্বশেষ বার থেকে। এই পদ্ধতিতে সেভ ডাটা একটি tuple (T,d) কর্তৃক প্রতিনিধিত্ব হতে পারে যেখানে T হচ্ছে কয়েনের মোট সংখ্যা এবং ফ হচ্ছে মাত্রই যুক্ত হওয়া কয়েনের সংখ্যা।
এই কাঠামো দিয়ে আপনার কনফ্লিক্ট রেজ্যুলেশন এলগরিদমের আরও বলিষ্ঠ (রোবাস্ট) জায়গা থাকে, যেভাবে নিচে ব্যাখ্যা করা হয়েছে। কিন্তু এই পদ্ধতি এখনও আপনার অ্যাপকে প্লেযারের সার্বিক অবস্থার গ্রহণযোগ্য চিত্র দিতে পারে না।
এখানে ডাটা অন্তর্ভূক্তকরনের জন্য কনফ্লিক্ট রেজ্যুলেশন এলগরিদম আছে:
উদাহরণস্বরূপ, যখন আপনি লোকাল স্টেট (T,d) এবং ক্লাউড স্টেটের (T',d') মধ্যে একটি কনফ্লিক্ট পান, আপনি এটাকে (T'+d,d) হিসাবে সমাধান করতে পারেন। এটা যা বোঝায় তা হচ্ছে আপানি আপনার লোকাল ডাটা ডেল্টা নিয়েছেন এবং এটাকে ক্লাউড ডাটার মধ্যে একত্রিত করে, আশা করে যে, এটা সঠিকভাবে যে কোন স্বর্ণ কয়েনের জন্য ব্যাখ্যা করবে যা অন্য ডিভাইসে সংগৃহিত হয়েছে।
এই পদ্ধতি আশাপ্রদ লাগতে পারে, কিন্তু এটা একটি ডাইনামিক মোবাইল এনভায়রনমেন্টের মধ্যে ভেঙ্গে পড়ে:
ইউজার স্টেট (অবস্থা) সেভ করতে পারে যখন ডিবাইস অফলাইনে থাকে। এই পরিবর্তন জমা দেয়ার জন্য শ্রেনীবদ্ধ হয় যখন ডিভাইস অনলাইনে ফিরে আসে।
সিঙ্ক যেভাবে কাজ করে সে উপায় হচ্ছে যে সবচেয়ে সমসাময়িক পরিবর্তন যে কোন পূর্ববতী পরিবর্তনকে নতুন ভাবে লেখে(ওভাররাইট)। অর্থাৎ দ্বিতীয় রাইট একমাত্র যা ক্লাউডে পাঠানো হয়ে থাকে (এটা ঘটে থাকে যখন ডিভাইস চুড়ান্তভাবে অনলাইনে আসে), এবং প্রথম রাইটের মধ্যেকার ডেল্টা অবহেলিত হয়।
ব্যাখ্যা করার জন্য, টেবিল ২. তে ব্যাখ্যা করা চিত্রটি বিবেচনা করুন। ধারাবাহিক অপারেশনগুলোর পরবর্তীতে টেবিলটাতে দেখানো হয়েছে, ক্লাউড স্টেট (১৩০,+৫) হতে পারে। এটার মানে নির্ধারিত স্টেট (১৪০,+১০) হতে পারে। এটা সঠিক নয় কারন সর্বমোটের মধ্যে ইউজার ডিভাইস A তে ১১০ টি কয়েন এবং ডিভাইস B তে ১২০টি কয়েন সংগ্রহ করেছে। মোট হওয়া উচিত ২৫০ কয়েন।
টেবিল ২, মোট+ডেল্টা কৌশলের জন্য অসফল কেস।
Event | Data on Device A | Data on Device B | Data on Cloud | Actual Total |
---|---|---|---|---|
Starting conditions | (20, x) | (20, x) | (20, x) | 20 |
Player collects 100 coins on device A | (120, +100) | (20, x) | (20, x) | 120 |
Device A saves state to cloud | (120, +100) | (20, x) | (20, x) | 120 |
Player collects 10 more coins on device A | (130, +110) | (20, x) | (120, +100) | 130 |
Player collects 1 coin on device B | (130, +110) | (21, +1) | (120, +100) | 131 |
Device B attempts to save state to cloud. Conflict detected. | (130, +110) | (21, +1) | (120, +100) | 131 |
Device B solves conflict by applying local delta to cloud total. | (130, +110) | (121, +1) | (121, +1) | 131 |
Device A tries to upload its data to the cloud. Conflict detected. | (130, +110) | (121, +1) | (121, +1) | 131 |
Device A resolves the conflict by applying the local delta to the cloud total. | (131, +110) | (121, +1) | (231, +110) | 131 |
(*): x ডাটা পরিবেশন করে যা আমাদের এই প্রেক্ষাপটে অপ্রাসঙ্গিক।
এখন আপনার বিপরীত সমস্যা থাকবে: আপনি প্লেয়ারকে অনেক বেশী কয়েন দিয়ে দিচ্ছেন। এই প্লেয়ার ২১১ কয়েন অর্জন করেছেন, যখন বস্তুত সে মাত্র ১১১ কযেন সংগ্রহ করেছেন।