পিডিওতে অবিচ্ছিন্ন সংযোগ ব্যবহারের অসুবিধাগুলি কী


181

পিডিওতে, একটি সংযোগটি PDO::ATTR_PERSISTENTঅ্যাট্রিবিউটটি ব্যবহার করে অবিচ্ছিন্ন করা যায় । পিএইচপি ম্যানুয়াল অনুসারে -

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

ম্যানুয়ালটিতে PDO ODBC ড্রাইভার ব্যবহার করার সময় অবিচ্ছিন্ন সংযোগ ব্যবহার না করার পরামর্শ দেওয়া হয়েছে, কারণ এটি ODBC সংযোগ পুলিংয়ের প্রক্রিয়াটিকে বাধাগ্রস্ত করতে পারে।

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


বাহ, আপনি এই সাধারণ প্রশ্নের জন্য 1000 রিপ্রেস অনুগ্রহ প্রদান করেছেন?
পেসিয়ার

উত্তর:


287

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


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

যদি ডেড স্ক্রিপ্ট লক করা টেবিলগুলি থাকে তবে সংযোগটি মারা না যাওয়া বা সংযোগ প্রাপ্ত পরবর্তী স্ক্রিপ্টটি টেবিলগুলি নিজেই তালাবদ্ধ না করা অবধি সেই টেবিলগুলি লক থাকবে।

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

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

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

তদুপরি, বেশিরভাগ আধুনিক ডাটাবেসগুলিতে (পোস্টগ্রাইএসকিউএল সহ) সংযোগ পুলিংয়ের নিজস্ব পছন্দসই পদ্ধতি রয়েছে যা প্লেইন ভ্যানিলা পিএইচপি-ভিত্তিক ধ্রুবক সংযোগগুলি করে তাৎক্ষণিক ত্রুটিগুলি নেই।


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

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

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


2
আমি আশা করি দৌড়ানোর আগে আমি এই উত্তরটি পড়েছিSELECT orders.* FROM orders LEFT JOIN items USING(item_id)
অ্যাস্ট ডেরেক

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

আমি কৌতুহলী @ চার্লস ... আপনার সমস্যাটি কি কখনও সমাধান হয়েছে?
তিশাল্লাকা

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

5
সংযোগের ক্ষেত্রে আমাদের 5 সেকেন্ড বিলম্ব হয়েছিল, যা আমরা ডিএনএস + আইপিভি 6 সমস্যা হিসাবে আলাদা করতে পেরেছি। সার্ভারটি একটি v6 ঠিকানা খুঁজছিল, ব্যর্থ হয়েছে এবং তারপরে আইপিভি 4 ঠিকানা ব্যবহার করছে।
নাইজেল অ্যাটকিনসন

45

উপরে চার্লসের সমস্যার প্রতিক্রিয়া হিসাবে,

থেকে: http://www.php.net/manual/en/mysqli.quickstart.connections.php -

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

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

mysqli_change_user()ফাংশন একটি ব্যয়বহুল অপারেশন। সেরা পারফরম্যান্সের জন্য, ব্যবহারকারীরা সংকলন পতাকা MYSQLI_NO_CHANGE_USER_ON_PCONNECTসেট হয়ে এক্সটেনশানটি পুনরায় সংযোগ করতে চাইতে পারে ।

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


+1, যদি না অন্যভাবে আমরা এই জগাখিচুড়ি পরিষ্কার করে ফেলেছি, তবে ম্যানুয়ালি চেঞ্জ_উজারকে কল করা আমাদের উদ্ভট অজানা-রাষ্ট্রীয় সমস্যাগুলি সমাধান করে কিনা তা দেখতে আমি আগ্রহী ।
চার্লস

পিডিও পোস্টগ্রিস অবিচ্ছিন্ন সংযোগগুলির জন্য সমতুল্য কী? আমার যেমন @Charles এর মত সমস্যা রয়েছে, যেখানে কিছুক্ষণ পরে ব্যবহারকারীরা আনতে হবে এসকিএল-এর মতো ত্রুটি পাবে - সার্ভারটি অপ্রত্যাশিতভাবে সংযোগটি বন্ধ করে দিয়েছে এর সম্ভবত সার্ভারটি অস্বাভাবিকরূপে বন্ধ করা হয়েছে যখন সহজ SELECT অনুসন্ধান চালানো হয় (এমনকি লেনদেনও নয়)।
কারমাজেডন

1
@ কারমাজেডন, এটি একটি নতুন প্রশ্নের পক্ষে আরও উপযুক্ত
চার্লস

