উচ্চ-লোড সাইটে পিএইচপি ব্যবহারের কৌশলগুলি


242

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


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

ডেটাবেস

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

ক্যাশিং

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

এটি সম্পর্কে আমার প্রশ্ন:

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

পরিশেষে

কারও কাছে পিএইচপি-তে একটি উচ্চ লোড সাইট চালানোর জন্য কোনও টিপস / পয়েন্টার রয়েছে? আমি নিশ্চিত যে এটি ব্যবহারের পক্ষে কার্যকর একটি ভাষা - ফেসবুক এবং ইয়াহু! এটিকে দুর্দান্ত নজির দিন - তবে আমার কি এমন কোনও অভিজ্ঞতা দেখার দরকার আছে?


9
3.5 বছর পরে এবং আমি কী কাজ করছি তা মনে করতে পারি না, আমি কী খুব শীতল মনে হয়েছিল তা জানতে চাই :)
রস

8
অকাল অপটিমাইজেশন সম্পর্কে এটি আপনার কাছে একটি পাঠ্য হোক :)
রিমু অ্যাটকিনসন

উত্তর:


89

কোনও দুটি সাইট এক রকম নয়। আপনার সমস্যার পয়েন্টগুলি কোথায় হবে তা দেখতে আপনার সত্যিকারের জেমেটার এবং বেঞ্চমার্কের মতো একটি সরঞ্জাম পাওয়া উচিত। আপনি অনুমান এবং উন্নতি করতে প্রচুর সময় ব্যয় করতে পারেন তবে আপনি নিজের পরিবর্তনগুলি পরিমাপ না করে এবং তুলনা না করা পর্যন্ত আপনি প্রকৃত ফলাফল দেখতে পাবেন না।

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

এবং ভুলে যাবেন না যে আপনি কখনই স্কেলিং করেন না। 10req / s পরিচালনা করে এমন একটি সাইটের 1000req / s সমর্থন করার জন্য পরিবর্তনগুলি প্রয়োজন। এবং যদি আপনি 10,000req / s সমর্থন করার জন্য পর্যাপ্ত পরিমাণে চেষ্টা করছেন তবে আপনার আর্কিটেকচারটিও সম্ভবত সম্পূর্ণ আলাদা দেখাবে।

ডেটাবেস

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

ক্যাশিং

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

10
@ ডিস্কে লেখা এমনকি আপনি সূচি.এফপি খাঁজ করতে পারেন এবং অ্যাপাচি আপনার জন্য কাজটি করতে দিতে পারেন, যাতে পথের অস্তিত্ব না থাকলে কেবল সূচক.ইফপি বলা হয়। আপনি এর জন্য মোড_উইরাইট ব্যবহার করবেন।
আফ্রোস্কেন

5
-১, পিডিও মাইএসকিউএলি বা মাইএসকিউএল এক্সটেনশনের তুলনায় উল্লেখযোগ্যভাবে ধীর।
অ্যালিক্স অ্যাক্সেল

4
পিডিও মাইসক্লির চেয়ে অনেক ধীর ছিল এবং আমার জন্য নেস্টেড প্রশ্নের জন্য সঠিকভাবে কাজ করে নি। মাইস্ক্লি সার্ভার সাইড প্রস্তুত এবং পিডিওর মতো সীমাবদ্ধ পরামিতিগুলিকে সমর্থন করে।
ড্যারেন শ্বেঙ্ক

5
আমি বিশ্বাস করতে পারি না এটি উত্তর হিসাবে গ্রহণ করা হয়েছিল। এটা খুব ভাল না।
সিমকিবিয়ান

1
সম্পর্কে: ক্যাচিং - চিত্রগুলি, সিএসএস, এইচটিএম এবং জেএসগুলি সাহায্য করবে, ছবিগুলিতেও কুকিজ বন্ধ করে দেবে!
তালভি ওয়াটিয়া

61

