এসকিউএলাইট এবং ভাগ করা পছন্দসমূহের প্রসেস এবং কনস [বন্ধ]


155

এসকিউএল ডাটাবেস এবং ভাগ করা পছন্দসমূহের মধ্যে তথ্য সংরক্ষণ করার জন্য ভাল ব্যবস্থা কী?

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


এটি আপনি যে পরিমাণ ডেটা সঞ্চয় করতে চান তার উপর নির্ভর করে। SharedPreferences ডেটাতে দ্রুত এবং সহজ অ্যাক্সেসের অনুমতি দেয়, অল্প পরিমাণে ডেটা রাখার সময় এটি ব্যবহার করা আরও আরামদায়ক।
ডিম

2
সাধারণ স্ট্রিং এবং আদিম ব্যতীত ভাগ করা পছন্দসইগুলিতে কিছু সঞ্চয় করবেন না - এবং যদি আপনি প্রত্যেকটির জন্য পৃথক ফাইল ব্যবহার করেন - ডকস সত্ত্বেও ভাগ করা পছন্দগুলি মূল থ্রেডে নিরাপদ নয় এমনকি এমনকি যদি কেবলমাত্র মূল থ্রেডে চূড়ান্তভাবে দুর্নীতির ঝুঁকির ঝুঁকিপূর্ণ থাকে তবে আপনার আরও স্টোর করা উচিত একটি ফাইলে 1 টির চেয়ে বেশি মূল্যের জোড়।
রান লুপ

শেয়ারডপ্রিফারেন্সগুলি প্রথম ব্যবহারের পরে মেমরিতে ক্যাশে করা হয়, সুতরাং ফলস্বরূপ পড়ার ব্যবহারগুলিতে সেগুলি বেশ দ্রুত হওয়া উচিত।
স্টান

উত্তর:


167

এটি সত্যিই আপনি যে ডেটা সঞ্চয় করতে চান তার উপর নির্ভর করে।

SQLite

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

SharedPreferences

SharedPreferences হ'ল একটি কী / মানের দোকান যেখানে আপনি নির্দিষ্ট কী এর অধীনে একটি ডেটা সংরক্ষণ করতে পারেন। স্টোর থেকে ডেটা পড়তে আপনাকে ডেটার কীটি জানতে হবে। এটি ডেটা পড়া খুব সহজ করে তোলে। তবে ছোট স্ট্রাকচার্ড ডেটা সংরক্ষণ করা এবং পড়া যতটা সহজ সংখ্যক ডেটা সংরক্ষণ করা যতটা সহজ, প্রতিটি একক ডেটার জন্য আপনার কী সংজ্ঞায়িত করতে হবে, তদুপরি আপনি একটি নির্দিষ্ট ধারণা ছাড়া আপনার সত্যিকার অর্থে তথ্য অনুসন্ধান করতে পারবেন না cannot চাবি নামকরণ।


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

5
SharedPreferences ব্যবহার করার জন্য আপনার মূল নামগুলি জানতে হবে না। GetAll () দেখুন।
জাবল্যাঙ্ক

5
এফওয়াইআই, সেখানে একটি তৃতীয় বিকল্প রয়েছে: কোনও ফাইলে এক্সএমএল পড়ুন / লিখুন। (Android.util.xML ক্লাস দেখুন)। মাঝারি জটিল জটিল ডেটার জন্য উপযুক্ত যা একবারে সমস্ত পড়া / লেখা যায়। উদাহরণস্বরূপ, মানগুলির একটি গ্রিড যা ব্যবহারকারী ঘন ঘন পরিবর্তন হয় না। বিশেষত যদি এটি এমন ডেটা হয় যা পরে আপনি অন্য কোথাও প্রেরণ করতে চাইতে পারেন তবে এটি বিশ্লেষণযোগ্য বিন্যাসে প্রয়োজন।
টুলমেকারস্টেভ

1
শেয়ার্ড প্রিফটিতে জসন স্ট্রিং হিসাবে কোনও জসনকে সংরক্ষণ করার পরামর্শ দেওয়া হয়?
কাব্যেশ কানওয়াল

2
@ জ্যাকার্লোস যতক্ষণ আপনি কিছু ক্রস প্রক্রিয়া স্টাফ না করছেন ততক্ষণ আপনি শেরেডপ্রেফারেন্স ব্যবহার করে ভাল থাকবেন।
মাইগড

96

এই প্রশ্নের একটি স্বীকৃত উত্তর আছে, তবে আমি মনে করি বিষয়টিতে আরও কিছু বলা আছে - গতি সম্পর্কে।

একটি অ্যাপ্লিকেশন এর SharedPreferences এবং স্ক্লাইট ডিবি উভয়ই কেবল ফাইল যা ডিভাইসের ফাইল সিস্টেমে অ্যাপ্লিকেশন ডিরেক্টরিতে সঞ্চিত। যদি ডেটার পরিমাণ খুব বেশি না হয়, স্ক্লাইট বিকল্পটি সহজ অ্যাক্সেসের জন্য আরও বেশি প্রসেসিং ওভারহেড সহ একটি বৃহত্তর এবং আরও জটিল ফাইলকে জড়িত করবে।

সুতরাং, যদি ডেটার প্রকৃতি আপনার পছন্দ (গ্রহণযোগ্য উত্তরে বর্ণিত হিসাবে) এবং গতির বিষয়গুলি নির্দেশ না করে, তবে আপনি সম্ভবত শেয়ারডপ্রিফারেন্স ব্যবহার করা ভাল।

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

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


