Data Compaction এবং Garbage Collection

ক্যাসান্দ্রা (Cassandra) - Big Data and Analytics

354

Apache Cassandra একটি ডিস্ট্রিবিউটেড NoSQL ডেটাবেস যা দ্রুত এবং স্কেলেবল ডেটা সঞ্চয়ের জন্য ডিজাইন করা হয়েছে। Cassandra এর আর্কিটেকচারে কিছু বিশেষ প্রক্রিয়া রয়েছে, যেমন Data Compaction এবং Garbage Collection, যা সিস্টেমের কর্মক্ষমতা, ডেটা ব্যবস্থাপনা এবং স্টোরেজ দক্ষতা বজায় রাখে। এই দুটি প্রক্রিয়া Cassandra এর দীর্ঘমেয়াদি কার্যকারিতা নিশ্চিত করে, বিশেষত যখন সিস্টেমে বড় পরিমাণ ডেটা সংরক্ষণ করা হয়।

1. Data Compaction: ডেটা কমপ্যাকশন কী এবং কেন গুরুত্বপূর্ণ


Data Compaction হল একটি প্রক্রিয়া যেখানে Cassandra ডেটার অপ্রয়োজনীয় কপি এবং ডুপ্লিকেট তথ্য মুছে ফেলে এবং স্টোরেজ স্পেস অপ্টিমাইজ করে। Cassandra তে, ডেটা একাধিকবার সঞ্চিত হতে পারে বিভিন্ন রাইট অপারেশনের কারণে (যেমন, ডেটা আপডেট বা ডিলিট), এবং এই ডুপ্লিকেট ডেটা সিস্টেমের পারফরম্যান্স এবং স্টোরেজের কার্যকারিতা কমিয়ে দিতে পারে।

Data Compaction এর উদ্দেশ্য:

  1. স্টোরেজ অপ্টিমাইজেশন: Cassandra তে ডেটার বারবার আপডেট হওয়ায় অতিরিক্ত ডেটার কপি তৈরি হতে পারে। কমপ্যাকশন সিস্টেমে পুরনো বা অপ্রয়োজনীয় ডেটার কপি সরিয়ে ফেলে এবং ডেটার সঞ্চয়কে দক্ষ করে।
  2. পুনরুদ্ধার এবং অ্যাক্সেসে গতি: কমপ্যাকশন প্রক্রিয়ায় ডেটা এমনভাবে সাজানো হয় যাতে দ্রুত ডেটা অ্যাক্সেস করা যায় এবং রিড অপারেশনের গতি বাড়ানো যায়।

Cassandra তে Data Compaction এর প্রকার:

  1. Size-Tiered Compaction (STCS):
    • এই পদ্ধতিতে, Cassandra বড় সাইজের SSTable ফাইলগুলোকে একটি নির্দিষ্ট আকারের ভিত্তিতে গ্রুপ করে এবং তারপর সেগুলিকে একত্রে কম্প্যাক্ট করে।
    • সাধারণত, এতে ছোট সাইজের ফাইলগুলোর তুলনায় বড় সাইজের ফাইল দ্রুত কম্প্যাক্ট হয়।
  2. Leveled Compaction (LCS):
    • Leveled Compaction মেথডে, ডেটা SSTable ফাইলগুলোর মধ্যে নির্দিষ্ট স্তর (level) তৈরি করে এবং প্রতিটি স্তরে ডেটা সাজানো হয়। এটি ডেটার সঠিক স্থানে সঞ্চয় নিশ্চিত করে এবং পুনরুদ্ধার প্রক্রিয়ায় গতি আনে।
    • LCS প্রধানত রিড অপারেশনের জন্য উপযুক্ত।
  3. Time-Window Compaction Strategy (TWCS):
    • Time-Window Compaction স্ট্র্যাটেজি মূলত টাইম-সিরিজ ডেটা সংরক্ষণের জন্য ব্যবহৃত হয়। এখানে ডেটা কমপ্যাক্ট করার সময় সময়সীমা (time window) নির্ধারণ করা হয়, যেমন এক মাসের পুরানো ডেটা একত্রিত করে কমপ্যাক্ট করা হয়।

Data Compaction প্রক্রিয়া কিভাবে কাজ করে:

  1. Cassandra তে রাইট অপারেশনের সময় ডেটা প্রথমে Memtable এ লেখা হয়, তারপর SSTable ফরম্যাটে সংরক্ষিত হয়।
  2. সময়ের সাথে সাথে, একাধিক SSTable ফাইল তৈরি হতে থাকে। যখন একাধিক ফাইল জমা হয় এবং সেগুলিতে অপ্রয়োজনীয় ডুপ্লিকেট ডেটা থাকে, তখন কমপ্যাকশন প্রক্রিয়া সেই ফাইলগুলোকে একত্র করে, পুরনো বা অপ্রয়োজনীয় ডেটা মুছে ফেলে এবং একটি নতুন ফাইল তৈরি করে।
  3. কমপ্যাকশন সময়ের সাথে সিস্টেমের পারফরম্যান্স এবং স্টোরেজের দক্ষতা বজায় রাখে।