আমি 15M-র বেশি ব্যবহারকারী সহ একটি সাইটে লিড বিকাশকারী। আমাদের স্কেলিংয়ের সমস্যা খুব কম ছিল কারণ আমরা এটির জন্য আগে থেকেই পরিকল্পনা করেছিলাম এবং চিন্তা করে স্কেলিং করেছি। আমি আমার অভিজ্ঞতা থেকে পরামর্শ করতে পারি এমন কৌশলগুলির কয়েকটি এখানে।

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

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

সূচকগুলি নিশ্চিত করুন যে আপনার প্রশ্নগুলি কমপক্ষে একটি সূচক ব্যবহার করে। সতর্ক থাকুন, আপনি যদি প্রায়শই লিখেন বা আপডেট করেন তবে সেই সূচকগুলি আপনার জন্য ব্যয় করবে। এটি এড়াতে কিছু পরীক্ষামূলক কৌশল রয়েছে।

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

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

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

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

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

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

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

এর নেতিবাচক দিকটি হ'ল একাধিক শারড থেকে ডেটা একসাথে করা কঠিন হতে পারে। তবে, আপনি পাশাপাশি তার ইঞ্জিনিয়ারও করতে পারেন।

অফলাইন প্রক্রিয়া ব্যবহারকারীদের যদি আপনার ব্যাকএন্ডের জন্য অপেক্ষা না করা থাকে তবে তা না করুন। একটি কাজের সারি তৈরি করুন এবং এটির ব্যবহারকারীর অনুরোধ থেকে আলাদা করে যে কোনও প্রসেসিং যা আপনি অফলাইনে রাখতে পারেন তা সরিয়ে দিন।


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

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

1
মন্তব্য করার জন্য আপনাকে ধন্যবাদ। এটি আশ্চর্যজনক যে কিছু প্রয়োগের সময় VAST পরিমাণ I / O বা ক্লায়েন্ট-সার্ভার I / O এর জন্য ব্যয় করে মধ্য-স্তরীয় কোডের প্রোফাইল দেওয়ার পক্ষে যুক্তি দেয় amazing একটি পিএইচপি প্রক্রিয়া যে 40 মিমি গ্রহণের সময় নির্ধারণের সময় 20% ছাড়াই একটি উবার জটিল অপ্টিমাইজেশন 1s ডাটাবেস ক্যোয়ারী ছাড়াই সহজ 5% সাশ্রয়ের তুলনায় অর্থহীন।
থিমসার্ট

42

আমি কয়েকটি সাইটগুলিতে কাজ করেছি যা পিএইচপি এবং মাইএসকিউএল দ্বারা ব্যয়িত মিলিয়ন / হিট / মাস পায়। এখানে কিছু বেসিক:

  1. ক্যাশে, ক্যাশে, ক্যাশে। আপনার ওয়েবসারভার এবং ডাটাবেসের উপর লোড হ্রাস করার অন্যতম সহজ এবং কার্যকর উপায় ক্যাশিং। ক্যাশে পৃষ্ঠার সামগ্রী, ক্যোয়ারী, ব্যয়বহুল গণনা, I / O আবদ্ধ যে কোনও কিছু। মেমকেচে মরা সহজ এবং কার্যকর।
  2. আপনি একবারে আউট হয়ে গেলে একাধিক সার্ভার ব্যবহার করুন। আপনার একাধিক ওয়েব সার্ভার এবং একাধিক ডাটাবেস সার্ভার (প্রতিলিপি সহ) থাকতে পারে।
  3. আপনার ওয়েব সার্ভারগুলিতে অনুরোধের সামগ্রিক # হ্রাস করুন। এটিতে মেয়াদউত্তীর্ণ শিরোনাম ব্যবহার করে জেএস, সিএসএস এবং চিত্রগুলি ক্যাশে করার প্রয়োজন রয়েছে। আপনি আপনার স্থিতিশীল সামগ্রীটি কোনও সিডিএন-তে স্থানান্তর করতে পারেন যা আপনার ব্যবহারকারীর অভিজ্ঞতার গতি বাড়িয়ে তুলবে।
  4. পরিমাপ ও মানদণ্ড। আপনার প্রোডাকশন মেশিনে নাগিওগুলি চালান এবং আপনার ডেভ / কিউ সার্ভারে লোড পরীক্ষা করুন। আপনার সার্ভার কখন আগুন লাগবে তা আপনার জানতে হবে যাতে আপনি এটি প্রতিরোধ করতে পারেন।

