রেডিসের জন্য ব্যবহৃত অন্তর্নিহিত ডেটা স্ট্রাকচারগুলি কী কী?


305

আমি একটি নির্দিষ্ট তালিকায় দুটি প্রশ্নের উত্তর দেওয়ার চেষ্টা করছি:

  1. রেডিসের জন্য ব্যবহৃত অন্তর্নিহিত ডেটা স্ট্রাকচারগুলি কী কী?
  2. এবং প্রতিটি ধরণের জন্য প্রধান সুবিধা / অসুবিধাগুলি / ব্যবহারের ক্ষেত্রে কী কী?

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

বিশেষত, আমি সমস্ত ধরণের রূপরেখার সন্ধান করছি: স্ট্রিং, তালিকা, সেট, zset এবং হ্যাশ।

ওহ, আমি এখন পর্যন্ত অন্যদের মধ্যে এই নিবন্ধটি দেখেছি:


7
একটি সার্ভার ব্যবহার কিভাবে ট্রিভিয়া হয়? যখন আমি একটি প্রোগ্রামিং কাঠামো অন্য একটির উপরে ব্যবহার করব তখন কীভাবে তা নির্ধারণ করব? এটি সরাসরি প্রোগ্রামিংয়ের ক্ষেত্রে প্রযোজ্য, কারণ আমি বিভিন্ন ব্যবহারের জন্য বিভিন্ন ধরণের ব্যবহার করি।
হোমার

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

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

19
অ্যান্টেরিজের উত্তর এই প্রশ্নটিকে খণ্ডন করে। প্রোগ্রামারদের ক্ষতিকারক এবং বন্ধ ব্যবহারকারীদের যেকোন জায়গায় বন্ধ করুন।
জন শিহান

75
@ জেরি কফিন সকল প্রাপ্য সম্মানের সাথে, রেডিস হ'ল একটি সফ্টওয়্যার বিকাশ সরঞ্জাম এবং সফ্টওয়্যার বিকাশের সরঞ্জামগুলি সম্পর্কে প্রশ্ন জিজ্ঞাসা করার বিষয়টি দৃly়তার সাথে। "আপনি উত্স থেকে উত্তর পেতে পারেন" এই ঘটনাটি খুব কাছের কারণ নয় ... উত্স থেকে উত্তর পেতে কয়েক ঘন্টা সময় লাগবে। এবং redis খুব ব্যাপকভাবে ব্যবহৃত হয় তাই এই প্রশ্নটি খুব বেশি স্থানীয়ীকৃত হয় না। স্ট্যাক ওভারফ্লো হ'ল প্রোগ্রামিং সম্পর্কে শিখতে এবং কোন বুননীয় জনপ্রিয় প্রোগ্রামিং সরঞ্জাম দ্বারা ডেটা স্ট্রাকচার কী ব্যবহার করা হয় তা জিজ্ঞাসা করা সেই লক্ষ্যে অবদান রাখে। সংক্ষেপে আমি এই প্রশ্নটি বন্ধ করার কোনও কারণ খুঁজে পেতে ব্যর্থ।
জোয়েল স্পলস্কি

উত্তর:


612

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

তবে যেহেতু আপনি জিজ্ঞাসা করেছেন, এখানে প্রতিটি রেডিস ডেটা টাইপের অন্তর্নিহিত বাস্তবায়ন রয়েছে।

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

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

তবে আপনার প্রশ্নটি কেবল অভ্যন্তরীণ সম্পর্কে ছিল না, আপনার বক্তব্যটি কী সম্পাদন করতে ব্যবহার করতে হবে?

স্ট্রিংস

এটি সমস্ত ধরণের বেস টাইপ। এটি চার প্রকারের মধ্যে একটি তবে জটিল ধরণের বেস টাইপ, কারণ একটি তালিকা স্ট্রিংগুলির একটি তালিকা, একটি সেট স্ট্রিংগুলির একটি সেট এবং আরও অনেক কিছু।