2. Garbage Collection: ক্যাসান্দ্রায় গার্বেজ কালেকশন কী এবং কেন গুরুত্বপূর্ণ


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

Garbage Collection এর উদ্দেশ্য:

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

Cassandra তে Garbage Collection এর কাজ:

  • Tombstone Marking: Cassandra তে যখন কোনো রেকর্ড DELETE বা UPDATE করা হয়, তখন এটি tombstone হিসেবে মার্ক করা হয়। Tombstone হলো একটি বিশেষ মার্ক যা জানায় যে ওই ডেটা আর ব্যবহারযোগ্য নয় এবং এটি মুছে ফেলা হবে। গার্বেজ কালেকশন তখন এই tombstone ডেটাগুলো মুছে ফেলে।
  • SSTable File Cleanup: Cassandra তে SSTable ফাইলের মধ্যে ডেটা থাকে। যখন ডেটা মুছে ফেলা হয়, তখন সেই ডেটার tombstone সিস্টেমে থাকে যতক্ষণ না কমপ্যাকশন প্রক্রিয়া সেই tombstone মুছে ফেলে।

Garbage Collection Timing:

  • Cassandra গার্বেজ কালেকশন প্রক্রিয়া JVM Garbage Collection এর মাধ্যমে পরিচালিত হয়। Cassandra তে কমপ্যাকশন এবং গার্বেজ কালেকশন প্রক্রিয়া একসাথে কাজ করে, যাতে সিস্টেমের পারফরম্যান্স বজায় থাকে।

3. Data Compaction এবং Garbage Collection এর পারফরম্যান্সে প্রভাব


  • কমপ্যাকশন ডেটা স্টোরেজের কার্যকারিতা উন্নত করতে সাহায্য করে, তবে এটি সিস্টেমে অতিরিক্ত লোড তৈরি করতে পারে, বিশেষত যখন অনেক ফাইল একত্রে কমপ্যাক্ট করা হয়। এর ফলে CPU এবং ডিস্কের উপর চাপ বাড়তে পারে।
  • গার্বেজ কালেকশন মেমরি এবং স্টোরেজ স্পেস অপটিমাইজ করতে সহায়তা করে, তবে এটি সিস্টেমের পারফরম্যান্সে বিরতি তৈরি করতে পারে যদি নিয়মিত গার্বেজ কালেকশন না করা হয়।

বেশি লোডে পারফরম্যান্স নিয়ন্ত্রণ:

  • Compaction Throttling: Cassandra তে কমপ্যাকশন থ্রটলিং কনফিগার করা যায়, যাতে অতিরিক্ত কমপ্যাকশন সিস্টেমের পারফরম্যান্সে বিরতি সৃষ্টি না করে।
  • Tombstone Purging: Cassandra তে tombstone purge করতে হলে সঠিক সময় নির্ধারণ করতে হয়, যাতে সিস্টেমে অতিরিক্ত গার্বেজ কালেকশন প্রক্রিয়া চলতে না থাকে।

সারাংশ


Data Compaction এবং Garbage Collection Cassandra-র দুইটি গুরুত্বপূর্ণ প্রক্রিয়া যা সিস্টেমের স্টোরেজ এবং পারফরম্যান্স অপটিমাইজ করতে সাহায্য করে। Data Compaction প্রক্রিয়া ডেটার অতিরিক্ত কপি বা ডুপ্লিকেট ডেটা মুছে ফেলে এবং স্টোরেজে স্থান খালি করে, আর Garbage Collection প্রক্রিয়া tombstone এবং অপ্রয়োজনীয় ডেটা মুছে ফেলতে সাহায্য করে। এই দুটি প্রক্রিয়া সঠিকভাবে পরিচালনা করা হলে Cassandra ডেটাবেসের কার্যকারিতা বজায় রাখা সম্ভব।

Content added By

Apache Cassandra একটি ডিস্ট্রিবিউটেড NoSQL ডেটাবেস সিস্টেম যা ডেটার উচ্চ পারফরম্যান্স এবং স্কেলেবিলিটি নিশ্চিত করতে ডিজাইন করা হয়েছে। Cassandra-র ডেটা স্টোরেজ পদ্ধতির একটি গুরুত্বপূর্ণ উপাদান হলো SSTable (Sorted String Table)। যখন SSTable ফাইলগুলি বড় হয়, তখন Compaction প্রক্রিয়া প্রয়োজন হয়। SSTable Compaction হল সেই প্রক্রিয়া যেখানে পুরনো এবং ছোট SSTable ফাইলগুলি একত্রিত (merge) করে একটি নতুন SSTable ফাইল তৈরি করা হয়।

SSTable কম্প্যাকশন ডেটার স্টোরেজ, পারফরম্যান্স এবং স্কেলেবিলিটি নিশ্চিত করতে গুরুত্বপূর্ণ ভূমিকা পালন করে। এটি ডেটার পুনরাবৃত্তি (duplicate) অপসারণ, ডেটার স্থান ব্যবস্থাপনা, এবং ডিস্ক স্পেস অপটিমাইজেশনের জন্য প্রয়োজনীয় প্রক্রিয়া।


1. SSTable Compaction কী?


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