আমি বিল্ডিং স্কেলেবল ওয়েবসাইটগুলি পড়ার পরামর্শ দেব , এটি ফ্লিকার ইঞ্জিনিয়ারদের একজন লিখেছেন এবং এটি একটি দুর্দান্ত রেফারেন্স।

স্কেলাবিলিটি সম্পর্কে আমার ব্লগ পোস্টটিও দেখুন, এটি একাধিক ভাষা এবং প্ল্যাটফর্মের সাথে স্কেলিং সম্পর্কে উপস্থাপনাগুলির অনেকগুলি লিঙ্কগুলি রয়েছে: http://www.ryandoherty.net/2008/07/13/unicorns-and-scalability/


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

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

39

পুনঃ PDO / MySQLi / MySQLND

@ গ্যারি

তাদের আলাদা লক্ষ্য আছে বলে আপনি কেবল "মাইএসকিউএলি ব্যবহার করবেন না" বলতে পারবেন না। পিডিও প্রায় বিমূর্ত স্তর (যেমন এটি আসলে নয়) এর মতো এবং এটি একাধিক ডাটাবেস পণ্য ব্যবহার করা সহজ করার জন্য ডিজাইন করা হয়েছে যেখানে মাইএসকিউএলআই মাইএসকিউএল সংযোগগুলির সাথে নির্দিষ্ট। এটি মাইএসকিউএলির সাথে তুলনা করার প্রসঙ্গে PDO হ'ল আধুনিক অ্যাক্সেস স্তরটি বলা ভুল কারণ আপনার বক্তব্য থেকে বোঝা যায় যে অগ্রগতিটি mysql -> mysqli -> PDO হয়েছে যা ঘটনাটি নয়।

মাইএসকিউএল এবং পিডিওর মধ্যে পছন্দ সহজ - যদি আপনার একাধিক ডাটাবেস পণ্য সমর্থন করতে হয় তবে আপনি পিডিও ব্যবহার করেন। আপনি যদি কেবল মাইএসকিউএল ব্যবহার করেন তবে আপনি পিডিও এবং মাইএসকিউএলএর মধ্যে চয়ন করতে পারেন।

তাহলে আপনি কেন পিডিওর চেয়ে মাইএসকিউএলই বেছে নেবেন? নিচে দেখ...

@ross

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

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

এটি বলেছিল যে, মাইএসকিউএলএনডি পিডিওর জন্য এখন পিএইচপি 5.3 এ উপলব্ধ এবং সুতরাং আপনি এনডি থেকে পিডিওতে পারফরম্যান্স বর্ধনের সুবিধা পেতে পারেন তবে পিডিও এখনও একটি জেনেরিক ডাটাবেস স্তর এবং তাই এর থেকে খুব বেশি সুবিধা পেতে সক্ষম হবেন না মাইএসকিউএলআই হিসাবে এনডি-তে উন্নতি করতে পারে

কিছু দরকারী বেঞ্চমার্কগুলি 2006 সালের হলেও এটি পাওয়া যেতে পারে this এই বিকল্পের মতো জিনিস সম্পর্কে আপনার সচেতন হওয়াও প্রয়োজন ।

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

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


6
আমি পিডিও থেকে মাইসকিলে স্যুইচ করেছি এবং নিয়মিত অনুসন্ধানগুলি ঠিক ২ বার দ্রুত কার্যকর করতে শুরু করে।
সার্জ

5
@ সার্গ: এটি নিশ্চিত করার জন্য কিছু পরীক্ষা পোস্ট করার যত্ন ?, কারণ আমার মারাত্মক সন্দেহ আছে যে পিডিও থেকে মাইএসকিলি থেকে স্যুইচ করা আপনাকে এতো গতি বাড়িয়ে দেবে।
স্ট্যান

23