আপনি যেখানে এইচটিএমএল পৃষ্ঠা সঞ্চয় করতে চান এমন সমস্ত স্পষ্ট দৃশ্যে একটি রেডিস স্ট্রিং একটি ভাল ধারণা, তবে যখন আপনি ইতিমধ্যে আপনার এনকোডযুক্ত ডেটা রূপান্তর এড়াতে চান। সুতরাং উদাহরণস্বরূপ, আপনার কাছে JSON বা মেসেজপ্যাক থাকলে আপনি কেবল স্ট্রিং হিসাবে বস্তু সংরক্ষণ করতে পারেন। রেডিস ২.6 এ আপনি লুয়া স্ক্রিপ্টগুলি ব্যবহার করে এই ধরণের অবজেক্ট সার্ভার সাইডটি পরিচালনা করতে পারেন।

স্ট্রিংগুলির আরেকটি আকর্ষণীয় ব্যবহার হ'ল বিটম্যাপস এবং সাধারণভাবে বাইটগুলির অযৌক্তিক অ্যাক্সেস অ্যারে, যেহেতু রেডিস বাইটস বা এমনকি একক বিটগুলির এলোমেলো রেঞ্জ অ্যাক্সেসের জন্য কমান্ড রপ্তানি করে। উদাহরণস্বরূপ এই ভাল ব্লগ পোস্টটি পরীক্ষা করুন : রেডিস ব্যবহার করে দ্রুত সহজ রিয়েল টাইম মেট্রিক্স

তালিকাসমূহ

তালিকাগুলি ভাল হয় যখন আপনি কেবলমাত্র তালিকার চরমগুলি স্পর্শ করতে পারেন: লেজ কাছাকাছি বা মাথার কাছাকাছি। স্টাফগুলি পৃষ্ঠাভুক্ত করার জন্য তালিকাগুলি খুব ভাল নয়, কারণ হে (এন) এলোমেলো অ্যাক্সেস ধীর। সুতরাং তালিকার ভাল ব্যবহারগুলি হ'ল সরল সারি এবং স্ট্যাকগুলি, বা একই উত্স এবং গন্তব্য সহ আইটেমের একটি রিং "আবর্তিত" করার জন্য RPOPLPUSH ব্যবহার করে একটি লুপে আইটেমগুলি প্রক্রিয়া করা হয়।

তালিকাগুলিও ভাল থাকে যখন আমরা কেবল N আইটেমগুলির একটি কেবলযুক্ত সংগ্রহ তৈরি করতে চাই যেখানে সাধারণত usually আমরা কেবল উপরের বা নীচের আইটেমগুলিতে অ্যাক্সেস করি বা যখন এন ছোট হয়।

সেট

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

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

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

ছোট সেটগুলি খুব কার্যকরী উপায়ে এনকোড করা হয়।

হ্যাশ

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

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

উল্লেখগুলি ব্যবহার করে লিঙ্কযুক্ত ডেটা স্ট্রাকচার উপস্থাপন করতে হ্যাশগুলিও ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ মন্তব্যগুলির লেমারনিউজ ডটকম বাস্তবায়ন পরীক্ষা করে দেখুন।

সাজানো সেট

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

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

সাজানো সেটগুলি অগ্রাধিকারের সারিতে ভাল।

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

উপসংহার

আমি আশা করি যে আমি এই পোস্টে কিছু তথ্য সরবরাহ করেছি তবে ল্যামারনিউজের উত্স কোডটি http://github.com/antirez/lamernews থেকে ডাউনলোড করা এবং এটি কীভাবে কাজ করে তা বোঝা ভাল। রেডিসের অনেকগুলি ডেটা স্ট্রাকচার লামার নিউজের অভ্যন্তরে ব্যবহৃত হয় এবং প্রদত্ত টাস্কটি সমাধান করার জন্য কী ব্যবহার করতে হবে সে সম্পর্কে অনেকগুলি ক্লু রয়েছে।