SSTable Compaction এর উদ্দেশ্য:

  1. ডুপ্লিকেট ডেটা অপসারণ: ডেটা আপডেট হওয়ার পর নতুন SSTable তৈরি হলে পুরনো SSTable এর কিছু অংশ ডুপ্লিকেট হতে পারে। কম্প্যাকশন প্রক্রিয়া সেই ডুপ্লিকেট ডেটা মুছে ফেলে এবং একত্রিত করে।
  2. ডেটার স্থান ব্যবস্থাপনা: সঠিকভাবে SSTable গুলি একত্রিত করে ডিস্ক স্পেস অপটিমাইজেশন করা হয়। এটি কম্প্যাকশন পরে ডেটার স্পেস কমিয়ে আনে, যার ফলে ডিস্ক ব্যবহারের দক্ষতা বাড়ে।
  3. পারফরম্যান্স উন্নতি: কম্প্যাকশন প্রক্রিয়া ডেটা অ্যাক্সেসের গতিও বৃদ্ধি করে, কারণ এটি একাধিক SSTable এর মধ্যে সন্নিবেশিত ডেটাকে একটি বড় SSTable ফাইলে সংরক্ষণ করে।

2. SSTable Compaction এর প্রক্রিয়া


SSTable কম্প্যাকশন প্রক্রিয়া কয়েকটি ধাপে সম্পন্ন হয়:

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

উদাহরণ:

ধরা যাক, ৫টি SSTable ফাইল রয়েছে এবং প্রতিটি ফাইলে একই customer_id এর ডেটা রয়েছে। এখন কম্প্যাকশন প্রক্রিয়া চলাকালীন, সিস্টেম পুরনো ডেটা মুছে ফেলে এবং সর্বশেষ ডেটাটি একত্রিত করে একটি নতুন SSTable ফাইলে সংরক্ষণ করবে।


3. SSTable Compaction Types


Cassandra তে SSTable Compaction এর বিভিন্ন ধরনের রয়েছে, যেগুলো বিভিন্ন প্রকার ডেটা ও পরিস্থিতিতে ব্যবহৃত হয়। কিছু সাধারণ কম্প্যাকশন স্ট্র্যাটেজি হলো:

3.1 Size-Tiered Compaction (STCS)

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

3.2 Leveled Compaction (LCS)

  • Leveled Compaction একটি উন্নত স্ট্র্যাটেজি যা ডেটাকে স্তরের (levels) মধ্যে বিভক্ত করে। এখানে প্রতিটি স্তরে নির্দিষ্ট আকারের SSTable থাকে, এবং কম্প্যাকশন শুধুমাত্র সেই স্তরের মধ্যে কাজ করে।
  • উপকারিতা: এটি সাধারণত ডিস্ক স্পেস এবং পারফরম্যান্স ব্যবস্থাপনায় আরও কার্যকরী এবং ডুপ্লিকেট ডেটা কম থাকে।
  • ক্ষতি: Leveled Compaction এর জন্য আরও বেশি CPU শক্তি প্রয়োজন এবং এটি বড় আকারের ডেটাসেটে তেমন কার্যকরী নাও হতে পারে।

3.3 Time-Window Compaction (TWCS)

  • Time-Window Compaction সময়ের মধ্যে ডেটার কম্প্যাকশন পরিচালনা করে। এটি সাধারণত টাইম-সিরিজ ডেটার জন্য ব্যবহৃত হয়, যেখানে এক সময়কালে ডেটা একত্রিত করা হয়।
  • উপকারিতা: এটি টাইম-সিরিজ ডেটার জন্য খুবই কার্যকরী, কারণ এতে ডেটার আপডেট এবং রিপ্লিকেশন সহজ হয়ে যায়।
  • ক্ষতি: এই পদ্ধতি শুধুমাত্র টাইম-সিরিজ ডেটার ক্ষেত্রে কার্যকরী।

4. SSTable Compaction এর সুবিধা


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

5. SSTable Compaction এর চ্যালেঞ্জ


  • CPU এবং ডিস্ক ব্যবহার: কম্প্যাকশন প্রক্রিয়া চলাকালে সিস্টেমের CPU এবং ডিস্ক অধিক ব্যবহার হতে পারে, যা কিছু সময়ে পারফরম্যান্স কমিয়ে দিতে পারে।
  • লম্বা সময় নিতে পারে: বড় ডেটাসেটের জন্য কম্প্যাকশন অনেক সময় নিতে পারে, যা দীর্ঘ সময় ধরে সিস্টেমের কার্যকারিতা প্রভাবিত করতে পারে।
  • ফ্লাসিং ইস্যু: যদি খুব বেশি Memtable থাকে এবং দ্রুত SSTable ফ্লাশ না হয়, তবে সিস্টেমের পারফরম্যান্স কিছুটা কম হতে পারে।

সারাংশ