সাধারণ

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

কোড

  • আপনার কোডটিকে প্রোফাইল করুন যাতে আপনি জানতে পারেন যে বাধা কোথায় আছে এবং তা কোডে বা ডাটাবেজে রয়েছে

ডেটাবেস

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

ক্যাশিং

  • ক্যাচিং কোড, অবজেক্টস এবং ডেটাতে প্রচুর লেখা হয়েছে। নিবন্ধ দেখুন এপিসি , পার্সি-জাতির প্রাচীন শাস্ত্রগ্রন্থ অপ্টিমাইজার , memcached , QuickCache , JPCache । আপনার সত্যিকারের প্রয়োজনের আগে এটির কিছু করুন এবং আপনি বিনা চাপে পড়া শুরু করার বিষয়ে কম উদ্বিগ্ন হবেন।
  • এপিসি এবং জেন্ড অপ্টিমাইজার হ'ল অপকোড ক্যাশে, তারা কোডটি পুনর্বিবেচনা এবং পুনঃসংশোধন এড়িয়ে পিএইচপি কোডকে গতি দেয়। সাধারণত ইনস্টল করা সহজ, তাড়াতাড়ি করার যোগ্য।
  • মেমক্যাচড একটি জেনেরিক ক্যাশে, যা আপনি ক্যোয়ারী, পিএইচপি ফাংশন বা অবজেক্টস বা পুরো পৃষ্ঠাগুলি ক্যাশে করতে পারেন। কোডটি অবশ্যই ব্যবহারের জন্য অবশ্যই লিখতে হবে, যা ক্যাশেড অবজেক্টগুলি তৈরি, আপডেট এবং মোছার জন্য কোনও কেন্দ্রীয় পয়েন্ট না থাকলে কোনও জড়িত প্রক্রিয়া হতে পারে।
  • QuickCache এবং JPCache ফাইল ক্যাশে, অন্যথায় মেমক্যাচের মতো। বুনিয়াদি ধারণাটি সহজ, তবে কোডেরও প্রয়োজন হয় এবং কেন্দ্রীয় বিন্যাসের তৈরি, আপডেট এবং মুছার সাথে সহজ।

বিবিধ

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

9

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

আপনার প্রোগ্রামে বাধা খুঁজে পেতে এক্সডিবেগ চালানোর আমিও সুপারিশ করছি । এটি আমার জন্য অপ্টিমাইজেশন বাতাস তৈরি করেছে।


9

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

আপনার ডাটাবেস প্রশ্নগুলি রচনা করার চেষ্টা করুন, ধীর এবং কী ঘটে যায় তা নির্ধারণ করুন এবং সেখান থেকে একটি অপ্টিমাইজেশান কৌশল নিয়ে আসুন।

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

সার্ভারের মধ্যে ডেটাবেস বিভক্ত করা এবং একরকম লোড ব্যালেন্সিং কৌশল ব্যবহার করে (উদাহরণস্বরূপ প্রয়োজনীয় ডেটা সহ 1 এবং # রিডানড্যান্ট ডাটাবেসগুলির মধ্যে একটি এলোমেলো সংখ্যা তৈরি করুন - এবং কোন ডাটাবেস সার্ভারের সাথে সংযোগ স্থাপন করতে হবে তা নির্ধারণ করতে সেই সংখ্যাটি ব্যবহার করাও) বাড়ানোর এক দুর্দান্ত উপায় হতে পারে দক্ষতা.

এগুলি কিছু বেশ কয়েকটি উচ্চ লোড সাইটের জন্য অতীতে বেশ ভাল কাজ করেছে। আশা করি এটি আপনাকে শুরু করতে সহায়তা করে :-)


1
প্রয়োজনীয় ফুলকোট: "আমাদের ছোট কার্যকারিতা সম্পর্কে ভুলে যাওয়া উচিত, সময়ের প্রায় 97% বলুন: অকালীন অনুকূলতা হ'ল সমস্ত মন্দের মূল"
আলিস্টার বুলম্যান

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

6

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

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

