আচরণগত পার্থক্য

এই পৃষ্ঠায় Cloud Firestore ও MongoDB-এর মধ্যে আচরণগত পার্থক্য বর্ণনা করা হয়েছে।

MongoDB ভার্সনের উপর নির্ভর করে কাজ করে এমন ফিচারের ব্রেকডাউন দেখতে, এখানে যান:

কানেকশন ও ডেটাবেস

  • প্রতিটি কানেকশন একটিমাত্র Cloud Firestore ডেটাবেসে সীমাবদ্ধ।
  • কানেক্ট করার আগে ডেটাবেস তৈরি করতে হবে।

নামকরণ

আপনার ডেটা মডেলের বিভিন্ন অংশের নামকরণের ক্ষেত্রে নিম্নলিখিত পার্থক্যগুলি প্রযোজ্য।

সংগ্রহ

  • __.*__-এর সাথে ম্যাচ করা কালেকশনের নাম কাজ করে না।

ফিল্ড

  • __.*__-এর সাথে ম্যাচ করা ফিল্ডের নাম কাজ করে না।
  • খালি ফিল্ডের নাম কাজ করে না।

ডকুমেন্ট

  • ডকুমেন্টের সর্বাধিক সাইজ হল ১৬ MiB।
  • ফিল্ডের সর্বাধিক নেস্টিং ডেপ্থ হল ২০। প্রতিটি অ্যারে এবং অবজেক্ট-টাইপ করা ফিল্ড সামগ্রিক গভীরতায় একটি লেভেল যোগ করে।
  • Eventarcটি ইভেন্টে, ১০ MiB-এর থেকে বড় ডকুমেন্ট ইভেন্ট পেলোডে অন্তর্ভুক্ত করা হয় না।

_id ফিল্ড

  • টপ-লেভেল _id ফিল্ডটি অবশ্যই ObjectId, স্ট্রিং, ৬৪-বিট পূর্ণসংখ্যা, ৩২-বিট পূর্ণসংখ্যা, ডবল, বাইনারি বা অবজেক্ট হতে হবে। অন্যান্য BSON টাইপ কাজ করে না।

ভ্যালু

  • জাভাস্ক্রিপ্ট, সিম্বল, DBPointer এবং Undefined BSON টাইপ কাজ করে না।

তারিখ

  • তারিখের ভ্যালু অবশ্যই [0001-01-01T00:00:00Z, 9999-12-31T23:59:59Z]-এর মধ্যে হতে হবে।

Decimal128

  • NaN, পজিটিভ ইনফিনিটি এবং নেগেটিভ ইনফিনিটি ভ্যালু লেখার সময় ক্যানোনিক্যালাইজ করা হয়।
  • Decimal128-এ পাটিগণিত সংক্রান্ত অপারেশন কাজ করে না।

দুইটি

  • NaN ভ্যালু লেখার সময় ক্যানোনিক্যালাইজ করা হয়।

রেগুলার এক্সপ্রেশন

  • রেগুলার এক্সপ্রেশন বিকল্প অবশ্যই সঠিক ("i", "m", "s", "u" বা "x") এবং বর্ণানুক্রমিকভাবে পুনরাবৃত্তি না করে প্রদান করতে হবে।

কোয়েরি

  • ন্যাচারাল সর্ট অর্ডার (স্পষ্ট সর্ট ছাড়া কোয়েরি) ইনসার্শন অর্ডার বা _id-এর ঊর্ধ্বক্রম অনুসারে সাজানোর সাথে মেলে না।

এগ্রিগেশন

  • অ্যাগ্রিগেশন ২৫০টি স্টেজের মধ্যে সীমিত।
  • $merge এবং $out স্টেজ কাজ করে না। কাজ করে এমন স্টেজ ও অপারেটরের সম্পূর্ণ তালিকা দেখতে কমান্ড বিভাগ দেখুন।
  • $facet স্টেজে ইনপুট স্টেজ হিসেবে $rand বা $sample কাজ করে না কারণ এটি একটি পরিবর্তনশীল এক্সপ্রেশন।

লেখেন

  • ডলার চিহ্ন ("$") দিয়ে শুরু হওয়া নামের ডকুমেন্ট update বা findAndModify-এর আপসার্ট ফিচার ব্যবহার করে তৈরি করা যাবে না।
  • আপনার কানেকশন স্ট্রিংয়ে retryWrites=false (অথবা আপনার ড্রাইভারের জন্য উপযুক্ত পদ্ধতি ব্যবহার করুন) অন্তর্ভুক্ত আছে কিনা তা নিশ্চিত করুন যাতে ড্রাইভার এই ফিচারটি ব্যবহার করার চেষ্টা না করে। আবার চেষ্টা করা যায় এমন রাইট কাজ করে না।

ট্রানজ্যাকশন

  • স্ন্যাপশট আইসোলেশন ও সিরিয়ালাইজেবল ট্রানজ্যাকশন কাজ করে।

  • ডিফল্ট হিসেবে, ট্রানজ্যাকশন স্ন্যাপশট আইসোলেশনের সাথে অপ্টিমিস্টিক কনকারেন্সি কন্ট্রোল ব্যবহার করে।