ব্যাকরণ টাইপগুলির জন্য দুঃখিত, এটি এখানে মধ্যরাত এবং পোস্টটি পর্যালোচনা করতে খুব ক্লান্ত;)


45
এটি রেডিসের একমাত্র লেখক। আমি তাকে ইমেল করেছি এবং তাকে উত্তর দিতে বলেছি। আপনাকে অনেক অনেক ধন্যবাদ সালভাতোর। এটি দুর্দান্ত তথ্য।
হোমার

58
ধন্যবাদ, তবে আমি একমাত্র বড় অবদানকারী নই, পিটার নুরডুইস বর্তমান প্রয়োগের খুব বড় অংশ সরবরাহ করেছেন :)
অ্যান্টেরিজ

1
যদি একটি অভিন্ন স্ট্রিংটি বিভিন্ন বিভিন্ন সেটে থাকে তবে কেবল স্ট্রিংয়ের একটি অনুলিপিই সংরক্ষণ করা যাবে?
sbrian

কীভাবে zscore ও (1) এ কেবলমাত্র একটি স্কিপ তালিকা ব্যবহার করে?
ম্যাক্সিমাম

1
স্কিপলিস্ট কোনও উপযুক্ত ভারসাম্যযুক্ত গাছ না হলেও আপনি কোনও স্কিপলিস্টকে "বিপরীত" র্যান্ডম ট্রি হিসাবে দেখতে পারেন। এগুলি বাস্তবায়ন এবং বিন্যাস পৃথক হলেও মূলত সমান সমান।
anomotz

80

বেশিরভাগ সময়, আপনাকে রেডিস দ্বারা ব্যবহৃত অন্তর্নিহিত ডেটা স্ট্রাকচারগুলি বোঝার দরকার নেই। তবে কিছুটা জ্ঞান আপনাকে সিপিইউ v / গুলি মেমরি ট্রেড অফ করতে সহায়তা করে। এটি আপনাকে কার্যকর উপায়ে আপনার ডেটা মডেল করতে সহায়তা করে।

অভ্যন্তরীণভাবে, রেডিস নিম্নলিখিত ডেটা স্ট্রাকচারগুলি ব্যবহার করে:

  1. দড়ি
  2. অভিধান
  3. দ্বিগুণ লিঙ্কযুক্ত তালিকা
  4. তালিকা ছেড়ে যান
  5. জিপ তালিকা
  6. ইন্টার সেট
  7. জিপ মানচিত্র (রেডিস ২.6 থেকে জিপ তালিকার পক্ষে অবনমিত)

নির্দিষ্ট কী দ্বারা ব্যবহৃত এনকোডিং সন্ধান করতে কমান্ডটি ব্যবহার করুন object encoding <key>

স্ট্রিংস

Redis সালে স্ট্রিংস বলা হয় সাধারণ ডায়নামিক স্ট্রিংস, অথবা এসডিএস । এটি একটি উপর একটি ছোট্ট মোড়কchar * যা আপনাকে স্ট্রিংয়ের দৈর্ঘ্য এবং ফ্রি বাইটের সংখ্যাকে একটি উপসর্গ হিসাবে সংরক্ষণ করতে দেয়।

স্ট্রিংয়ের দৈর্ঘ্য সঞ্চিত হওয়ায় স্ট্র্লেন হ'ল একটি (1) অপারেশন। দৈর্ঘ্য জানা হওয়ার কারণে, রেডিস স্ট্রিংগুলি বাইনারি নিরাপদ। কোনও স্ট্রিংয়ের জন্য নাল চরিত্রটি থাকা একেবারে আইনী ।