পিএইচপি এর জন্য যে কোনও ধরণের অপকোড ক্যাশে (যেমন এপিসি বা অন্য অনেকের মধ্যে একটি) পাশাপাশি অনেক সহায়তা করবে।


6

আমি মাসে 7-8 মিলিয়ন পৃষ্ঠা দর্শন সহ একটি ওয়েবসাইট চালাই। ভয়াবহভাবে খুব বেশি নয়, তবে আমাদের সার্ভারের বোঝা অনুভূত হয়েছে। আমরা যে সমাধানটি বেছে নিয়েছি তা সহজ ছিল: ডাটাবেস স্তরে মেমক্যাস। এই সমাধানটি কার্যকরভাবে কাজ করে যদি ডাটাবেস লোড আপনার প্রধান সমস্যা।

আমরা পুরো বস্তু এবং সর্বাধিক ঘন ব্যবহৃত ডেটাবেস ফলাফলগুলি ক্যাশে করতে মেমক্যাচ ব্যবহার শুরু করেছি। এটি কাজ করেছে, তবে এটি বাগগুলিও প্রবর্তন করেছে (আমরা যদি আরও বেশি যত্নবান হত তবে আমরা তাদের মধ্যে কিছু এড়িয়ে যেতে পারি)।

সুতরাং আমরা আমাদের পদ্ধতির পরিবর্তন। আমরা একটি ডাটাবেস র‌্যাপার তৈরি করেছি (আমাদের পুরানো ডাটাবেসের মতো ঠিক একই পদ্ধতিগুলির সাথে, তাই এটি স্যুইচ করা সহজ ছিল) এবং তারপরে আমরা মেমক্যাচ করা ডাটাবেস অ্যাক্সেসের পদ্ধতিগুলি সরবরাহ করার জন্য এটি সাবক্লাস করেছি।

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


6

এটির জন্য মূল্যবান, ক্যাচিং হ'ল পিএইচপি-তে DIRT সিম্পল এমনকি মেমচেডের মতো কোনও এক্সটেনশন / সহায়তা প্যাকেজ ছাড়াই।

আপনাকে যা করতে হবে তা হ'ল ব্যবহার করে একটি আউটপুট বাফার তৈরি করা ob_start()

একটি বিশ্বব্যাপী ক্যাশে ফাংশন তৈরি করুন। কলob_start , কলব্যাক হিসাবে ফাংশনটি পাস করুন। ফাংশনে, পৃষ্ঠার ক্যাশেড সংস্করণটি সন্ধান করুন। যদি উপস্থিত থাকে তবে এটি পরিবেশন করুন এবং শেষ করুন।

যদি এটি বিদ্যমান না থাকে তবে স্ক্রিপ্টটি প্রক্রিয়া চালিয়ে যাবে। এটি যখন মিলিয়ে যাওয়া ob_end () এ পৌঁছায় এটি আপনার নির্দিষ্ট করা ফাংশনটি কল করবে। সেই সময়ে, আপনি কেবল আউটপুট বাফারের সামগ্রীগুলি পান, একটি ফাইলে রেখে দিন, ফাইলটি সংরক্ষণ করুন এবং শেষ করুন।

কিছু মেয়াদোত্তীর্ণ / আবর্জনা সংগ্রহ যোগ করুন।

এবং অনেক লোক বুঝতে পারে না যে আপনি বাসা ob_start()/ ob_end()কল করতে পারেন । সুতরাং যদি আপনি ইতিমধ্যে কোনও আউটপুট বাফার ব্যবহার করছেন, বলুন, বিজ্ঞাপনগুলিতে পার্স করুন বা সিনট্যাক্স হাইলাইটিং করুন বা যা কিছু করুন, আপনি কেবল অন্য ob_start/ob_endকলকে বাসাতে পারেন ।


এটি পছন্দসই ধারণা মত দেখায় কারণ +1। পারফরম্যান্স-
ভিত্তিতে

+1 কারণ এটি একটি আকর্ষণীয় ধারণা। এই কলব্যাকগুলি আমার জন্য আমার ক্যাচিং ক্লাস কল করতে পারে!
শিওনক্রস

