5 মিলিয়ন ওয়েব পৃষ্ঠাগুলি স্ক্র্যাপ করার সর্বাধিক দক্ষ (সময়, ব্যয়) উপায়?


8

আমার কাছে ওয়েব পৃষ্ঠাগুলির একটি তালিকা রয়েছে যা আমার স্ক্র্যাপ করতে, পার্স করতে এবং তারপরে ফলাফলটি ডেটাবেজে সংরক্ষণ করতে হয়। মোট প্রায় 5,000,000।

আমার কাছে যাওয়ার সর্বোত্তম উপায় সম্পর্কে আমার বর্তমান অনুমানটি হ'ল ~ 100 ইসি 2 উদাহরণ স্থাপন করা, প্রতিটি উদাহরণকে 50,000 পৃষ্ঠাগুলি স্ক্র্যাপে সরবরাহ করা এবং তারপরে চালানো ছেড়ে দেওয়া, প্রক্রিয়াটি শেষ হয়ে গেলে ডাটাবেসগুলিকে একসাথে একত্রিত করা। ধারণাটি হ'ল এটি চালাতে প্রায় এক দিন সময় নেয় (প্রতিটি পৃষ্ঠা লোড করতে, পার্স করতে এবং সংরক্ষণ করতে 600 মিমি)।

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

আমার পরিস্থিতিতে বাধাটি হ'ল পৃষ্ঠাগুলি ডাউনলোড করা, পার্সিং এমন একটি জিনিস যা 2 মাইলের বেশি লাগে না, তাই পৃষ্ঠাগুলি ডাউনলোড করার প্রক্রিয়াটিকে সহজতর করতে পারে এমন কিছু যা আমি খুঁজছি।


আপনি যখন ওয়েব পৃষ্ঠাগুলির একটি তালিকা বলবেন, এটি কি কেবল কোনও সরল ওয়েব পৃষ্ঠা বা কোনও ফোরামের মতো পুরো সাইট বা কিছু? এমনকি যদি আপনি সমতল হয়ে যান, আপনি যে সাইটগুলি স্ক্র্যাপ করতে চান তার জন্য কি কোনও নিয়ম রয়েছে (বা এটি কি এই
থিয়োরিটি

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

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

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

মিমি হিএম এটি I.
স্যাম

উত্তর:


7

ডাউনলোড সময় (এবং সেইজন্য ব্যান্ডউইথ ব্যবহার) আপনার সীমিত ফ্যাক্টর এই ধারণাটি নিয়ে কাজ করা, আমি নিম্নলিখিত পরামর্শগুলি করব:

প্রথমত, m1.lages উদাহরণগুলি চয়ন করুন। আই / ও পারফরম্যান্সের তিনটি 'স্তরের' (যার মধ্যে ব্যান্ডউইদথ অন্তর্ভুক্ত), এর মধ্যে এম 1.লাজ এবং এম 1 এক্সলার্স উভয়ই 'হাই' আই / ও পারফরম্যান্স সরবরাহ করে। যেহেতু আপনার কাজটি সিপিইউ বাউন্ডেড নয়, সেগুলির মধ্যে সর্বনিম্ন ব্যয় করা পছন্দনীয় পছন্দ হবে।

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

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

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

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

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

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

যদি সময়টি আপনার চেয়ে ব্যয়ের চেয়ে উচ্চ অগ্রাধিকারের হয় তবে ক্লাস্টার গণনা উদাহরণগুলি 10 জিবিপিএস ব্যান্ডউইদথ দেয় - এবং এটি ডাউনলোডের জন্য সেরা ব্যান্ডউইথ পাওয়া উচিত yield

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


4

আমরা অনুরূপ কিছু করার চেষ্টা করেছি এবং এখানে আমার 5 সেন্ট রয়েছে:

  1. ২-৩ টি সস্তা অবারিত সার্ভার পান, যেমন ব্যান্ডউইথের জন্য অর্থ প্রদান করবেন না।

  2. অ্যাসিঙ্কোর সহ অজগর ব্যবহার করুন। অ্যাসিঙ্কোর হ'ল পুরানো উপায়, তবে আমরা দেখতে পেয়েছি এটি অন্য যে কোনও পদ্ধতির চেয়ে দ্রুত কাজ করে। ডাউনসাইডটি হ'ল ডিএনএস লুকআপ ব্লক করছে, অর্থাত্ "সমান্তরাল" নয়। অ্যাসিঙ্কোর ব্যবহার করে আমরা 40 মিনিটের জন্য 1 এম ইউআরএলগুলি স্ক্র্যাপ করতে পেরেছি, একক এক্সিয়ন 4 কোর, 8 জিবি র‌্যাম ব্যবহার করে। সার্ভারে লোড গড় 4 কম ছিল (এটি 4 কোরের জন্য দুর্দান্ত)।

  3. আপনি যদি অ্যাসিঙ্কোর পছন্দ না করেন তবে উদ্ভাবনের চেষ্টা করুন। এমনকি এটি ডিএনএস নন-ব্লকিংও করে। জেনভেন্ট ব্যবহার করে, 1 হার্ডওয়্যার একই হার্ডওয়্যারের প্রায় 50 মিনিটের জন্য ডাউনলোড করা হয়েছিল। সার্ভারে লোড গড় বিশাল ছিল।

দ্রষ্টব্য, আমরা প্রচুর পাইথন লাইব্রেরি পরীক্ষা করেছি, যেমন গ্রায়েস্ট, কার্ল, লিবারল / লিবারল 2, কিন্তু আমরা টুইস্টেড পরীক্ষা করি নি

  1. আমরা পিএইচপি + কার্ল + বেশ কয়েকটি প্রক্রিয়া পরীক্ষা করেছি, এটি প্রায় এক ঘন্টা কাজ করেছে, তবে সার্ভারে লোড গড়টি বিশাল was

"নিরক্ষিত" এর অর্থ সাধারণত আমার অভিজ্ঞতায় "যখন আমরা এটির মতো অনুভব করি তখন আমরা আপনাকে বন্ধ করি"।
সিজেজোজ

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