স্ট্রিংগুলি রেডিসে পাওয়া সর্বাধিক বহুমুখী ডেটা স্ট্রাকচার। একটি স্ট্রিং নীচের সমস্ত :

  1. অক্ষরের একটি স্ট্রিং যা পাঠ্য সংরক্ষণ করতে পারে। দেখুন সেট এবং পেতে কমান্ড।
  2. একটি বাইট অ্যারে যা বাইনারি ডেটা সঞ্চয় করতে পারে।
  3. একটি longযে নম্বর সংরক্ষণ করতে পারেন। দেখুন বেতন বৃদ্ধির , DECR , INCRBY এবং DECRBY কমান্ড।
  4. একটি অ্যারের (এর chars, ints, longsযে দক্ষ রেণ্ডম এক্সেস অনুমতি দিতে পারেন বা অন্য কোন ডাটা টাইপ)। দেখুন SETRANGE এবং GETRANGE কমান্ড।
  5. একটি বিট অ্যারে যা আপনাকে পৃথক বিট সেট করতে বা পেতে দেয়। দেখুন SETBIT এবং GETBIT কমান্ড।
  6. মেমরির একটি ব্লক যা আপনি অন্যান্য ডেটা স্ট্রাকচার তৈরি করতে ব্যবহার করতে পারেন। এটি জিপলিস্ট এবং ইনসেটগুলি তৈরি করতে অভ্যন্তরীণভাবে ব্যবহৃত হয়, যা কম সংখ্যক উপাদানগুলির জন্য কমপ্যাক্ট, মেমরি-দক্ষ ডেটা স্ট্রাকচার। এই নীচে আরও।

2. অভিধান

রেডিস নিম্নলিখিতগুলির জন্য একটি অভিধান ব্যবহার করে:

  1. এর সাথে সম্পর্কিত মানটির একটি কী মানচিত্র করতে, যেখানে মানটি স্ট্রিং, হ্যাশ, সেট, সাজানো সেট বা তালিকা হতে পারে।
  2. এর মেয়াদ শেষ হওয়ার টাইমস্ট্যাম্পের একটি কী মানচিত্র করতে।
  3. হ্যাশ, সেট এবং সাজানো সেট ডেটা ধরণের প্রয়োগ করতে।
  4. এই আদেশগুলি পরিচালনা করে এমন ফাংশনগুলিতে রেডিস কমান্ডগুলি ম্যাপ করতে To
  5. সেই কীটিতে অবরুদ্ধ ক্লায়েন্টগুলির তালিকার একটি রেডিস কী মানচিত্র করতে। বিএলপিওপি দেখুন ।

রেডিস ডিকোচারগুলি হ্যাশ টেবিলগুলি ব্যবহার করে প্রয়োগ করা হয় । বাস্তবায়নটি ব্যাখ্যা করার পরিবর্তে, আমি কেবল রেডিস নির্দিষ্ট জিনিসগুলি ব্যাখ্যা করব:

  1. dictTypeঅভিধানগুলি হ্যাশ টেবিলের আচরণ প্রসারিত করতে একটি কাঠামো ব্যবহার করে । এই কাঠামোর ফাংশন পয়েন্টার রয়েছে, এবং তাই নিম্নলিখিত ক্রিয়াকলাপগুলি প্রসারণযোগ্য: ক) হ্যাশ ফাংশন, খ) কী তুলনা, গ) কী ডিস্ট্রাক্টর এবং ঘ) মান বিনষ্টকারী।
  2. শব্দকোষগুলি মুরমারহশ 2 ব্যবহার করে । (পূর্বে তারা ব্যবহৃত djb2 হ্যাশ ফাংশন বীজ = 5381 সঙ্গে, কিন্তু তারপর হ্যাশ ফাংশন murmur2 স্যুইচ ছিল । দেখুন djb2 হ্যাশ অ্যালগরিদম একটি ব্যাখ্যা জন্য এই প্রশ্নের ।)
  3. রেডিস বর্ধিত হ্যাশিং ব্যবহার করে, যা বর্ধিত আকার পরিবর্তন হিসাবেও পরিচিত । অভিধানটিতে দুটি হ্যাশ টেবিল রয়েছে। প্রতিবার অভিধানটি স্পর্শ করলে একটি বালতি প্রথম (ছোট) হ্যাশ টেবিল থেকে দ্বিতীয়টিতে স্থানান্তরিত হয়। এইভাবে, রেডিস একটি ব্যয়বহুল পুনরায় আকার দেওয়ার অপারেশনটিকে বাধা দেয়।