5

পিএইচপি-র ক্যাচিং এক্সটেনশনের পরামর্শের জন্য ধন্যবাদ - আপনি কি একে অপরের ব্যবহারের কারণ ব্যাখ্যা করতে পারেন? আমি আইআরসি-র মাধ্যমে মেমক্যাচ করা সম্পর্কে দুর্দান্ত কিছু শুনেছি কিন্তু এপিসির কথা কখনও শুনিনি - সে সম্পর্কে আপনার মতামত কী? আমি ধরে নিই যে একাধিক ক্যাচিং সিস্টেম ব্যবহার করা বেশ পাল্টা কার্যকর।

প্রকৃতপক্ষে, অনেকে এপিসি এবং ম্যাকচেড ব্যবহার করে ...


4

দেখে মনে হচ্ছে আমি ভুল ছিলাম । মাইএসকিউএলি এখনও বিকাশ করা হচ্ছে। তবে নিবন্ধ অনুসারে, পিডিও_মাইএসকিউএল এখন মাইএসকিউএল টিম দ্বারা অবদান রাখছে। নিবন্ধ থেকে:

মাইএসকিউএল উন্নত এক্সটেনশন - মাইএসকিলি - হ'ল ফ্ল্যাগশিপ। এটি অক্ষর, প্রস্তুতি বিবৃতি এবং সঞ্চিত পদ্ধতি সহ মাইএসকিউএল সার্ভারের সমস্ত বৈশিষ্ট্য সমর্থন করে। ড্রাইভার একটি হাইব্রিড এপিআই সরবরাহ করে: আপনি আপনার পছন্দের উপর ভিত্তি করে একটি পদ্ধতিগত বা অবজেক্ট-ভিত্তিক প্রোগ্রামিং স্টাইল ব্যবহার করতে পারেন। mysqli পিএইচপি 5 এবং তার সাথে আসে। নোট করুন যে পিএইচপি 4 এর জীবনের শেষটি 2008-08-08।

পিএইচপি ডেটা অবজেক্টস (পিডিও) হ'ল ডেটাবেস অ্যাক্সেস অ্যাবস্ট্রাকশন স্তর। PDO আপনাকে বিভিন্ন ডাটাবেসের জন্য একই API কলগুলি ব্যবহার করতে দেয় allows পিডিও কোনও ডিগ্রি এসকিউএল বিমূর্ততা সরবরাহ করে না। PDO_MYSQL PDO- র জন্য একটি MySQL ড্রাইভার। PDO_MYSQL পিএইচপি 5 নিয়ে আসে PH পিএইচপি 5.3 হিসাবে মাইএসকিউএল বিকাশকারী সক্রিয়ভাবে এতে অবদান রাখে। একটি ইউনিফাইড API এর PDO সুবিধাটি এমন দামে আসে যে মাইএসকিউএল নির্দিষ্ট বৈশিষ্ট্যগুলি উদাহরণস্বরূপ একাধিক বিবৃতি, ইউনিফাইড API এর মাধ্যমে সম্পূর্ণরূপে সমর্থিত নয়।

কখনও প্রকাশিত পিএইচপি জন্য প্রথম মাইএসকিউএল ড্রাইভার ব্যবহার বন্ধ করুন: ext / mysql। ২০০ 2004 সালে পিএইচপি 5 দিয়ে মাইএসকিউএল উন্নত এক্সটেনশন - মাইএসকিলি - প্রবর্তনের পরেও আশেপাশের সবচেয়ে পুরানো ড্রাইভারটি ব্যবহার করার কোনও কারণ নেই। ext / mysql চারসেট, প্রস্তুত বিবৃতি এবং সঞ্চিত পদ্ধতিগুলি সমর্থন করে না। এটি মাইএসকিউএল ৪.০ এর বৈশিষ্ট্যসীমাতে সীমাবদ্ধ। নোট করুন যে মাইএসকিউএল ৪.০ এর জন্য বর্ধিত সমর্থনটি ২০০৮-১২-৩১ এ শেষ হবে। নিজেকে যেমন পুরানো সফ্টওয়্যার বৈশিষ্ট্যটিতে সীমাবদ্ধ করবেন না! মাইসকিলে আপগ্রেড করুন, রূপান্তর_ও_মাইএসকিউএলই দেখুন। mysql শুধুমাত্র আমাদের দৃষ্টিকোণ থেকে রক্ষণাবেক্ষণের মোডে রয়েছে।

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

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