SSTable Compaction Cassandra-র ডেটা ম্যানেজমেন্টে একটি গুরুত্বপূর্ণ প্রক্রিয়া যা ডেটার স্থায়িত্ব, স্কেলেবিলিটি, এবং পারফরম্যান্স নিশ্চিত করতে সহায়ক। কম্প্যাকশন প্রক্রিয়া ডেটার ডুপ্লিকেট অপসারণ, ডিস্ক স্পেস অপটিমাইজেশন এবং পারফরম্যান্স বৃদ্ধি করতে সহায়তা করে। Cassandra তে Size-Tiered, Leveled, এবং Time-Window কম্প্যাকশন স্ট্র্যাটেজি বিভিন্ন ধরনের ডেটা ব্যবস্থাপনা এবং কার্যকারিতা নিশ্চিত করে। যদিও কিছু চ্যালেঞ্জও রয়েছে, তবে সঠিকভাবে কম্প্যাকশন প্রক্রিয়া চালানো Cassandra সিস্টেমের দীর্ঘমেয়াদী পারফরম্যান্স নিশ্চিত করে।

Content added By

Apache Cassandra একটি ডিস্ট্রিবিউটেড NoSQL ডেটাবেস যা ডেটা স্টোরেজের জন্য Compaction কৌশলগুলি ব্যবহার করে। Compaction হলো একটি প্রক্রিয়া যা একাধিক SSTable ফাইলকে মিনি বা একত্রিত করে, যাতে ডিস্ক স্পেস অপ্টিমাইজ হয় এবং ডেটার অ্যাক্সেস গতি বৃদ্ধি পায়। Cassandra তে ডেটা সঞ্চয়ের জন্য তিনটি মূল Compaction Strategies ব্যবহার করা হয়: Size-Tiered Compaction, Leveled Compaction, এবং Time-Window Compaction। প্রতিটি কৌশল একটি নির্দিষ্ট ধরনের ডেটা ব্যবহার এবং কার্যকারিতার জন্য উপযুক্ত।

1. Size-Tiered Compaction (STCS)


Size-Tiered Compaction (STCS) হল Cassandra-র একটি ডিফল্ট কম্প্যাকশন কৌশল, যা ছোট ছোট SSTable ফাইলগুলিকে একত্রিত করে একটি বৃহত্তর SSTable ফাইলে পরিণত করে। এটি সময় অনুযায়ী একাধিক ছোট ফাইলকে একত্রিত করে, যা ডিস্ক স্পেস সঞ্চয়ের পাশাপাশি পারফরম্যান্সও উন্নত করে।

Size-Tiered Compaction এর বৈশিষ্ট্য:

  • ফাইল একত্রিত করা: একাধিক ছোট SSTable ফাইলের মধ্যে ডুপ্লিকেট ডেটা বা অনুরূপ রেঞ্জের ডেটা থাকতে পারে। STCS সেই ফাইলগুলোকে একত্রিত করে একটি বৃহত্তর ফাইলে পরিণত করে।
  • নতুন SSTable ফাইল তৈরি: যখন একটি নতুন SSTable ফাইল পূর্ণ হয়, তখন Cassandra একটি নতুন কম্প্যাকশন অপারেশন শুরু করে যা বিভিন্ন ছোট SSTable ফাইলগুলিকে একত্রিত করে।
  • স্পেস সঞ্চয়: STCS ফাইল একত্রিত করার মাধ্যমে ডিস্ক স্পেস সঞ্চিত হয় এবং ডেটা আরও সুশৃঙ্খলভাবে সংরক্ষিত হয়।

Size-Tiered Compaction এর সুবিধা:

  • স্পেস অপ্টিমাইজেশন: সঠিকভাবে SSTable ফাইল একত্রিত করার ফলে ডিস্ক স্পেস অপ্টিমাইজ হয়।
  • কম্প্যাকশন সুবিধা: ছোট ছোট SSTable ফাইলগুলি কম্প্যাক্ট করতে STCS কার্যকরী হয়, যা সিস্টেমের সঞ্চয় এবং অ্যাক্সেসের গতির উন্নতি ঘটায়।

Size-Tiered Compaction এর সীমাবদ্ধতা:

  • মেমরি ইস্যু: অনেক বড় SSTable ফাইল একত্রিত করার ফলে মেমরির চাপ বাড়তে পারে, বিশেষত যদি SSTable গুলি অত্যন্ত বড় হয়।
  • কম্প্যাকশন সময়: STCS অনেক বেশি সময় নেয় এবং সিস্টেমের পারফরম্যান্সে কিছুটা কমি আসতে পারে যখন বড় SSTable ফাইল একত্রিত করা হয়।

STCS উদাহরণ:

compaction_strategy: SizeTieredCompactionStrategy

2. Leveled Compaction (LCS)


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

Leveled Compaction এর বৈশিষ্ট্য:

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

Leveled Compaction এর সুবিধা:

  • ডেটার সুশৃঙ্খলতা: LCS ডেটাকে সুশৃঙ্খলভাবে লেভেলে সাজিয়ে রাখে, ফলে রিড অপারেশন দ্রুত হয়।
  • ডুপ্লিকেট ডেটার অনুপস্থিতি: SSTable ফাইলগুলির একত্রিত করার মাধ্যমে ডুপ্লিকেট ডেটা ফিল্টার করা হয়, যা ডেটার সমন্বয় বৃদ্ধি করে।