Setডাটা স্ট্রাকচার গ্যারান্টি কোন সদৃশ আছে একটি অভিধান ব্যবহার করে। Sorted Setতার স্কোর, যার কারণে একটি উপাদান মানচিত্রে একটি অভিধান ব্যবহার ZSCORE ক্ষেত্রের একটি হে রয়েছে (1) অপারেশন।

৩. দ্বিগুণভাবে লিঙ্কযুক্ত তালিকাগুলি

listডাটা টাইপ ব্যবহার বাস্তবায়িত হয় দোকর লিঙ্ক তালিকা । রেডিসের বাস্তবায়ন হ'ল আলগোরিদিম-পাঠ্যপুস্তক থেকে সরাসরি। কেবলমাত্র পরিবর্তনটি হ'ল তালিকার ডাটা স্ট্রাকচারে রেডিস দৈর্ঘ্য সঞ্চয় করে। এটি নিশ্চিত করে যে এলএলএন- এর ও (1) জটিলতা রয়েছে।

৪. তালিকাগুলি বাদ দিন

Redis ব্যবহার এড়িয়ে তালিকাসমূহ সাজানো সেটের জন্য অন্তর্নিহিত ডাটা স্ট্রাকচার হিসাবে। উইকিপিডিয়া একটি ভাল ভূমিকা আছে। উইলিয়াম পুঘের কাগজ ছেড়ে যান: একটি ভারসাম্যযুক্ত গাছের সম্ভাব্য বিকল্পের আরও বিশদ রয়েছে।

বাছাই করা সেটগুলি একটি এড়িয়ে যাওয়া তালিকা এবং অভিধান উভয়ই ব্যবহার করে। অভিধানে প্রতিটি উপাদানের স্কোর সংরক্ষণ করা হয়।

রেডিসের এড়িয়ে যান তালিকার প্রয়োগটি নিম্নলিখিত উপায়ে মান বাস্তবায়নের চেয়ে পৃথক:

  1. রেডিস নকল স্কোরের অনুমতি দেয়। দুটি নোডের যদি একই স্কোর থাকে তবে সেগুলি ডিক্সিকোগ্রাফিক ক্রম অনুসারে বাছাই করা হয় ।
  2. প্রতিটি নোডের 0 স্তরে একটি ব্যাক পয়েন্টার থাকে এটি আপনাকে স্কোরের বিপরীত ক্রমে উপাদানগুলি অতিক্রম করতে দেয়।

5. জিপ তালিকা

একটি জিপ তালিকা দ্বিগুণ সংযুক্ত তালিকার মতো, এটি পয়েন্টার ব্যবহার করে না এবং ডাটা ইনলাইন সঞ্চয় করে।

দ্বিগুণ সংযুক্ত তালিকার প্রতিটি নোডে 3 পয়েন্টার থাকে - একটি ফরোয়ার্ড পয়েন্টার, একটি পশ্চাৎ পয়েন্টার এবং একটি পয়েন্টার সেই নোডে সঞ্চিত ডেটা উল্লেখ করতে। পয়েন্টারগুলির জন্য মেমরির প্রয়োজন (একটি 64 বিট সিস্টেমে 8 বাইট), এবং তাই ছোট তালিকার জন্য, দ্বিগুণ লিঙ্কযুক্ত তালিকাটি খুব অযোগ্য।

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