6
কোড পাঠযোগ্যতা সম্পর্কে কী? আমি মনে করি যখন ডিবি টেবিলের পরিবর্তে শেয়ারডপ্রিফগুলিতে একাধিক রেকর্ড সংরক্ষণ করা হয় তখন কোডটি সংশ্লেষিত হয়।
শেয়ার্ডপ্রেফ

8
ইগর, আমি একমত নই ভাগ করা অগ্রাধিকারগুলি সত্যই 1-মাত্রিক, কোনও পছন্দ ব্যবহার করার জন্য এটি খুব সোজা-এগিয়ে। উদাহরণস্বরূপ, আমি একটি স্টক চেকিং অ্যাপ তৈরি করছি, আমি কেবল পছন্দগুলিতে স্টক চিহ্নগুলি সংরক্ষণ করছি st আমার ব্যক্তিগতভাবে সেগুলি ধরার দরকার নেই, কারণ আমি সবসময় তাদের সকলকেই তালিকাবদ্ধ করি এবং এটি আমি যা করি, সঞ্চয় করি বা দখল করি। এটি ডিবি ব্যবহারের চেয়ে অনেক সহজ, সাধারণ।
AutoM8R

1
আমি এমন পরিস্থিতির কথা ভাবতে পারি না যেখানে কোডের পাঠযোগ্যতা কঠিন হয়ে যায় যখন ডেটা কাঠামো সংরক্ষণ করা যায় একটি শ্রেণিবদ্ধ ডাটাবেসের ব্যবহারের দাবি না করে। এমনকি যদি কোনও পাঠযোগ্যতার সমস্যা হয় তবে এটি প্রয়োজনীয় ফাংশন সহ একটি র‌্যাপার ক্লাস ব্যবহার করে সমাধান করা যেতে পারে।
সারথ সাদাসিভান পিল্লাই

1
আমরা কীভাবে ভাগ করা পছন্দগুলির অধীনে jsonstring ডেটা আকারে একাধিক কী-মান সংরক্ষণ করতে পারি? এমন একটি চরিত্রের সীমা কি আমার জসন মানকে ছিন্ন করতে পারে?
নোভা

2
SharedPreferences কেবল একবার মেমরিতে লোড করা হয় (প্রতি অ্যাপ্লিকেশন প্রক্রিয়া লাইফসাইकल) এবং সেখানে রাখা হয়; তারপরে এটি সর্বদা সুপার দ্রুত। সুতরাং এসকিউএলাইটে SharedPref ডেটা রেখে কেবল কোনও ব্যবহারিক পারফরম্যান্সের জয় নেই (কেবলমাত্র অতিরিক্ত SharedPref ফাইল অ্যাক্সেস এড়ানোর জন্য)। এবং উপায় দ্বারা আপনি আপনার এসকিউএলাইট স্টাফগুলি SharedPrefs এ স্থাপন করবেন না; যেমনটি আমি বলেছি, এটি সর্বদা স্মৃতিতে থাকে যা আপনার সমস্যার কারণ হতে পারে (মেমরির বাইরে)।
জসোল্ট সাফরানি

20

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

আপনাকে যা করতে হবে পরিকল্পনা করে থাকেন যোগদানের , সাজানোর , এবং অন্যান্য ডিবি অপারেশন আপনার ডেটা তারপর জন্য যেতে SQLite । একটি উদাহরণ তারিখ অনুসারে ডেটা বাছাই করা।

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

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


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

5
  • বিপুল পরিমাণ ডেটা সঞ্চয় করার জন্য এসকিউএল ডাটাবেস সিস্টেমের জন্য যান। এটি ব্যবহারকারীকে পাশাপাশি ডেটা অনুসন্ধান করার অনুমতি দেবে।

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


1
৩০০ কী-মূল্যের জোড়াটি কি বিশাল পরিমাণের ডেটা? আমার এটি ঠিক রাখা দরকার
JCarlosR

1
সেক্ষেত্রে আপনার এসকিউএল ডাটাবেসের জন্য যাওয়া উচিত। অন্যথায়, এই 300 টি ডেটা পরিচালনা করা এবং পুনরুদ্ধার করা শক্ত হবে।
সামি আল-জাবর

তবে যদি সমস্ত কীগুলি জানা থাকে তবে ভাগ করা পছন্দগুলি থেকে ডেটা আনা সহজ হবে না?
অর্জুন

-6

এসকিউএল লাইট ভাগ করে নেওয়া পছন্দগুলি ভুলে যান, অঞ্চল ব্যবহার করুন। আপনার সমস্ত স্থানীয় সঞ্চয়স্থানের জন্য একটি একক সমাধান। আপনি রিয়েলমবজেক্টস হিসাবে প্লেইন পুরাতন জাভা অবজেক্টগুলি ব্যবহার করতে পারেন এবং সেখানে আপনার ডেটা সঞ্চয় করতে পারেন। আপনি বিক্রয় প্রশ্নগুলি JSON ফাইলগুলিতে রূপান্তর করতে পারেন। পুরো ডেটা বেসকে পার্স করার দরকার নেই। এই লিঙ্কটি পরীক্ষা করুন: https://realm.io/news/introducing-realm/


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