Leveled Compaction এর সীমাবদ্ধতা:

  • ডিস্ক স্পেস ব্যবহার: LCS কম্প্যাকশন প্রক্রিয়ার সময় অতিরিক্ত ডিস্ক স্পেস ব্যবহার হয়, কারণ প্রতিটি লেভেল দ্রুত এবং কার্যকরভাবে পূর্ণ হতে থাকে।
  • পারফরম্যান্স খরচ: LCS কম্প্যাকশন দীর্ঘ সময় নিলেও, এতে পারফরম্যান্সের উপকারিতাও রয়েছে, তবে বড় SSTable ফাইলগুলির কারণে পারফরম্যান্স হ্রাস হতে পারে।

LCS উদাহরণ:

compaction_strategy: LeveledCompactionStrategy

3. Time-Window Compaction (TWCS)


Time-Window Compaction (TWCS) হল একটি কম্প্যাকশন কৌশল যা টাইম-সিরিজ ডেটার জন্য উপযুক্ত। এই কৌশলটি নির্দিষ্ট সময়ের মধ্যে ডেটাকে একত্রিত করে এবং তার পরে সেই ডেটা কম্প্যাক্ট করে। TWCS সাধারণত লগ বা টাইম-সিরিজ ডেটা ম্যানেজমেন্টে ব্যবহৃত হয়।

Time-Window Compaction এর বৈশিষ্ট্য:

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

Time-Window Compaction এর সুবিধা:

  • টাইম সিরিজ ডেটা: এটি টাইম সিরিজ ডেটার জন্য উপযুক্ত, যেখানে ডেটা সময়ের ভিত্তিতে সংরক্ষণ করা হয়।
  • ডেটার কার্যকরী কম্প্যাকশন: এটি সময়ের ভিত্তিতে কম্প্যাকশন পরিচালনা করে, ফলে বেশি উপকারী হয় এবং ডিস্ক স্পেস সাশ্রয়ী হয়।

Time-Window Compaction এর সীমাবদ্ধতা:

  • এডভান্সড কনফিগারেশন: TWCS এর কনফিগারেশন কিছুটা জটিল হতে পারে, এবং এটি শুধুমাত্র টাইম-সিরিজ ডেটার জন্য উপযুক্ত।
  • টাইম উইন্ডো ম্যানেজমেন্ট: সময় উইন্ডো গুলির মধ্যে কার্যকরী ডেটা একত্রিত করা না হলে, এটি ভুলভাবে কম্প্যাকশন করতে পারে।

TWCS উদাহরণ:

compaction_strategy: TimeWindowCompactionStrategy

সারাংশ


Cassandra তে Compaction Strategies ডেটার কার্যকরী স্টোরেজ এবং অ্যাক্সেস নিশ্চিত করতে গুরুত্বপূর্ণ। প্রতিটি কম্প্যাকশন কৌশল ডেটার ভিন্ন ধরনের প্রক্রিয়াকরণ ও সঞ্চয়ের জন্য উপযুক্ত:

  • Size-Tiered Compaction (STCS): ছোট SSTable ফাইলগুলিকে একত্রিত করে।
  • Leveled Compaction (LCS): ডেটাকে নির্দিষ্ট লেভেলে সাজিয়ে রাখে এবং পারফরম্যান্সে সহায়ক।
  • Time-Window Compaction (TWCS): টাইম-সিরিজ ডেটা কম্প্যাক্ট করতে উপযোগী।

প্রতিটি কৌশল সিস্টেমের পারফরম্যান্স, ডিস্ক স্পেস এবং ডেটার অ্যাক্সেস গতি নিশ্চিত করার জন্য উপযুক্ত, এবং এটি নির্ভর করে আপনার ব্যবহার এবং ডেটার প্রকৃতির উপর।

Content added By

Apache Cassandra একটি ডিস্ট্রিবিউটেড NoSQL ডেটাবেস সিস্টেম, যা উচ্চ স্কেলেবিলিটি এবং পারফরম্যান্সের জন্য ডিজাইন করা হয়েছে। Cassandra তে Data Deletion এবং Tombstones দুইটি গুরুত্বপূর্ণ কনসেপ্ট রয়েছে, যেগুলো ডেটার মুছতে এবং ডেটার অবস্থা নিয়ন্ত্রণ করতে সহায়তা করে। এই দুটি প্রক্রিয়া ডিস্ট্রিবিউটেড সিস্টেমে ডেটার নির্ভরযোগ্যতা, স্থায়িত্ব এবং অ্যাভেইলেবিলিটি নিশ্চিত করতে সাহায্য করে।

1. Tombstones: ডেটা মুছার সূচক


Tombstones হলো বিশেষ একটি নির্দেশক যা Cassandra তে ডেটা মুছার (delete) প্রক্রিয়াকে চিহ্নিত করে। Cassandra তে ডেটা সরাসরি ডিলিট করা হয় না। বরং, Tombstones ব্যবহৃত হয় ডেটার "মুছে ফেলা হয়েছে" এমন নির্দেশনা দেয়ার জন্য। যখন কোনো ডেটা ডিলিট করা হয়, Cassandra ডেটাকে সম্পূর্ণরূপে ডিস্ক থেকে মুছে ফেলে না, বরং একটি Tombstone তৈরি করে, যা ডেটার উপস্থিতি দেখানোর পরিবর্তে ডিলেটেড (moved) অবস্থাকে নির্দেশ করে।