জিপ তালিকাটি ছোট তালিকা, সাজানো সেট এবং হ্যাশগুলি সঞ্চয় করতে ব্যবহৃত হয়। সাজানো সেটগুলি [element1, score1, element2, score2, element3, score3]জিপ তালিকার মতো একটি তালিকায় সমতল এবং স্টোর করা হয়। হ্যাশগুলি [key1, value1, key2, value2]ইত্যাদির মতো তালিকায় সমতল হয় are

জিপ তালিকাগুলি সহ আপনার সিপিইউ এবং মেমোরির মধ্যে ট্রেড অফ করার ক্ষমতা রয়েছে। জিপ তালিকা মেমোরি-দক্ষ, তবে তারা একটি লিঙ্কযুক্ত তালিকার চেয়ে বেশি সিপিইউ ব্যবহার করে (বা হ্যাশ টেবিল / স্কিপ তালিকা)) জিপ তালিকায় একটি উপাদান সন্ধান করা হ'ল হে (এন)। একটি নতুন উপাদান সন্নিবেশ করানোর জন্য মেমরিটিকে পুনর্বিবেচনার প্রয়োজন। এর কারণে, রেডিস কেবলমাত্র ছোট তালিকা, হ্যাশ এবং সাজানো সেটগুলির জন্য এই এনকোডিংটি ব্যবহার করে। আপনি মান পরিবর্তন করে এই আচরণ বদলাতে পারেন <datatype>-max-ziplist-entriesএবং <datatype>-max-ziplist-value>redis.conf হবে। আরও তথ্যের জন্য রেডিস মেমরি অপটিমাইজেশন, বিভাগ "ছোট ছোট ডেটা ধরণের বিশেষ এনকোডিং" বিভাগটি দেখুন।

Ziplist.c মন্তব্য চমৎকার হয়, এবং আপনি কোড পড়তে না করেও সম্পূর্ণরূপে এই ডাটা স্ট্রাকচার বুঝতে পারবেন না।

6. ইনট সেট

ইন্ট সেটস "সাজানো পূর্ণসংখ্যার অ্যারে" এর অভিনব নাম।

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

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

আরও মেমরি অপ্টিমাইজেশন হিসাবে, ইন সেটগুলি বিভিন্ন পূর্ণসংখ্যার আকার সহ 3 ভেরিয়েন্টে আসে: 16 বিট, 32 বিট এবং 64 বিট। উপাদানগুলির আকারের উপর নির্ভর করে সঠিক রূপটি ব্যবহার করতে রেডিস যথেষ্ট স্মার্ট smart যখন কোনও নতুন উপাদান যুক্ত করা হয় এবং এটি বর্তমান আকারের চেয়ে বেশি হয়ে যায়, রেডিস স্বয়ংক্রিয়ভাবে এটিকে পরবর্তী আকারে স্থানান্তরিত করে। যদি কোনও স্ট্রিং যুক্ত করা হয় তবে রেডিস স্বয়ংক্রিয়ভাবে ইন্ট সেটটিকে নিয়মিত হ্যাশ টেবিল ভিত্তিক সেটটিতে রূপান্তর করে।

ইন্টার সিটগুলি সিপিইউ এবং মেমোরির মধ্যে একটি বাণিজ্য are ইন্টার সেটগুলি অত্যন্ত মেমরির দক্ষ এবং ছোট সেটগুলির জন্য তারা হ্যাশ টেবিলের চেয়ে দ্রুত are তবে নির্দিষ্ট সংখ্যক উপাদানের পরে, ও (লগ এন) পুনরুদ্ধারের সময় এবং মেমরিটিকে পুনর্বিবেচনার ব্যয় খুব বেশি হয়ে যায়। পরীক্ষাগুলির উপর ভিত্তি করে, নিয়মিত হ্যাশ টেবিলটিতে সর্বাধিক প্রান্তিকের সীমাটি 512 পাওয়া গিয়েছিল However তবে, আপনার অ্যাপ্লিকেশনটির প্রয়োজনের উপর ভিত্তি করে আপনি এই প্রান্তিকতাটি (এটি হ্রাস করার কোনও মানে হয় না) বাড়িয়ে নিতে পারেন। set-max-intset-entriesRedis.conf এ দেখুন ।

