আমার একটি অ্যামাজন এস 3 বালতিতে কয়েক মিলিয়ন ফাইল রয়েছে এবং আমি এই ফাইলগুলি অন্য বালতি এবং ফোল্ডারে ন্যূনতম ব্যয় বা সম্ভব হলে কোনও ব্যয় সহ সরিয়ে নিতে চাই। সমস্ত বালতি একই জোনে।
আমি এটা কিভাবে করতে পারি?
আমার একটি অ্যামাজন এস 3 বালতিতে কয়েক মিলিয়ন ফাইল রয়েছে এবং আমি এই ফাইলগুলি অন্য বালতি এবং ফোল্ডারে ন্যূনতম ব্যয় বা সম্ভব হলে কোনও ব্যয় সহ সরিয়ে নিতে চাই। সমস্ত বালতি একই জোনে।
আমি এটা কিভাবে করতে পারি?
উত্তর:
মিলিয়ন মিলিয়ন একটি বড় সংখ্যা - আমি পরে এটিতে ফিরে আসব।
আপনার পদ্ধতির নির্বিশেষে, অন্তর্নিহিত প্রক্রিয়াটি কেবল একটি বালতি থেকে অন্য বালিতে সরাসরি অনুলিপি করা দরকার - এইভাবে (যেহেতু আপনার বালতি একই অঞ্চলে থাকে) আপনাকে ব্যান্ডউইথের জন্য কোনও মূল্য দিতে হবে না। অন্য যে কোনও পন্থা কেবল অদক্ষ (যেমন ফাইলগুলি ডাউনলোড এবং পুনরায় আপলোড করা)।
বালতিগুলির মধ্যে অনুলিপিটি 'পুট কপি' ব্যবহার করে সম্পন্ন হয় - এটি একটি পুট অনুরোধ যা এতে 'এক্স-এমজেড-কপি-উত্স' শিরোনামটি অন্তর্ভুক্ত করে - আমি বিশ্বাস করি এটি একটি কপির অনুরোধ হিসাবে শ্রেণিবদ্ধ। এটি ফাইলটি এবং পূর্বনির্ধারিতভাবে সম্পর্কিত মেটা-ডেটা অনুলিপি করবে। আপনি যদি একই সময়ে এসিএল সেট করতে চান তবে আপনাকে অবশ্যই সঠিক মান সহ একটি 'x-amz-acl' অন্তর্ভুক্ত করতে হবে (অন্যথায়, এটি ব্যক্তিগতে ডিফল্ট হবে)। আপনার কপি অনুরোধগুলির জন্য আপনাকে চার্জ করা হবে (0.01 / 1,000 অনুরোধগুলি)। অনিবদ্ধ ফাইলগুলি অনুলিপি করার পরে আপনি মুছে ফেলতে পারেন (অনুরোধের চার্জ দেবে না)। (একটি বিষয় যা সম্পর্কে আমি পুরোপুরি পরিষ্কার নই তা হ'ল একটি কপির অনুরোধটিও জিইটি অনুরোধের চার্জ বহন করে কিনা, কারণ বস্তুকে প্রথমে উত্স বালতি থেকে আনতে হবে - যদি তা হয় তবে চার্জটি অতিরিক্ত $ 0.01 / 10,000 পাবে অনুরোধ).
উপরের চার্জগুলি আপাতদৃষ্টিতে অপ্রয়োজনীয় - আপনি প্রায় 10 মিলিয়ন (বা 11 ডলার) সন্ধান করছেন এমন এক মিলিয়ন অবজেক্টের জন্য। যেহেতু শেষ পর্যন্ত আপনাকে অবশ্যই গন্তব্য বালতিতে ফাইলগুলি তৈরি করতে হবে, অন্য পদ্ধতিগুলি (যেমন ফাইলগুলি টেক-জিপিং করা ফাইলগুলি, আমাজন আমদানি / রফতানি ইত্যাদি) এই ব্যয়টি পাবে না। কোনওটিই কম নয়, অ্যামাজনকে যোগাযোগ করার সময় এটি আপনার পক্ষে মূল্যবান হতে পারে যদি আপনার কাছে কয়েক মিলিয়ন অবজেক্ট ট্রান্সফার করতে হয়।
উপরের (অপরিবর্তনীয় দাম) দেওয়া, পরবর্তী জিনিসটি সময় হ'ল 'মিলিয়ন ফাইল' অনুলিপি করার সময় এটি একটি বড় ফ্যাক্টর হবে। বালতিগুলির মধ্যে সরাসরি অনুলিপি সম্পাদন করতে পারে এমন সমস্ত সরঞ্জাম একই চার্জ বহন করবে। দুর্ভাগ্যক্রমে, আপনার প্রতি ফাইলের জন্য একটি অনুরোধ (অনুলিপি করতে), মুছে ফেলার জন্য একটি অনুরোধ, এবং এসিএল ডেটা পড়ার জন্য একটি অনুরোধের প্রয়োজন (যদি আপনার ফাইলগুলিতে এসিএল বিচিত্র থাকে)। সর্বাধিক সমান্তরাল ক্রিয়াকলাপ চালাতে পারে তার থেকে সেরা গতি আসবে।
কিছু কমান্ড লাইন পদ্ধতির রয়েছে যা বেশ কার্যকর হতে পারে:
S3fs কাজ করতে পারে এমন কিছু সম্ভাবনা রয়েছে - এটি বেশ সমান্তরাল, একই বালতিটির মধ্যে অনুলিপিগুলি সমর্থন করে - বিভিন্ন বালতির মধ্যে অনুলিপি সমর্থন করে না, তবে বিভিন্ন বালতির মধ্যে চলনগুলিকে সমর্থন করতে পারে ।
আমি এস 3 সিএমডি-পরিবর্তন দিয়ে শুরু করব এবং এটির সাথে আপনার কোনও সাফল্য রয়েছে কিনা তা দেখুন বা আরও ভাল সমাধানের জন্য অ্যামাজনের সাথে যোগাযোগ করুন।
aws s3 sync s3://source s3://destination
ফিট?
পুরানো বিষয়, তবে এটি একই দৃশ্যের তদন্তকারী সবার পক্ষে। 20,000+ অবজেক্টের জন্য আমাকে সময় নিয়েছে। এডাব্লুএস লিনাক্স / সেন্টোসে চলছে, প্রতিটি ভিডিও বেশিরভাগ অংশে কিছু ভিডিও এবং বিভিন্ন মিডিয়া ফাইল সহ বেশিরভাগ অংশের চিত্র।
বালতি এ থেকে বালতি বিতে ফাইলগুলি অনুলিপি করতে AWS CLI সরঞ্জাম ব্যবহার করে
উ: নতুন বালতি তৈরি করুন
$ aws s3 mb s3://new-bucket-name
খ। পুরোনো বালতিটি নতুন বালতির সাথে সিঙ্ক করুন
$ aws s3 sync s3://old-bucket-name s3://new-bucket-name
20,000+ অবজেক্ট অনুলিপি করা হচ্ছে ...
17:03 শুরু হয়েছিল
17:06 এ শেষ হয়েছে
20,000+ অবজেক্টের মোট সময় = প্রায় 3 মিনিট
নতুন বালতিটি সঠিকভাবে কনফিগার হয়ে গেলে, অনুমতি, নীতি ইত্যাদি এবং আপনি পুরানো বালতিটি মুছে ফেলতে ইচ্ছুক।
গ। পুরানো বালতি মুছুন / মুছুন
$ aws s3 rb --force s3://old-bucket-name
আমি নিশ্চিত নই যে এটি সর্বোত্তম পন্থা তবে এডাব্লুএস ম্যানেজমেন্ট কনসোলের একটি কাট / অনুলিপি / পেস্ট বৈশিষ্ট্য রয়েছে। ব্যবহার করা খুব সহজ এবং দক্ষ।
আমি ভেবেছিলাম আপনি এখনই সম্ভবত একটি ভাল সমাধান খুঁজে পেয়েছেন, তবে অন্য যারা এই সমস্যার মুখোমুখি হচ্ছেন (যেমন আমি সম্প্রতি ছিলাম), আমি একটি সাধারণ ইউটিলিটি বিশেষত একটি এস 3 বালতিকে অন্যটিতে আয়না দেওয়ার উদ্দেশ্যে তৈরি করেছি একটি অত্যন্ত সমবর্তী, তবুও সিপিইউ এবং মেমরি দক্ষ পদ্ধতি।
এটি এখানে অ্যাপাচি লাইসেন্সের অধীনে গিথুব এ রয়েছে: https://github.com/cobbzilla/s3s3mirror
যদি আপনি এটি চেষ্টা করার সিদ্ধান্ত নেন তবে আপনার কোনও প্রতিক্রিয়া থাকলে দয়া করে আমাকে জানান।
--cross-account-copy
বিকল্প আছে ( -C
সংক্ষেপে)। মনে রাখবেন যে অ্যাকাউন্টগুলি অনুলিপি করার সময়, এসিএলগুলি অনুলিপি করা হয় না ; গন্তব্য বালতির মালিকের অনুলিপি করা ডেটাতে সম্পূর্ণ অনুমতি থাকবে।
এডাব্লুএস সিএলআই সমান্তরাল প্রক্রিয়াগুলিতে একটি বালতি অন্য একটিতে অনুলিপি করার একটি উপায় সরবরাহ করে। Https://stackoverflow.com/a/40270349/371699 থেকে নেওয়া :
নিম্নলিখিত কমান্ডগুলি ডাব্লুএসএস সিএলআইকে কাজ সম্পাদন করতে 1000 টি থ্রেড (প্রতিটি ছোট ফাইল বা একাধিক কপির একটি অংশ) ব্যবহার করতে এবং 100,000 কাজ দেখার জন্য বলবে:
aws configure set default.s3.max_concurrent_requests 1000
aws configure set default.s3.max_queue_size 100000
এগুলি চালানোর পরে, আপনি নিম্নোক্তভাবে সাধারণ সিঙ্ক কমান্ডটি ব্যবহার করতে পারেন:
aws s3 sync s3://source-bucket/source-path s3://destination-bucket/destination-path
একটি এম 4.এক্সলেজ মেশিনে (এডাব্লুএস - 4 কোর, 16 গিগাবাইট র্যামে) সিঙ্ক / কপির গতি প্রায় 9.5MiB / s থেকে 700 + MiB / s এ চলে গেছে, এর গতি বৃদ্ধি পেয়েছে ডিফল্ট কনফিগারেশন 70x।