Tombstones এর কাজ:

  • ডেটা মুছার নির্দেশ: Tombstone একটি বিশেষ ধরনের কলাম, যা সিস্টেমে জানান দেয় যে একটি নির্দিষ্ট রো বা কলাম ডিলিট করা হয়েছে।
  • ডিস্ট্রিবিউটেড সিস্টেমে ডেটা মুছা: Cassandra এর ডিস্ট্রিবিউটেড আর্কিটেকচারের কারণে Tombstones ব্যবহার করা হয়, যাতে ডেটার মুছে ফেলা নির্দেশ ক্লাস্টারের প্রতিটি নোডে সঠিকভাবে ছড়িয়ে যেতে পারে।
  • গ্যারবেজ কালেকশন (Garbage Collection): Tombstones ডেটা মুছে ফেলা বা রিপ্লিকেটেড ডেটা পরিষ্কার করার জন্য একটি সিস্টেমের অংশ হিসেবে কাজ করে। এই প্রক্রিয়ায় সিস্টেম একটি সময় পর Tombstone-কে সম্পূর্ণরূপে মুছে ফেলে।

Tombstone এর উদাহরণ:

DELETE FROM users WHERE user_id = 1234;

এটি user_id 1234 এর রেকর্ড ডিলিট করবে, এবং Cassandra Tombstone তৈরি করবে যা অন্যান্য নোডে জানাবে যে এটি ডিলিট করা হয়েছে।


2. Data Deletion in Cassandra


Cassandra তে ডেটা মুছে ফেলা হলে সরাসরি ডেটা ডিস্ক থেকে মুছে যায় না। বরং, Tombstone তৈরি করা হয়, যা জানিয়ে দেয় যে ডেটা মুছে ফেলতে হবে। Cassandra তে ডেটা ডিলিট করার প্রক্রিয়াটি log-based এবং eventually consistent। এই পদ্ধতি ডিস্ট্রিবিউটেড সিস্টেমে ডেটার সিঙ্ক্রোনাইজেশন নিশ্চিত করতে সহায়তা করে।

Data Deletion এর প্রক্রিয়া:

  1. Delete Operation: যখন DELETE কমান্ড চলানো হয়, Cassandra Tombstone তৈরি করে এবং এটি নোডে সঞ্চিত ডেটার পরিবর্তে একটি tombstone value রাখে।
  2. Propagation to other nodes: Tombstone-এর তথ্য ক্লাস্টারের অন্যান্য নোডে প্রপাগেটেড হয়, যাতে তারা জানে যে ঐ রেকর্ডটি ডিলিট করা হয়েছে।
  3. Compaction Process: Cassandra এর Compaction প্রক্রিয়া Tombstones গুলি ক্লিন আপ করতে সহায়তা করে। যখন Compaction চলে, তখন Tombstone গুলি থেকে আসল ডেটা মুছে ফেলা হয়।

Data Deletion Example:

DELETE FROM users WHERE user_id = 1234;

এটি users টেবিল থেকে user_id = 1234 এর ডেটা ডিলিট করবে এবং Tombstone তৈরি করবে। Tombstone এর মাধ্যমে সিস্টেম বুঝতে পারবে যে এই রেকর্ডটি ডিলিট হয়েছে এবং পরবর্তীতে এটি পরিষ্কার করা হবে।


3. Tombstones এর সুবিধা এবং চ্যালেঞ্জ


Tombstones এর সুবিধা:

  1. Fault Tolerance: Tombstones ডেটা মুছার নির্দেশ ক্লাস্টারের সব নোডে ছড়িয়ে দিতে সহায়তা করে, এটি ডিস্ট্রিবিউটেড সিস্টেমের মধ্যে ডেটার সিঙ্ক্রোনাইজেশন নিশ্চিত করে।
  2. Eventual Consistency: Cassandra তে Tombstones ব্যবহৃত হয় যাতে ডেটার সিস্টেমের মধ্যে মুছে ফেলা তথ্য সঠিকভাবে পৌঁছে যায়, কিন্তু সময়ের সাথে সাথে এটি eventually consistent হয়।
  3. Efficient Write Path: Tombstone ব্যবহার করা হলে সরাসরি ডেটা মুছে ফেলার পরিবর্তে একটি লেখা অপারেশন পরিচালিত হয়, যা লেখার গতিকে দ্রুত করে।

Tombstones এর চ্যালেঞ্জ:

  1. Compaction Overhead: Tombstones কিছু সময় পর compaction প্রক্রিয়ায় সিস্টেমে লোড সৃষ্টি করতে পারে, কারণ Tombstones-কে পরবর্তীতে মুছে ফেলা হয়।
  2. Performance Impact: Tombstones যদি দীর্ঘ সময় ধরে থাকে, তবে এটি ডেটার পড়া (read) অপারেশনের পারফরম্যান্সকে প্রভাবিত করতে পারে, কারণ Cassandra Tombstone গুলো নিয়ে কাজ করতে হয়।
  3. Storage Overhead: Tombstone এর কারণে সিস্টেমে অতিরিক্ত স্টোরেজ ব্যবহৃত হতে পারে, কারণ এটি ডেটার পরিবর্তে একটি extra marker তৈরি করে।