7. জিপ মানচিত্র

জিপ মানচিত্র হ'ল অভিধানগুলি সমতল এবং তালিকায় সঞ্চিত। এগুলি জিপ লিস্টগুলির সাথে খুব মিল।

রেডিস ২.6 এর পরে জিপ মানচিত্রগুলি অবচিত করা হয়েছে এবং ছোট হ্যাশগুলি জিপ তালিকাগুলিতে সঞ্চিত রয়েছে। এই এনকোডিং সম্পর্কে আরও জানতে, zipmap.c এ দেওয়া মন্তব্যগুলি দেখুন


2

Redis মানগুলি নির্দেশ করে কীগুলি সঞ্চয় করে। কীগুলি যুক্তিসঙ্গত আকার অবধি কোনও বাইনারি মান হতে পারে (পড়ার যোগ্যতা এবং ডিবাগিংয়ের উদ্দেশ্যে সংক্ষিপ্ত ASCII স্ট্রিং ব্যবহার করার পরামর্শ দেওয়া হয়)। মানগুলি পাঁচটি দেশীয় রেডিসের মধ্যে একটি।

1. স্ট্রিংস - 512 এমবি অবধি বাইনারি নিরাপদ বাইটগুলির একটি ক্রম

2. শ্যাশ - মূল মান জোড়ের সংকলন

3. তালিকাগুলি - একটি সন্নিবেশ-ক্রয়ের স্ট্রিংয়ের সংগ্রহ

৪.সেটস - কোনও অর্ডার ছাড়াই অনন্য স্ট্রিংয়ের সংগ্রহ

5. সাজানো সেট - ব্যবহারকারী নির্ধারিত স্কোরিং দ্বারা অর্ডার করা অনন্য স্ট্রিংয়ের একটি সংগ্রহ

স্ট্রিংস

একটি রেডিস স্ট্রিং বাইটের ক্রম।

রেডিসের স্ট্রিংগুলি বাইনারি নিরাপদ (যার অর্থ তাদের নির্দিষ্ট দৈর্ঘ্যের কোনও বিশেষ সমাপ্তি অক্ষর দ্বারা নির্ধারিত নয়), সুতরাং আপনি একটি স্ট্রিংয়ে 512 মেগাবাইট পর্যন্ত যে কোনও কিছু সঞ্চয় করতে পারেন।

স্ট্রিংস হ'ল কামানिकल "কী ভ্যালু স্টোর" ধারণা। আপনার একটি মানকে নির্দেশ করে একটি কী রয়েছে, যেখানে কী এবং মান উভয়ই পাঠ্য বা বাইনারি স্ট্রিং থাকে।

স্ট্রিংয়ের সমস্ত সম্ভাব্য ক্রিয়াকলাপের জন্য, http://redis.io/commands/#string দেখুন

হ্যাশ

একটি রেডিস হ্যাশ মূল মান জোড়াগুলির একটি সংগ্রহ।

একটি রেডিস হ্যাশ অনেকগুলি মূল মান জোড়া রাখে, যেখানে প্রতিটি কী এবং মান একটি স্ট্রিং। রেডিস হ্যাশগুলি সরাসরি জটিল মানগুলিকে সমর্থন করে না (অর্থাত্ আপনার একটি হ্যাশ ফিল্ডের একটি তালিকার মূল্য বা সেট বা অন্য কোনও হ্যাশ থাকতে পারে না) তবে আপনি শীর্ষ স্তরের জটিল মানগুলিতে নির্দেশ করতে হ্যাশ ক্ষেত্রগুলি ব্যবহার করতে পারেন। একমাত্র বিশেষ ক্রিয়াকলাপ যা আপনি হ্যাশ ক্ষেত্রের মানগুলিতে করতে পারেন তা হ'ল পারমাণবিক বৃদ্ধি / সংখ্যার সামগ্রীর হ্রাস।