3

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

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


2

নিশ্চিত PDO চমৎকার, কিন্তু করেনি হয়েছে কিছু যদিও এটি এখন সংশোধন মনে MySQL এবং mysqli বনাম এটা এর পারফরম্যান্সের সম্পর্কে বিতর্ক।

আপনি বহনযোগ্যতা কল্পনা যদি আপনার pdo ব্যবহার করা উচিত, তবে না, mysqli উপায় হওয়া উচিত। এটিতে ওও ইন্টারফেস, প্রস্তুত বিবৃতি এবং পিডিও বেশিরভাগ প্রস্তাব দেয় (ব্যতীত, ভাল, বহনযোগ্যতা)।

এছাড়াও, যদি পারফরম্যান্সের সত্যই প্রয়োজন হয়, পিএইচপি 5.3- তে (নেটিভ মাইএসকিএল ) মাইএসকিএলএনডি ড্রাইভারের জন্য প্রস্তুত করুন , যিনি আরও ভালভাবে পারফরম্যান্স এবং উন্নত মেমরির ব্যবহার (এবং পারফরম্যান্স টিউনিংয়ের পরিসংখ্যান) সহ পিএইচপি সহ আরও দৃ integrated়ভাবে সংহত হয়ে উঠবেন

আপনার কাছে ক্লাস্টারযুক্ত সার্ভার (এবং ইউটিউবের মতো লোড) থাকলে মেমক্যাচটি দুর্দান্ত, তবে আমিও প্রথমে এপিসি চেষ্টা করে দেখতে চাই ।


2

ইতিমধ্যে অনেক ভাল উত্তর দেওয়া হয়েছিল, তবে আমি আপনাকে XCache নামে একটি বিকল্প অপকোড ক্যাশে নির্দেশ করতে চাই । এটি হালকা অবদানকারী তৈরি করেছেন।

এছাড়াও, যদি ভবিষ্যতে আপনার ডাটাবেস সার্ভারের ভারসাম্য বজায় রাখতে পারে তবে মাইএসকিউএল প্রক্সি আপনাকে এটি অর্জনে খুব ভালভাবে সহায়তা করতে পারে।

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


2

প্রথম প্রশ্নটি হ'ল আপনি এটি কতটা বড় আশা করবেন? এবং আপনার অবকাঠামোতে বিনিয়োগের জন্য আপনি কতটা পরিকল্পনা করছেন। যেহেতু আপনি এখানে প্রশ্ন জিজ্ঞাসা করার প্রয়োজনীয়তা অনুভব করছেন, তাই আমি অনুমান করছি যে আপনি সীমিত বাজেটে ছোট শুরু করবেন বলে আশা করছেন।

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

এই পর্যায়ে বিভিন্ন ডাটাবেস নোড জুড়ে আপনার ডেটা ভাগ করা খুব খারাপ ধারণা - তবে আপনি এটি একই সার্ভারে বিভিন্ন ডাটাবেসগুলিতে বিভাজন বিবেচনা করতে চাইতে পারেন (যা আপনি ফেসবুককে ছাড়িয়ে যাওয়ার পরে নোডের পার্টিশনকে সহজতর করবেন)।

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

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

কোনও অপ-কোড ক্যাশে ব্যবহার করবেন না।

এটি এত ধীর কেন হচ্ছে তা বুঝতে আপনার সাইট এবং এর লগগুলি অধ্যয়ন করতে প্রচুর সময় ব্যয় করুন।

ক্লায়েন্টের উপর যতটা সম্ভব ক্যাশিং ঠেলাও।