@ চার্লস, এর অর্থ কী? পিডিওর অবিরাম সংযোগটি কি "বাহ্যিক সংযোগ পুল" ব্যবহারের সমতুল্য নয়? বা তোমার মানে কি?
কারমাজেডন

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

13

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

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

অবিচ্ছিন্ন সংযোগগুলি সম্পর্কে বোঝার মূল বিষয়টি হ'ল আপনার বেশিরভাগ ওয়েব অ্যাপ্লিকেশনগুলিতে এগুলি ব্যবহার করা উচিত নয়। এগুলি প্রলোভনজনক মনে হয় তবে এগুলি বিপজ্জনক এবং বেশ কার্যকর use

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

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


সংস্থান লিঙ্ক: লিঙ্ক

সাধারণভাবে আপনি এটিকে মোটামুটি "রুলসেট" হিসাবে ব্যবহার করতে পারেন ::

হ্যাঁ , অবিচ্ছিন্ন সংযোগগুলি ব্যবহার করুন, যদি:

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

  • একটি (এক) অ্যাপ্লিকেশন খুব ঘন ঘন ডাটাবেস অ্যাক্সেস করে

না , অবিচ্ছিন্ন সংযোগগুলি ব্যবহার করবেন না, যদি:

  • আপনার অ্যাপ্লিকেশনটির এক ঘন্টার মধ্যে 100 বার কেবল ডাটাবেস অ্যাক্সেস করা দরকার।

  • আপনার একাধিক ওয়েব সার্ভারের একটি ডাটাবেস সার্ভার অ্যাক্সেস রয়েছে

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

সমস্যাটি হ'ল "ডিফল্ট কনফিগারেশন" এ, মাইএসকিউএল 1000 সমান্তরাল "ওপেন চ্যানেল" কেবল মঞ্জুরি দেয়। এর পরে, নতুন সংযোগগুলি প্রত্যাখ্যান করা হয়েছে (আপনি এই সেটিংটি টুইঙ্ক করতে পারেন)। সুতরাং যদি আপনার কাছে - বলুন - তাদের উপর প্রতি 100 টি ক্লায়েন্ট সহ 20 টি ওয়েবসার এবং তাদের প্রত্যেকের প্রতি ঘন্টায় কেবল একটি পৃষ্ঠার অ্যাক্সেস রয়েছে, সহজ গণিত আপনাকে দেখায় যে আপনার ডাটাবেসের সাথে 2000 সমান্তরাল সংযোগ প্রয়োজন। যে কাজ করবে না।

এরগো: প্রচুর অনুরোধ সহ কেবল অ্যাপ্লিকেশনগুলির জন্য এটি ব্যবহার করুন।


4
লাইনের পরে আপনার উত্তরটি স্ট্যাকওভারফ্লো.com
টনি স্টার্ক

1
"হ্যাঁ, অবিচ্ছিন্ন সংযোগগুলি ব্যবহার করুন, যদি: [...] খুব কম অ্যাপ্লিকেশন / ব্যবহারকারী রয়েছে যা ডাটাবেস অ্যাক্সেস করে" "কেবল এটি প্রচুর অনুরোধের সাথে অ্যাপ্লিকেশনগুলির জন্য ব্যবহার করুন" with পরেরটি অবশ্য সঠিক। পরিস্থিতি: প্রতি সেকেন্ডে হাজার হাজার অনুরোধের ফলে শত শত সক্রিয় ডাটাবেস সংযোগ হবে। যখন কোনও সিস্টেম রৈখিকভাবে স্কেল করে, এটি ডাটাবেসে সংযোগের পরিমাণ লিনিয়ারালি স্কেল করে scale সুতরাং আরও অনুরোধ (আরও ব্যবহারকারী) আরও সংযোগের ফলাফল করবে। সুতরাং আপনি প্রয়োজন সীমাবদ্ধ এখনো অনেক সক্রিয় সংযোগ (ব্যবহারকারী) অনুরোধের প্রচুর আছে (!)
কেন ভ্যান Hoeylandt

12

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

সেকেন্ডে পরীক্ষার ফলাফল (পিএইচপি মাইক্রোটাইম দ্বারা পরিমাপ করা):

  • হোস্টেড ওয়েব: কানেক্টডিবি: 0.0038912296295166
  • লোকালহোস্ট: কানেক্টডিবি: 1.0214691162109 (এক সেকেন্ডের বেশি: লোকালহোস্ট ব্যবহার করবেন না!)
  • 127.0.0.1: সংযুক্তিডিবি: 0.00097203254699707

আকর্ষণীয়: নীচের কোডটি 127.0.0.1 ব্যবহারের মতোই দ্রুত:

$host = gethostbyname('localhost');
// echo "<p>$host</p>";
$db = new PDO("mysql:host=$host;dbname=" . DATABASE . ';charset=utf8', $username, $password,
    array(PDO::ATTR_EMULATE_PREPARES => false,
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));

মনে হচ্ছে পিডিওর ডোমেইননাম অনুবাদ করতে অসুবিধা আছে! ধন্যবাদ, আমি ভাবছিলাম যে কেন প্রতিটি সংযোগ আমার কোয়াড কোর মেশিনে লম্বা সময় নিচ্ছে!
মোস্তফা

@ গুন্নার বার্নস্টেইন +1 সুন্দর অনুসন্ধান। "লোকালহোস্ট" অবশ্যই অবশ্যই বেশি সময় নেয় এবং এটি আমার ওয়েব অ্যাপ্লিকেশনটির গতি কিছুটা উন্নত করেছে (এটি প্রচুর সংযোগ তৈরি করে)।
imperium2335

1
এটা অসাধারণ. আমার ডেভলপমেন্ট মেশিনে রেজোলিউশনে কিছু সমস্যা আছে ... একটি আইপি ব্যবহার করে আমার স্ক্রিপ্টটি 6.1 সে থেকে শুরু করে 1.1 এস হয়েছে
পিট

localhostব্যবহারসমূহ সকেট সংযোগ, সকেট সংযোগ সংযোগের বড় পরিমাণ খারাপ হচ্ছে বিখ্যাত
mente

@ সাধারণ কোনও রেফারেন্স, রিসোর্স যে সত্যটি প্রমাণ করতে পারে? আমি ভাবতে চাই যে টিডিপির চেয়ে ইউডিএস অগ্রাধিকারপ্রাপ্ত। ধন্যবাদ।
নক্সউইন

6

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

মনে হচ্ছে উপরের অভিযোগগুলি কেউ আইআইএএসএম টেবিল ব্যবহার করে এবং হ্যাকিংয়ের নিজস্ব সংস্করণগুলিতে টেবিলের লকগুলি ধরে নিয়ে চালিত হয় .. অবশ্যই আপনি অচল হয়ে যাচ্ছেন! PDO- এর সূচনাবার্তা () ব্যবহার করুন এবং আপনার টেবিলগুলিকে InnoDB এ সরান ..


2
এক বছর দেরীতে, আমি বুঝতে পেরেছি, তবে রেকর্ডটির জন্য: আমার গল্পটি পুরো ইনোডিবি টেবিলের সমন্বয়ে তৈরি একটি ডাটাবেস থেকে এসেছে , পুরো টেক্সট ইনডেক্সিং সমর্থনের জন্য মাইআইএসএএমের জলোচ্ছ্বাসে আটকে থাকা কয়েকটি মুখ্য ক্লোরিকে বাদ দিয়ে exception
চার্লস

পিএফটি , স্পিনিক্স পুরানো এবং সর্বাধিক বিভক্ত , ইলাস্টিকসন্ধান হ'ল নতুন উষ্ণতা । এক সুন্দর দিন, আমরা এটি কেবল নতুনগুলির পরিবর্তে আমাদের পুরানো অ্যাপ্লিকেশনগুলির জন্য ব্যবহার করব ...
চার্লস

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

2
মাইএসকিউএল 5.6 ইনোডিবি টেবিলগুলির জন্য ফুলটেক্সট সহায়তা সরবরাহ করে।
সময়সূচী

2

আমার মনে হয় অবিচ্ছিন্ন সংযোগ থাকা আরও সিস্টেমের উত্স খেয়ে ফেলবে। একটি তুচ্ছ পরিমাণ হতে পারে, কিন্তু এখনও ...


কম্পিউটার সময়ের মাইক্রোসেকেন্ডের জন্য প্রায়শই মানব সময় প্রচুর বাণিজ্য
অ্যান্ডি চেজ

1

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

অবিরাম সংযোগ নিয়ে প্রথম সমস্যা ...

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

২ য় সমস্যা ... প্রচুর মাইএসকিউএল সার্ভার সংযোগ ব্যবহার করে।

অনেক লোক সহজেই বুঝতে পারে না যে আপনি * সর্বোচ্চ_সংযোগ * পরিবর্তনশীল বৃদ্ধি করতে এবং মাইএসকিউএল অন্যদের সাথে 100 টিরও বেশি সমবর্তী সংযোগগুলি অর্জন করতে সক্ষম হলেন মাইএসকিউএল এর সাথে 1024 এর বেশি সংযোগ জানাতে অক্ষমতার পুরানো লিনাক্স সমস্যার কারণে were

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

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

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


0

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

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