সেলসফোর্স এপেক্স - গভর্নর লিমিটস

Selasaphorsa Epeksa Gabharnara Limitasa



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

গভর্নর সীমা

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







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



অনুমোদিত সীমা

আসুন বিভিন্ন পরিস্থিতিতে সীমা গণনা নিয়ে আলোচনা করি:



  1. সিঙ্ক্রোনাস অ্যাপেক্সে 100টি SOQL প্রশ্ন এবং অ্যাসিঙ্ক্রোনাস অ্যাপেক্সে 200টি SOQL প্রশ্ন প্রক্রিয়া/চালনা করা সম্ভব হতে পারে।
  2. সিঙ্ক্রোনাস এবং অ্যাসিঙ্ক্রোনাস শীর্ষ উভয়ের জন্য একটি SOQL কোয়েরি থেকে শুধুমাত্র 50,000 রেকর্ড ফিরে আসবে।
  3. যদি আমরা Database.getQueryLocator() ব্যবহার করি, তবে সিঙ্ক্রোনাস এবং অ্যাসিঙ্ক্রোনাস অ্যাপেক্স উভয়ের জন্যই একবারে মাত্র 10,000টি ফেরত দেওয়া হয়।
  4. উভয় পরিস্থিতিতে, জারি করা SOSL প্রশ্নের সংখ্যা 20।
  5. সিঙ্ক্রোনাস অ্যাপেক্স প্রক্রিয়া করার জন্য যে হিপের আকার প্রয়োজন তা হল 6 এমবি। অ্যাসিঙ্ক্রোনাস অ্যাপেক্সের জন্য, হিপের আকার দ্বিগুণ যা এটিকে 12 MB করে।
  6. সিঙ্ক্রোনাস অ্যাপেক্সের জন্য সর্বাধিক সিপিইউ সময় 10,000 মিলিসেকেন্ড এবং অ্যাসিঙ্ক্রোনাস অ্যাপেক্সের জন্য 60,000 মিলিসেকেন্ড।
  7. এপেক্স উভয়ের জন্যই মাত্র 10 মিনিট সময় দেওয়া হয়।
  8. উভয় ক্ষেত্রেই, আমরা 100 জন প্রাপকের সাথে শুধুমাত্র 10টি sendEmail() পদ্ধতি ব্যবহার করতে পারি।
  9. অ্যাপেক্স ক্লাসে বা অ্যাপেক্স ট্রিগারে থাকা অক্ষরগুলি অবশ্যই 1 মিলিয়নের মধ্যে থাকতে হবে।
  10. ব্যাচ এপেক্সে (অ্যাসিঙ্ক্রোনাস), আকার হল 200৷ 'ডেটাবেস' ক্লাসের QueryLocator() প্রতি লেনদেনে 50 মিলিয়ন রেকর্ড ফেরত দেয়৷
  11. শুধুমাত্র 5টি Apex কাজ সারিবদ্ধ বা সক্রিয় থাকবে।

LIMIT ক্লাসের উদাহরণ:

Apex “LIMIT” ক্লাসে গভর্নরের সীমা নির্দিষ্ট করতে পারে। এই শ্রেণীটি এমন কিছু পদ্ধতি প্রদান করে যা গভর্নরের সীমা সম্পর্কে বলে। আসুন নিম্নলিখিত উদাহরণটি দেখি যা কিছু গভর্নরের সীমা প্রদর্শন করে:





System.debug('সমষ্টিগত প্রশ্নের সংখ্যা প্রক্রিয়া করা যেতে পারে: '+ Limits.getLimitAggregateQueries());

System.debug('ওয়েব সার্ভিস স্টেটমেন্টের সংখ্যা প্রক্রিয়া করা যেতে পারে: '+ Limits.getLimitCallouts());

System.debug('রেকর্ডের সংখ্যা প্রসেস করা যেতে পারে:'+ Limits.getLimitDmlRows());

System.debug('DML স্টেটমেন্টের সংখ্যা বলা যেতে পারে: '+ Limits.getLimitDmlStatements());

System.debug('বাইটে মেমরির মোট পরিমাণ: '+ Limits.getLimitHeapSize());

System.debug('SOQL প্রশ্নের সংখ্যা জারি করা যেতে পারে: '+ Limits.getLimitQueries());

System.debug('রেকর্ডের সংখ্যা জারি করা যেতে পারে:'+ Limits.getLimitQueryRows());

System.debug('SOSL প্রশ্নের সংখ্যা জারি করা যেতে পারে:  '+ Limits.getLimitSoslQueries());

আউটপুট:

'সীমা' ক্লাসে উপস্থিত 'গম্বুজ' পদ্ধতিগুলি ব্যবহার করে কতগুলি DML বিবৃতি/সারি ফেরত দেওয়া যেতে পারে তা পরীক্ষা করাও সম্ভব।



  1. Limits.getDMLSstatements() একটি দৃষ্টান্তে ব্যবহৃত মোট DML বিবৃতি প্রদান করে।
  2. Limits.getDMLRows() DML বিবৃতি দ্বারা প্রত্যাবর্তিত সারিগুলির মোট সংখ্যা প্রদান করে।
  3. Limits.getCpuTime() মিলিসেকেন্ডে বর্তমান লেনদেনের জন্য CPU ব্যবহৃত সময় ফেরত দেয়।

ব্যবহারের উদাহরণ:

আসুন একটি SOQL ক্যোয়ারী লিখি যা 'WorkOrder' অবজেক্ট থেকে দুটি রেকর্ড ফেরত দেয়। এর পরে, 'ডিলিট' ডিএমএল ব্যবহার করে এই দুটি রেকর্ড মুছুন।

System.debug('DML স্টেটমেন্ট:'+Limits.getDMLSstatements());

System.debug('সারি: '+Limits.getDmlRows());

System.debug('CPU Time'+Limits.getCpuTime());

// WorkOrder অবজেক্ট থেকে 2 টি সারি নির্বাচন করতে SOQL কোয়েরি

তালিকা অ্যাকাউন্টগুলি = [ওয়ার্কঅর্ডার সীমা 2 থেকে আইডি নির্বাচন করুন];

// দুটি সারি মুছে ফেলতে ডিলিট ডিএমএল ব্যবহার করুন

অ্যাকাউন্ট মুছে ফেলুন;

System.debug('**After SOQL:**');

System.debug('DML স্টেটমেন্ট:'+Limits.getDMLSstatements());

System.debug('সারি: '+Limits.getDmlRows());

System.debug('CPU Time'+Limits.getCpuTime());

আউটপুট:

প্রদত্ত উদাহরণে, কোন DML বিবৃতি এবং 0 সারি নেই। বিদ্যমান CPU সময় হল 1 মিলিসেকেন্ড। SOQL কোয়েরি থেকে 2টি সারি ফেরত দেওয়ার পরে এবং এই দুটি সারি মুছে ফেলার পরে, Limits.getDMLSstatements() দ্বারা প্রত্যাবর্তিত DML স্টেটমেন্টের মোট সংখ্যা হল 1, Limits.getDMLRows()  দ্বারা প্রত্যাবর্তিত মোট সারি হল 2, এবং CPU এই লেনদেন চালানোর জন্য যে সময় প্রয়োজন তা হল 51 মিলিসেকেন্ড।

সর্বোত্তম অনুশীলনের উদাহরণ:  'কখনও লুপের ভিতরে DML ব্যবহার করবেন না'

আসুন দেখি কিভাবে আমরা গভর্নর সীমা না পেয়ে কোড চালাতে পারি। আমরা প্রথমে 'ফর' লুপের মধ্যেই 'প্রোডাক্টের নাম' এর সাথে 'ওয়ার্কঅর্ডার' বিষয়বস্তু বরাদ্দ করে  'ওয়ার্কঅর্ডার' অবজেক্ট থেকে 'প্রোডাক্ট' অবজেক্টে (এপিআই – প্রোডাক্ট2) একটি রেকর্ড তৈরি করি। আসুন নিম্নলিখিত কোড দেখুন:

পণ্য2 prod_obj;

এর জন্য (WorkOrder wo_object : [ওয়ার্কঅর্ডার থেকে বিষয় নির্বাচন করুন])

{

prod_obj = new Product2(নাম = wo_object.Subject);

prod_obj সন্নিবেশ করান;

}

আমরা একটি তালিকা (prod_s) ঘোষণা করে এবং তারপর তালিকায় prod_obj সংরক্ষণ করে এটি আরও ভালভাবে করতে পারি। আমরা লুপের বাইরে পণ্যের মধ্যে এই তালিকাটি সন্নিবেশ করতে পারি।

তালিকা prod_s = নতুন তালিকা();

পণ্য2 prod_obj;

এর জন্য (WorkOrder wo_object : [ওয়ার্কঅর্ডার থেকে বিষয় নির্বাচন করুন])

{

prod_obj = new Product2(নাম = wo_object.Subject);

prod_s.add(prod_obj);

}

prod_obj সন্নিবেশ করান;

উপসংহার

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