4. Compaction এবং Tombstones


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

Compaction এবং Tombstones:

  • Regular Compaction: Cassandra কম্প্যাকশন প্রক্রিয়ার মাধ্যমে Tombstones গুলো মুছে ফেলে, যা ডেটার স্টোরেজের জায়গা কমায় এবং সিস্টেমের পারফরম্যান্স বৃদ্ধি করে।
  • Anti-Entropy: Cassandra সিস্টেমে anti-entropy মেকানিজম থাকে, যা নিশ্চিত করে যে Tombstones সঠিকভাবে ক্লাস্টারের সব নোডে ছড়িয়ে যাচ্ছে এবং একে অপরের মধ্যে সিঙ্ক্রোনাইজড হচ্ছে।

5. Tombstones এবং Data Deletion এর প্রভাব


  1. Read Performance: Tombstones দীর্ঘসময় ধরে থাকার কারণে, Cassandra এর পড়ার (read) পারফরম্যান্স কমতে পারে। Tombstone এর কারণে সিস্টেমে অতিরিক্ত সঞ্চিত তথ্য থেকে রিড অপারেশন পরিচালনা হয়।
  2. Garbage Collection: Tombstone এর মাধ্যমে, Cassandra নিশ্চিত করে যে পুরনো ডেটা সিস্টেম থেকে সঠিক সময়ে মুছে ফেলা হচ্ছে। তবে এটি অনেক Tombstones থাকতে পারলে স্টোরেজ সমস্যাও সৃষ্টি করতে পারে।
  3. Replication Impact: Tombstones ক্লাস্টারের অন্যান্য নোডে প্রপাগেট হতে হয়, যাতে তারা জানে যে নির্দিষ্ট রেকর্ডটি মুছে ফেলা হয়েছে, যা ডিস্ট্রিবিউটেড সিস্টেমে সময় নিতে পারে।

সারাংশ


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

Content added By

Apache Cassandra একটি উচ্চ পারফরম্যান্স, স্কেলেবল, এবং ডিস্ট্রিবিউটেড NoSQL ডেটাবেস সিস্টেম, যা বৃহৎ পরিমাণ ডেটা দ্রুত এবং কার্যকরভাবে প্রক্রিয়া করতে সক্ষম। তবে, Cassandra তে ডেটা ম্যানেজমেন্ট এবং স্টোরেজ পরিচালনার ক্ষেত্রে কিছু গুরুত্বপূর্ণ দিক রয়েছে, যেমন Garbage Collection এবং Data Cleanup, যা ডেটাবেসের স্বাস্থ্য এবং পারফরম্যান্স বজায় রাখতে সহায়তা করে।

1. Garbage Collection (গারবেজ কালেকশন)


Garbage Collection হলো একটি প্রক্রিয়া যা ডেটাবেসের অপ্রয়োজনীয় ডেটা বা অবশিষ্ট ডেটা (বৃদ্ধ ডেটা) মুছে ফেলতে ব্যবহৃত হয়, যাতে স্টোরেজ স্পেসের অপচয় না হয়। Cassandra তে, গারবেজ কালেকশন সাধারণত Tombstones এবং SSTables এর মাধ্যমে কার্যকরী হয়।

Cassandra তে Garbage Collection এর কাজ:

  • Tombstone Marking: Cassandra তে যখন কোনো রেকর্ড মুছে ফেলা হয়, তখন সেটি Tombstone মার্কিং করে মুছে ফেলা হয়। Tombstone হলো একটি বিশেষ সিগন্যাল যা ডেটাকে মুছে ফেলার ইঙ্গিত দেয়। তবে, এই Tombstone গুলি কিছু সময়ের জন্য ডেটাবেসে রয়ে যায় এবং পরে গারবেজ কালেকশনের মাধ্যমে এটি ক্লিয়ার করা হয়।
  • Compaction: Tombstone গুলি অবশেষে compaction প্রক্রিয়ার মাধ্যমে সরিয়ে ফেলা হয়। Cassandra তে SSTables এ ডেটা সংরক্ষিত থাকে, এবং গারবেজ কালেকশন শেষে সেগুলি থেকে Tombstone গুলি মুছে ফেলা হয়।
  • Memory Management: Cassandra এর মধ্যে গারবেজ কালেকশন অনেক সময় JVM garbage collection এর সাথে সংযুক্ত থাকে। যখন অপ্রয়োজনীয় অবজেক্টগুলি মেমোরিতে জমা হয়, JVM এটি মুছে ফেলে, যার মাধ্যমে ডেটাবেসের কর্মক্ষমতা এবং মেমরি ব্যবস্থাপনা নিশ্চিত হয়।

Garbage Collection এর সমস্যা:

  • Latency Issue: গারবেজ কালেকশন যখন ঘটে, এটি কিছু সময়ের জন্য সিস্টেমের পারফরম্যান্স কমাতে পারে। অতিরিক্ত Tombstone ডেটা এবং SSTable গুলোর কারণে এটি বেশি সময় নিতে পারে, এবং সিস্টেমের লেটেন্সি বৃদ্ধি পায়।
  • Disk Usage: দীর্ঘ সময় ধরে Tombstones রয়ে গেলে, ডেটাবেসের ডিস্ক স্পেস কমে যেতে পারে এবং মেমরি ব্যবহারে সমস্যা সৃষ্টি হতে পারে।

