আইপ্যাড বা ম্যাকের মতো একাধিক ডিভাইসের মধ্যে আইফোন অ্যাপ্লিকেশনটিতে সঞ্চিত মূল ডেটা সিঙ্ক করার জন্য আমি একটি পদ্ধতিতে কাজ করছি। আইওএস-এ কোর ডেটা ব্যবহারের জন্য সিঙ্ক ফ্রেমওয়ার্কগুলি অনেকগুলিই (যদি কোনও হয় তবে)। তবে আমি নিম্নলিখিত ধারণাটি নিয়ে ভাবছিলাম:
- স্থানীয় কোর ডেটা স্টোরটিতে একটি পরিবর্তন করা হয় এবং পরিবর্তনটি সংরক্ষণ করা হয়। (ক) ডিভাইসটি অনলাইনে থাকলে, এটি সার্ভারে চেঞ্জসেটটি প্রেরণ করার চেষ্টা করে, সংযোজন পাঠানো ডিভাইসের আইডি সহ। (খ) যদি চেঞ্জটি সার্ভারে না পৌঁছে, বা ডিভাইসটি অনলাইনে না থাকে, অ্যাপ্লিকেশনটি অনলাইনে আসার পরে প্রেরণের জন্য একটি সারিতে পরিবর্তন সেট যুক্ত করবে।
- সার্ভার, ক্লাউডে বসে, তার মাস্টার ডাটাবেসের সাথে প্রাপ্ত নির্দিষ্ট পরিবর্তন সেটগুলিকে মার্জ করে।
- কোনও পরিবর্তন সেট (বা পরিবর্তনের সেটগুলির একটি সারি) ক্লাউড সার্ভারে মার্জ হওয়ার পরে, সার্ভারটি সেই সমস্ত পরিবর্তন সেটকে কোনও ধরণের পোলিং সিস্টেম ব্যবহার করে সার্ভারের সাথে নিবন্ধিত অন্যান্য ডিভাইসে ঠেলা দেয়। (আমি অ্যাপলের পুশ পরিষেবাগুলি ব্যবহার করার কথা ভেবেছিলাম, তবে দৃশ্যত মন্তব্য অনুসারে এটি কোনও কার্যকর ব্যবস্থা নয়))
এমন কিছু অভিনব কি আছে যা নিয়ে আমার ভাবতে হবে? আমি অবজেক্টিরিউসোর্স , কোর রিসোর্স এবং রেস্টফুলকোরডাটা এর মতো আরআরইএসটি ফ্রেমওয়ার্কগুলিতে নজর রেখেছি । অবশ্যই, এগুলি সবই রিল অন রেলের সাথে কাজ করছে, যার সাথে আমি আবদ্ধ নই, তবে এটি শুরু করার জায়গা। আমার সমাধানের জন্য আমার প্রধান প্রয়োজনীয়তাগুলি হ'ল:
- মূল থ্রেড না থামিয়ে কোনও পরিবর্তন পটভূমিতে প্রেরণ করা উচিত।
- এটি যতটা সম্ভব সামান্য ব্যান্ডউইথ ব্যবহার করা উচিত।
আমি বেশ কয়েকটি চ্যালেঞ্জ সম্পর্কে চিন্তা করেছি:
- সার্ভারে বিভিন্ন ডিভাইসের বিভিন্ন ডেটা স্টোরের জন্য অবজেক্ট আইডি সংযুক্ত রয়েছে কিনা তা নিশ্চিত করা। এটি বলতে গেলে, আমার কাছে অবজেক্ট আইডি এবং ডিভাইস আইডিগুলির একটি টেবিল থাকবে, যা ডাটাবেসে সঞ্চিত অবজেক্টের রেফারেন্সের মাধ্যমে আবদ্ধ। আমার কাছে একটি রেকর্ড থাকবে (ডাটাবেসআইডিড [এই টেবিলের সাথে অনন্য], অবজেক্টআইড [পুরো ডাটাবেসের আইটেমটির কাছে অনন্য], ডেটাফিল্ড 1, ডেটাফিল্ড 2), অবজেক্টআইডি ফিল্ডটি অন্য সারণি, অলওবজেক্টস: (অবজেক্টআইড, ডিভাইসআইডি, ডিভাইসঅবজেক্টআইডি) রেফারেন্স করবে। তারপরে, যখন ডিভাইসটি কোনও পরিবর্তন সেট আপ করে, এটি স্থানীয় ডেটা স্টোরের মূল ডেটা অবজেক্ট থেকে ডিভাইস আইডি এবং অবজেক্টআইডের সাথে পাস করবে। তারপরে আমার ক্লাউড সার্ভার অলবজেক্টস টেবিলের অবজেক্টআইডি এবং ডিভাইস আইডির বিপরীতে চেক করবে এবং প্রাথমিক সারণীতে পরিবর্তনের রেকর্ডটি খুঁজে পাবে।
- সমস্ত পরিবর্তনগুলি টাইমস্ট্যাম্প করা উচিত, যাতে সেগুলি একত্রিত করা যায়।
- ডিভাইসটি খুব বেশি ব্যাটারি না ব্যবহার করে সার্ভারটি পোল করতে হবে।
- স্থানীয় ডিভাইসগুলিতে সার্ভার থেকে পরিবর্তনগুলি গ্রহণ করা হলে / মেমরিতে থাকা যে কোনও কিছু আপডেট করতে হবে।
আমি এখানে নিখোঁজ কিছু আছে কি? এটি সম্ভব করার জন্য আমার কী ধরণের ফ্রেমওয়ার্কগুলির দিকে নজর দেওয়া উচিত?