আপনি দুটি উপায়ে একটি রেডিস হ্যাশ সম্পর্কে ভাবতে পারেন: প্রত্যক্ষ বস্তুর উপস্থাপনা হিসাবে এবং অনেকগুলি ছোট মানকে নিখুঁতভাবে সঞ্চয় করার উপায় হিসাবে।

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

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

হ্যাশগুলিতে সমস্ত সম্ভাব্য ক্রিয়াকলাপের জন্য, হ্যাশ ডক্স দেখুন

তালিকাসমূহ

Redis তালিকাগুলি লিঙ্কযুক্ত তালিকার মতো কাজ করে।

আপনি তালিকার মাথা বা লেজ উভয় থেকে সন্নিবেশ করতে, মুছতে এবং ট্র্যাভারস তালিকাগুলি সন্নিবেশ করতে পারেন।

তালিকাগুলি ব্যবহার করুন যখন আপনার সন্নিবেশ করানো ক্রমে মানগুলি বজায় রাখা দরকার। (আপনার যদি প্রয়োজন হয় তবে রেডিস আপনাকে যে কোনও স্বেচ্ছাসেবীর তালিকায় প্রবেশ করার বিকল্প দেয় না, তবে আপনি যদি আপনার শুরু অবস্থান থেকে দূরে সন্নিবেশ করেন তবে আপনার সন্নিবেশ কর্মক্ষমতা হ্রাস পাবে।)

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

আপনি কোনও তালিকাটিকে স্ট্যাক বা একটি সারি হিসাবে গণ্য করতে সক্ষম করে কোনও তালিকার উভয় প্রান্তেই পরমাণুগতভাবে অপসারণ করতে পারেন।

আপনি প্রতিটি সন্নিবেশের পরে একটি নির্দিষ্ট আকারে আপনার তালিকাটি ছাঁটাই করে স্থির দৈর্ঘ্যের তালিকাগুলি (ক্যাপড সংগ্রহগুলি) বজায় রাখতেও পারেন।

তালিকাগুলিতে সমস্ত সম্ভাব্য ক্রিয়াকলাপের জন্য, তালিকা ডকগুলি দেখুন

সেট

রেডিস সেটগুলি ভাল, সেটগুলি রয়েছে।

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

সেট সদস্যতা চেক, সন্নিবেশ এবং সেটে সদস্যদের মুছে ফেলার জন্য দ্রুত গতিতে রয়েছে।

সেটগুলির দক্ষ সেট অপারেশন রয়েছে, যেমনটি আপনি আশা করবেন would আপনি একসাথে ইউনিয়ন, ছেদ এবং একাধিক সেটের পার্থক্য নিতে পারেন। হয় ফলাফলকে কলারে ফেরত দেওয়া যেতে পারে বা ফলাফলগুলি পরে ব্যবহারের জন্য একটি নতুন সেটে সংরক্ষণ করা যেতে পারে।

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

সেটগুলিতে সমস্ত সম্ভাব্য ক্রিয়াকলাপের জন্য, সেটগুলি ডক্স দেখুন

সাজানো সেট

রেডিস সাজানো সেটগুলি ব্যবহারকারী-সংজ্ঞায়িত ক্রম সহ সেট হয় are

সরলতার জন্য, আপনি অনন্য উপাদানগুলির সাথে বাইনারি গাছ হিসাবে বাছাই করা সেটটি ভাবতে পারেন। (রেডিস বাছাই করা সেটগুলি আসলে তালিকাগুলি বাদ দেয় )) উপাদানগুলির সাজানোর ক্রম প্রতিটি উপাদানের স্কোর দ্বারা সংজ্ঞায়িত হয়।

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

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

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

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

বাছাই করা সেটগুলিতে সমস্ত সম্ভাব্য ক্রিয়াকলাপের জন্য, বাছাই করা সেট ডক্স দেখুন।

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