উদ্বেগ সংক্রান্ত ডেটা দেখার অনুমতি দিন

  • Cloud Firestore, snapshot , majority, এবং linearizable পড়ার ব্যাপারে উদ্বেগ সমর্থন করে। ডিফল্ট হল snapshot যা স্ন্যাপশট আইসোলেশনকে বোঝায়।

    অ্যাপ্লিকেশনের জন্য কঠোর ধারাবাহিকতা প্রয়োজন হলে এবং রাইট স্কিউ অ্যানোমালি প্রতিরোধ করতে হলে linearizable ব্যবহার করুন। অন্যান্য ওয়ার্কলোডের জন্য, snapshot পারফর্ম্যান্স উন্নত করতে এবং ট্রানজ্যাকশন সংক্রান্ত সমস্যা কমাতে পারে।

উদ্বেগ সংক্রান্ত ডেটা লেখে

  • শুধুমাত্র w: 'majority' এবং w: 1 রাইট কনসার্ন কাজ করে।

পড়ার পছন্দ

  • শুধুমাত্র primary, primaryPreferred, primary_preferred, secondary_preferred এবং nearest রিড কনসার্ন কাজ করে।

ইন্ডেক্স

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

সমস্যা

  • Cloud Firestore এবং MongoDB-এর মধ্যে ত্রুটি কোড এবং মেসেজ আলাদা হতে পারে।

কমান্ড

নির্দিষ্ট কমান্ডের ক্ষেত্রে নিম্নলিখিত আচরণগত পার্থক্য প্রযোজ্য।

  • নিম্নলিখিত টেবিলে তালিকাভুক্ত নয় এমন কমান্ড কাজ করে না।
  • comment বেশিরভাগ কমান্ডে গ্রহণ করা হয় কিন্তু উপেক্ষা করা হয়।
  • maxTimeMS বেশিরভাগ কমান্ডের ক্ষেত্রে গ্রহণ করা হয়, তবে উপেক্ষা করা হতে পারে।

কোয়েরি

এবং লেখে

কমান্ড কাজ করে না এমন ফিল্ড

find

  • max
  • min
  • returnKey
  • showRecordId
  • tailable
  • oplogReplay
  • noCursorTimeout
  • awaitData
  • allowPartialResults
  • collation
  • allowDiskUsage
  • let

aggregate

  • collation
  • let

insert

(কিছু নেই)

update

আপডেট স্টেটমেন্টের মধ্যে:

  • collation

delete

মুছে ফেলার স্টেটমেন্টের মধ্যে:

  • collation

findAndModify

  • collation
  • let

count

  • collation

distinct

  • collation

getMore

  • comment

killCursors

(কিছু নেই)

explain

(কিছু নেই)

ট্রানজ্যাকশন

ও সেশন

কমান্ড কাজ করে না এমন ফিল্ড

commitTransaction

(কিছু নেই)

abortTransaction

(কিছু নেই)

endSessions

(কিছু নেই)

অ্যাডমিনিস্ট্রেশন

কমান্ড কাজ করে না এমন ফিল্ড Notes

listDatabases

  • authorizedDatabases
filter দেওয়া হলে তা খালি রাখতে হবে।

listCollections

(কিছু নেই)

প্রদান করা হলে, authorizedCollections অবশ্যই ফলস হতে হবে।

listIndexes

(কিছু নেই)

createIndexes

(কিছু নেই)

dropIndexes

(কিছু নেই)

createCollection

  • timeseries
  • expireAfterSeconds
  • clusteredIndex
  • changeStreamPreAndPostImages
  • size
  • max
  • storageEngine
  • validator
  • validationLevel
  • validationAction
  • indexOptionDefaults
  • viewOn
  • pipeline
  • collation
  • encryptedFields
এই কমান্ডটি কোনও অপারেশন নয়।

capped প্রদান করা হলে অবশ্যই মিথ্যা হতে হবে।

drop

(কিছু নেই)

ড্রপ কালেকশন সংক্রান্ত সীমাবদ্ধতা

আপনি কোনও কালেকশন ড্রপ করলে নিম্নলিখিত সীমাবদ্ধতা প্রযোজ্য হয়:

  • ইনডেক্স রিক্রিয়েশন: ড্রপ করার ঠিক পরেই আপনি একই ইনডেক্স কনফিগারেশন তৈরি করতে পারবেন না। ব্যাকগ্রাউন্ড মুছে ফেলার প্রসেস শেষ হওয়া পর্যন্ত আপনাকে অপেক্ষা করতে হবে।
  • সাইজের সীমা: বড় কালেকশন ড্রপ করলে কানেকশন টাইমআউট হতে পারে। টাইমআউট দেখতে পেলে কানেকশনের সময়সীমা বাড়ান। বিকল্প হিসেবে আপনি বাল্ক ডিলিট ব্যবহার করতে পারবেন।
  • ইভেন্ট: drop কমান্ড ব্যবহার করার সময় Eventarc-এর জন্য ড্রপ কালেকশন ইভেন্ট তৈরি করা হয় না।

এর পরে কী করতে হবে