2. Data Cleanup (ডেটা ক্লিনআপ)


Data Cleanup হলো এমন একটি প্রক্রিয়া যা Cassandra ডেটাবেসের মধ্যে অপ্রয়োজনীয় বা পুরনো ডেটা মুছে ফেলার জন্য ব্যবহৃত হয়। ডেটা ক্লিনআপ সাধারণত Tombstone গুলি মুছে ফেলা এবং ডেটাবেসের মধ্যে অবশিষ্ট ডেটাকে সঠিকভাবে ম্যানেজ করা হয়।

Data Cleanup এর কাজ:

  • Compaction Process: Compaction হল সেই প্রক্রিয়া যার মাধ্যমে Cassandra পুরনো এবং অপ্রয়োজনীয় ডেটা সরিয়ে ফেলে এবং নতুন ডেটাকে পুনরায় সংগঠিত করে। এটি Tombstone গুলিকে ক্লিয়ার করে এবং SSTables সিঙ্ক্রোনাইজ করে।
  • Reclaiming Space: Data Cleanup শেষে সিস্টেম পুনরায় ডিস্ক স্পেস পুনরুদ্ধার করে, কারণ অব্যবহৃত বা পুরনো ডেটা মুছে ফেলা হয়। এটি সিস্টেমের পারফরম্যান্স এবং স্টোরেজ ব্যবস্থাপনা উন্নত করতে সাহায্য করে।
  • Manual Cleanup: Cassandra তে মাঝে মাঝে nodetool cleanup কমান্ড ব্যবহার করে ম্যানুয়ালি ডেটা ক্লিনআপ করা যায়। এটি শুধু নির্দিষ্ট নোডে ডেটা ক্লিন আপ করে।

Data Cleanup এর প্রয়োজনীয়তা:

  • ডেটা সিঙ্ক্রোনাইজেশন: ডেটা ক্লিনআপ নিশ্চিত করে যে সমস্ত ডেটা সঠিকভাবে সিঙ্ক্রোনাইজড এবং সদৃশ রয়েছে।
  • ডিস্ক স্পেস পুনরুদ্ধার: Cassandra ডেটাবেসে যখন Tombstone গুলি মুছে ফেলা হয়, তখন ডিস্ক স্পেস পুনরুদ্ধার হয় এবং সিস্টেম আরও কার্যকরীভাবে কাজ করতে পারে।

Manual Cleanup Example:

nodetool cleanup

এই কমান্ডটি নির্দিষ্ট নোডের মধ্যে অব্যবহৃত ডেটা মুছে ফেলবে এবং সিস্টেমের পারফরম্যান্স উন্নত করবে।


3. Tombstones এবং Compaction


Tombstones এবং Compaction দুটি গুরুত্বপূর্ণ দিক যা Cassandra তে গারবেজ কালেকশন এবং ডেটা ক্লিনআপ প্রক্রিয়ায় কাজ করে।

Tombstones:

  • Tombstone হলো একটি বিশেষ মার্ক যা ডেটা মুছে ফেলার জন্য ব্যবহার হয়। যখন কোনো ডেটা মুছে ফেলা হয়, Cassandra সেটিকে Tombstone দিয়ে চিহ্নিত করে। Tombstone ডেটা পরে compaction এর মাধ্যমে মুছে ফেলা হয়।

Compaction:

  • Compaction Cassandra তে ডেটা ক্লিনআপের মূল প্রক্রিয়া। এটি পুরনো SSTables সংযুক্ত করে নতুন একটি SSTable তৈরি করে এবং Tombstone গুলি সরিয়ে ফেলে।
  • Cassandra তে কয়েকটি ধরণের Compaction রয়েছে, যেমন:
    • Leveled Compaction: কম ডেটার জন্য ব্যবহৃত হয়।
    • Size-Tiered Compaction: বড় ডেটার জন্য ব্যবহৃত হয়।

4. Garbage Collection এবং Data Cleanup এর পার্থক্য


বৈশিষ্ট্যGarbage CollectionData Cleanup
কাজঅপ্রয়োজনীয় ডেটা বা অবশিষ্ট ডেটা মুছে ফেলা।পুরনো ডেটা এবং Tombstone গুলি মুছে ফেলা।
কার্যকারিতাডেটা স্টোরেজ এবং মেমরি ব্যবস্থাপনার জন্য ব্যবহৃত।ডেটা পুনরুদ্ধার এবং ডিস্ক স্পেস ব্যবস্থাপনা।
প্রক্রিয়াTombstone সৃষ্টির পর, অবশিষ্ট ডেটা মুছে ফেলা।Compaction এর মাধ্যমে ডেটা সিঙ্ক্রোনাইজ এবং ক্লিন করা।
টুলসJVM Garbage Collection, Tombstone Marking।nodetool cleanup, Compaction।

সারাংশ


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

Content added By
Promotion

Are you sure to start over?

Loading...