আপনি যা কিছু করতে পারেন তা সংকুচিত করতে Mod_gzip ব্যবহার করুন।

সি


2

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

সাধারণভাবে, সহজ দ্রুত । টেমপ্লেটগুলি আপনাকে ধীর করে দেয়। ডাটাবেসগুলি আপনাকে ধীর করে দেয়। জটিল গ্রন্থাগারগুলি আপনাকে ধীর করে দেয়। একে অপরের উপর টেমপ্লেট স্থাপন করে ডাটাবেসগুলি থেকে এগুলি পুনরুদ্ধার করা এবং এটি একটি জটিল লাইব্রেরিতে পার্স করা -> সময়টি একে অপরের সাথে বহুগুণে বিলম্ব করে।

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

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


1

@ গ্যারি

মাইএসকিউএলি ব্যবহার করবেন না - পিডিও হ'ল 'আধুনিক' ওও ডাটাবেস অ্যাক্সেস স্তর। আপনার স্নাতকের স্থানধারক হ'ল ব্যবহার করার জন্য সর্বাধিক গুরুত্বপূর্ণ বৈশিষ্ট্য। এটি আপনার জন্য সার্ভার সাইড প্রস্তুতি এবং অন্যান্য অপ্টিমাইজেশন ব্যবহার করার জন্য যথেষ্ট স্মার্ট।

আমি এই মুহুর্তে PDO এর দিকে তাকাচ্ছি এবং দেখে মনে হচ্ছে আপনি ঠিকই আছেন - তবে আমি জানি যে মাইএসকিউএল পিএইচপি-র জন্য মাইএসকিউএলডি এক্সটেনশন বিকাশ করছে - আমি মাইএসকিউএল বা মাইএসকিউএলই সফল হতে পারে বলে মনে করেন - আপনি সে সম্পর্কে কী ভাবেন?


@ রায়ান , এরিক , tj9991

পিএইচপি-র ক্যাচিং এক্সটেনশনের পরামর্শের জন্য ধন্যবাদ - আপনি কি একে অপরের ব্যবহারের কারণ ব্যাখ্যা করতে পারেন? আমি আইআরসি-র মাধ্যমে মেমক্যাচ করা সম্পর্কে দুর্দান্ত কিছু শুনেছি কিন্তু এপিসির কথা কখনও শুনিনি - সে সম্পর্কে আপনার মতামত কী? আমি ধরে নিই যে একাধিক ক্যাচিং সিস্টেম ব্যবহার করা বেশ পাল্টা কার্যকর।

আমি অবশ্যই কিছু প্রোফাইলিং পরীক্ষককে বাছাই করব - সেগুলির বিষয়ে আপনার সুপারিশের জন্য আপনাকে অনেক ধন্যবাদ।


1

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


1

দেখব mod_cache , Apache ওয়েব সার্ভারের জন্য একটি আউটপুট ক্যাশে, ASP.NET আউটপুট ক্যাশে করার অনুরুপ।

হ্যাঁ, আমি দেখতে পাচ্ছি যে এটি এখনও পরীক্ষামূলক তবে এটি কোনও দিন চূড়ান্ত হবে।


1

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

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

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


1

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


1

ক্যাশে সম্পর্কে তৈরি পয়েন্টগুলি স্পট-অন; এটি একটি দক্ষ অ্যাপ্লিকেশন তৈরির সবচেয়ে কম জটিল এবং সবচেয়ে গুরুত্বপূর্ণ অংশ। আমি যোগ করতে চাই যে মেমক্যাচ দুর্দান্ত হওয়ার সময়, আপনার অ্যাপ্লিকেশনটি যদি একটি সার্ভারে বেঁচে থাকে তবে এপিসি প্রায় পাঁচগুণ দ্রুত faster

মাইএসকিউএল পারফরম্যান্স ব্লগে "ক্যাশে পারফরম্যান্স তুলনা" পোস্টটির বিষয়টিতে কিছু আকর্ষণীয় মাপদণ্ড রয়েছে - http://www.mysqlperformanceblog.com/2006/08/09/cache-performance-compistance/

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