এটিতে হাজার হাজার ফাইল সহ আমার একটি বালতি রয়েছে। আমি কীভাবে বালতিটি অনুসন্ধান করতে পারি? এমন কোনও সরঞ্জাম আছে যা আপনি সুপারিশ করতে পারেন?
এটিতে হাজার হাজার ফাইল সহ আমার একটি বালতি রয়েছে। আমি কীভাবে বালতিটি অনুসন্ধান করতে পারি? এমন কোনও সরঞ্জাম আছে যা আপনি সুপারিশ করতে পারেন?
উত্তর:
আসল বিষয়বস্তু অজানা হওয়ায় এস 3 এর স্থানীয় "অনুসন্ধান এই বালতি" নেই - এছাড়াও, যেহেতু এস 3 কী / মান ভিত্তি করে অনেকগুলি নোডকে একবারে অ্যাক্সেস করার কোনও নেটিভ উপায় নেই যা আরও একটি traditionalতিহ্যবাহী ডেটাস্টোর প্রস্তাব দেয় (SELECT * FROM ... WHERE ...)
(একটি এসকিউএল মধ্যে মডেল).
আপনাকে যা করতে হবে তা হচ্ছে ListBucket
বালতিতে অবজেক্টগুলির একটি তালিকা পাওয়ার জন্য সঞ্চালন করা এবং তারপরে আপনি প্রয়োগ করেন এমন কাস্টম অপারেশন করে প্রতিটি আইটেম পুনরাবৃত্তি - যা আপনার অনুসন্ধান।
এখানে যোগ করার জন্য একটি নোট: এটি এখন 3 বছর পরে, তবুও আপনি "একটি এস 3 বালতি কীভাবে অনুসন্ধান করবেন" টাইপ করলে গুগলে এই পোস্টটি শীর্ষে থাকে।
সম্ভবত আপনি আরও জটিল কিছু সন্ধান করছেন, তবে আপনি যদি শিরোনাম অনুসারে কোনও বস্তু (ফাইল) কীভাবে সন্ধান করতে পারেন তা সন্ধানের জন্য এখানে অবতরণ করেন তবে এটি উন্মাদ সহজ:
বালতিটি খুলুন, ডানদিকে "কিছুই নয়" নির্বাচন করুন এবং ফাইলের নাম টাইপ করা শুরু করুন।
http://docs.aws.amazon.com/AmazonS3/latest/UG/ListingObjectsinaBucket.html
AWS CLI ব্যবহার করে ফাইলের নাম অনুসন্ধান করার জন্য এখানে একটি ছোট এবং কুরুচিপূর্ণ উপায় :
aws s3 ls s3://your-bucket --recursive | grep your-search | cut -c 32-
cut -c 32-
আউটপুট থেকে টাইমস্ট্যাম্প এবং ফাইল আকারের তথ্য কেবল ছাপ দেয়, যা আমার সিস্টেমে 32 টি অক্ষর গ্রহণ করে। আপনার এটির দরকার নেই তবে আপনি যদি আউটপুটটিকে অন্য কমান্ডে পাইপ করেন তবে এটি "ক্লিন" আউটপুট রাখা সুবিধাজনক হতে পারে।
include/exclude
। সুতরাং,aws s3 ls s3://bucket --recursive --exclude '*' --include 'myfile*'
(কমপক্ষে) দুটি পৃথক ব্যবহারের কেস রয়েছে যা "বালতি অনুসন্ধান করুন" হিসাবে বর্ণনা করা যেতে পারে:
ভিতরে কিছু অনুসন্ধান করুন বালতি সংরক্ষিত প্রত্যেক বস্তুর; এটি সেই বালতির সমস্ত বস্তুর (যেমন, পাঠ্য ফাইলগুলি) ইত্যাদির জন্য একটি সাধারণ ফর্ম্যাট ধারন করে থাকে এর মতো কিছু করার জন্য, আপনি কোডি কফলান যা উত্তর দিয়েছিলেন তা করতে বাধ্য হন। অ্যাডাব্লুএস এস 3 ডক্সের জাভা জন্য অ্যাডাব্লুএস এসডিকে দিয়ে কীভাবে এটি করা যায় তা উদাহরণ কোড রয়েছে: জাভা জন্য অ্যাডাব্লুএস এসডিকে ব্যবহার করে তালিকা কী (সেখানে আপনি পিএইচপি এবং সি # উদাহরণও দেখতে পাবেন)।
তালিকার আইটেম সেই বালতিতে থাকা অবজেক্ট কীগুলির মধ্যে কোনও কিছুর সন্ধান করুন ; এস 3 আছে আছে আংশিক এই জন্য সমর্থন, প্রিফিক্স সঠিক মিল + একটি বিভেদক পর ম্যাচ ধ্বসে যার ফলে আকারে। এটি ডাব্লুএস এস 3 বিকাশকারী গাইডে আরও বিশদে ব্যাখ্যা করা হয়েছে । এটি উদাহরণস্বরূপ, অবজেক্ট কীগুলির মতো কিছু ব্যবহার করে "ফোল্ডারগুলি" প্রয়োগ করতে সহায়তা করে
ফোল্ডার / subfolder / file.txt যাওআপনি যদি এই কনভেনশনটি অনুসরণ করেন তবে বেশিরভাগ এস 3 জিইউআই (যেমন এডাব্লুএস কনসোল) আপনাকে আপনার বালতির ফোল্ডার ভিউ দেখাবে।
এডাব্লুএস এসকিউএল এর সাথে এস 3 বালতিগুলির অনুসন্ধানের জন্য একটি নতুন পরিষেবা প্রকাশ করেছে: অ্যামাজন অ্যাথেনা https://aws.amazon.com/athena/
একাধিক বিকল্প রয়েছে, কোনওটিই সহজ "এক শট" পূর্ণ পাঠ্য সমাধান নয়:
মূল নামের প্যাটার্ন অনুসন্ধান : কিছু স্ট্রিং দিয়ে শুরু হওয়া কীগুলির সন্ধান করা- যদি আপনি কীগুলির নাম সাবধানে ডিজাইন করেন তবে আপনার পরিবর্তে দ্রুত সমাধান হতে পারে।
কীগুলির সাথে সংযুক্ত মেটাডেটা অনুসন্ধান করুন : এডাব্লুএস এস 3 এ কোনও ফাইল পোস্ট করার সময় আপনি সামগ্রীটি প্রক্রিয়া করতে পারেন, কিছু মেটা তথ্য বের করতে পারেন এবং কাস্টম শিরোনাম আকারে এই মেটা তথ্যটি কীতে সংযুক্ত করতে পারেন। এটি আপনাকে সম্পূর্ণ সামগ্রী আনার প্রয়োজন ছাড়াই মূল নাম এবং শিরোনাম আনতে সহায়তা করে allows অনুসন্ধানটি ধারাবাহিকভাবে করতে হবে, এর জন্য কোনও "বর্গফুট মত" অনুসন্ধান বিকল্প নেই। বড় ফাইলগুলির সাহায্যে এটি প্রচুর নেটওয়ার্ক ট্র্যাফিক এবং সময় সাশ্রয় করতে পারে।
সিম্পলডিবিতে মেটাডেটা সংরক্ষণ করুন : পূর্ববর্তী পয়েন্ট হিসাবে, তবে সিম্পলডিবিতে মেটাডেটা সংরক্ষণ করার সাথে। এখানে আপনার সিলেক্ট স্ট্যান্ডার্ড স্টেটমেন্টের মতো রয়েছে। বড় ডেটা সেটগুলির ক্ষেত্রে আপনি সিম্পলডিবি সীমাতে আঘাত হানতে পারেন, যা কাটিয়ে উঠতে পারে (একাধিক সিম্পলডিবি ডোমেন জুড়ে পার্টিশন মেটাডেটা), তবে আপনি যদি সত্যিই দূরে যান তবে আপনাকে অন্য মেটিডেটা টাইপের ডাটাবেস ব্যবহার করতে হবে।
বিষয়বস্তুর সিক্যুয়াল পূর্ণ পাঠ্য অনুসন্ধান - সমস্ত কীগুলি একে একে প্রক্রিয়াজাত করা হচ্ছে। খুব ধীর, যদি আপনার প্রক্রিয়া করার জন্য খুব বেশি কী থাকে।
আমরা কয়েক বছর ধরে একটি ফাইলের 1440 সংস্করণ (প্রতি মিনিটে এক) সঞ্চয় করে রাখছি, সংস্করণযুক্ত বালতি ব্যবহার করে এটি সহজেই সম্ভব। তবে কিছু পুরানো সংস্করণ পেতে সময় লাগে, কারণ একের পরের সংস্করণ অনুসারে সংস্করণে যেতে হয়। একসময় আমি রেকর্ড সহ সহজ সিএসভি সূচক ব্যবহার করি, প্রকাশনার সময় এবং সংস্করণ আইডি দেখায়, আমি পুরানো সংস্করণে না গিয়ে দ্রুত লাফিয়ে উঠতে পারি।
আপনি দেখতে পাচ্ছেন, এডাব্লুএস এস 3 সম্পূর্ণ টেক্সট অনুসন্ধানের জন্য ডিজাইন করা নিজস্ব নয়, এটি সাধারণ স্টোরেজ পরিষেবা।
সরাসরি এডাব্লুএস কনসোল বালতি ভিউতে।
যখন আপনার কাছে কয়েক হাজার বা কয়েক মিলিয়ন ফাইল রয়েছে তখন প্রয়োজনীয় ফাইলগুলি পাওয়ার অন্য উপায় হ'ল বিতরণকৃত অনুলিপি ব্যবহার করে সেগুলি অন্য কোনও স্থানে অনুলিপি করা । আপনি ইএমআর এ একটি হ্যাডোপ জব এ চালান । এডাব্লুএস সম্পর্কে দুর্দান্ত জিনিস হ'ল তারা তাদের কাস্টম এস 3 সংস্করণ এস 3-ডিস্ট-সিপি সরবরাহ করে । এটি আপনাকে গ্রুপবাইয়ের ক্ষেত্রে নিয়মিত এক্সপ্রেশন ব্যবহার করে ফাইলগুলি গ্রুপ করার অনুমতি দেয়। আপনি এটি ব্যবহার করতে পারেন উদাহরণস্বরূপ EMR এর একটি কাস্টম ধাপে
[
{
"ActionOnFailure": "CONTINUE",
"Args": [
"s3-dist-cp",
"--s3Endpoint=s3.amazonaws.com",
"--src=s3://mybucket/",
"--dest=s3://mytarget-bucket/",
"--groupBy=MY_PATTERN",
"--targetSize=1000"
],
"Jar": "command-runner.jar",
"Name": "S3DistCp Step Aggregate Results",
"Type": "CUSTOM_JAR"
}
]
আপনি যদি উইন্ডোজে থাকেন এবং কোনও ভাল grep
বিকল্প খুঁজে না পাওয়ার জন্য সময় না পান তবে দ্রুত এবং নোংরা উপায়টি হ'ল:
aws s3 ls s3://your-bucket/folder/ --recursive > myfile.txt
এবং তারপরে myfile.txt এ একটি দ্রুত অনুসন্ধান করুন
"ফোল্ডার" বিট .চ্ছিক।
পিএস যদি আপনার ডাব্লুএসএস সিএলআই ইনস্টল না থাকে - চকোলেটি প্যাকেজ ম্যানেজারটি ব্যবহার করে এখানে একটি লাইনার রয়েছে
choco install awscli
পিপিএস যদি আপনার চকলেট প্যাকেজ ম্যানেজার না থাকে - এটি পান! উইন্ডোজ আপনার জীবন 10x আরও ভাল পাবেন। (আমি কোনওভাবেই চকোলেটির সাথে সম্পৃক্ত নই, তবে ওহে, এটি অবশ্যই হওয়া উচিত)।
আপনি এডাব্লুএসে রয়েছেন এমনটি দেওয়া ... আমি মনে করি আপনি তাদের ক্লাউড অনুসন্ধান সরঞ্জামগুলি ব্যবহার করতে চাইবেন। আপনি তাদের পরিষেবাতে যে ডেটা অনুসন্ধান করতে চান তা রাখুন ... এটি এস 3 কীগুলিতে নির্দেশ করুন।
অন্য বিকল্পটি হ'ল আপনার ওয়েব সার্ভারে এস 3 বালতিটি মিরর করা এবং স্থানীয়ভাবে ট্র্যাভার করা। কৌশলটি হ'ল স্থানীয় ফাইলগুলি খালি এবং কেবল একটি কঙ্কাল হিসাবে ব্যবহৃত হয়। বিকল্পভাবে, স্থানীয় ফাইলগুলিতে দরকারী মেটা ডেটা থাকতে পারে যা আপনার সাধারণত S3 (যেমন ফাইলাইজ, মাইমটাইপ, লেখক, টাইমস্ট্যাম্প, ইউইড) থেকে নেওয়া উচিত। আপনি ফাইলটি ডাউনলোড করার জন্য যখন কোনও URL সরবরাহ করেন, স্থানীয়ভাবে অনুসন্ধান করুন এবং এস 3 ঠিকানার লিঙ্ক সরবরাহ করুন।
স্থানীয় ফাইল ট্র্যাভার্সিং সহজ এবং এস 3 পরিচালনার জন্য এই পদ্ধতির ভাষা অজ্ঞায়নের। স্থানীয় ফাইল ট্র্যাভার্সিং বালতি বিষয়বস্তু প্রমাণীকরণ এবং প্রমাণ পেতে ফাইল বা ডেটাবেস বা বিলম্বিত দূরবর্তী API কলগুলি তৈরি করতে বিলম্ব করতে এড়াতে সহায়তা করে avo
আপনি ব্যবহারকারীদের এফটিপি বা এইচটিটিপি এর মাধ্যমে আপনার সার্ভারে সরাসরি ফাইলগুলি আপলোড করার অনুমতি দিতে পারেন এবং তারপরে কোনও আকারের ফাইলের জন্য ডিরেক্টরিগুলির পুনরাবৃত্তি করে নতুন এবং আপডেট হওয়া ফাইলগুলির একটি ব্যাচটি পিক সময়গুলিতে অ্যামাজনে স্থানান্তর করতে পারেন। অ্যামাজনে ফাইল স্থানান্তর সমাপ্তির পরে, ওয়েব সার্ভার ফাইলটি একই নামের একটি খালি দিয়ে প্রতিস্থাপন করুন। কোনও স্থানীয় ফাইলের যদি কোনও ফাইলাইজ থাকে তবে সরাসরি এটি পরিবেশন করুন কারণ এটির ব্যাচ স্থানান্তরের অপেক্ষায়।
আমি যেভাবে এটি করেছি তা হল: আমার কাছে এস 3-এ হাজার হাজার ফাইল রয়েছে। আমি তালিকায় একটি ফাইলের বৈশিষ্ট্য প্যানেলটি দেখেছি। আপনি সেই ফাইলটির ইউআরআই দেখতে পাচ্ছেন এবং আমি এটি ব্রাউজারে আটকানো কপি করেছিলাম - এটি একটি পাঠ্য ফাইল এবং এটি দুর্দান্তভাবে রেন্ডার হয়েছিল। এখন আমি ইউআরএলটিতে ইউইডটি প্রতিস্থাপন করেছি যে আমার হাতে থাকা উউইড ছিল এবং সেখানে ফাইলটি বুম করছে।
আমি চাই যে AWS ফাইল অনুসন্ধান করার আরও ভাল উপায় ছিল তবে এটি আমার জন্য কার্যকর হয়েছিল।
এই আদেশটি ব্যবহার করে দেখুন:
aws s3api list-objects --bucket your-bucket --prefix sub-dir-path --output text --query 'Contents[].{Key: Key}'
তারপরে আপনি এটিকে একটি গ্রেপের মধ্যে পাইপ করতে পারেন যাতে নির্দিষ্ট ফাইলের প্রকারের সাথে আপনি যা চান তা করতে পারেন।
--output text
আউটপুটটি JSON ইত্যাদি নয়, সরল পাঠ্য হবে এবং এটি --query 'Contents[].{Key: Key, Size: Size}'
কেবলমাত্র নাম এবং ফাইলের আকারের জন্য তালিকাটির আউটপুট ফিল্টার করে specif এটি অনুসন্ধান Key: Key
বা পছন্দ করে না ।
এটি সামান্য পুরানো থ্রেড - তবে সম্ভবত এখনও কেউ অনুসন্ধান করে এমন ব্যক্তিকে সহায়তা করুন - আমিই সেই বছরটি অনুসন্ধান করি।
সমাধান " AWS অ্যাথেনা " হতে পারে যেখানে আপনি এই জাতীয় ডেটা অনুসন্ধান করতে পারেন
'SELECT user_name FROM S3Object WHERE cast(age as int) > 20'
বর্তমানে 1 টিবি ডেটার জন্য মূল্য 5 ডলার - সুতরাং উদাহরণস্বরূপ, যদি আপনার কোয়েরিটি 1 টিবি ফাইলের চেয়ে 3 বার আপনার ব্যয় হয় 15 ডলার হয় - তবে উদাহরণস্বরূপ যদি "রূপান্তরিত কলামার ফর্ম্যাটে" আপনি যা পড়তে চান সেখানে কেবল 1 কলাম আছে, আপনি 1 প্রদান করবেন / 3 দামের অর্থ $ 1.67 / টিবি।
এই ডকুমেন্টেশন একবার দেখুন: http://docs.aws.amazon.com/AWSSDKforPHP/latest/index.html#m=amazons3/get_object_list
নামগুলি ফিল্টার করার জন্য আপনি পার্ল-সামঞ্জস্যপূর্ণ নিয়মিত এক্সপ্রেশন (পিসিআরই) ব্যবহার করতে পারেন।
আমার বালতিতে নিদর্শনগুলি খুঁজে পেতে আমি নীচের মতো কিছু করেছি
def getListOfPrefixesFromS3(dataPath: String, prefix: String, delimiter: String, batchSize: Integer): List[String] = {
var s3Client = new AmazonS3Client()
var listObjectsRequest = new ListObjectsRequest().withBucketName(dataPath).withMaxKeys(batchSize).withPrefix(prefix).withDelimiter(delimiter)
var objectListing: ObjectListing = null
var res: List[String] = List()
do {
objectListing = s3Client.listObjects(listObjectsRequest)
res = res ++ objectListing.getCommonPrefixes
listObjectsRequest.setMarker(objectListing.getNextMarker)
} while (objectListing.isTruncated)
res
}
বড় বালতিগুলির জন্য এটি অনেক বেশি সময় ব্যয় করে যেহেতু সমস্ত বস্তুর সংক্ষিপ্তসারগুলি আউ দ্বারা ফিরিয়ে দেওয়া হয় এবং এটি কেবল উপসর্গ এবং ডিলিমিটারের সাথে মেলে না। আমি পারফরম্যান্সের উন্নতির জন্য উপায়গুলি খুঁজছি এবং এখনও অবধি আমি খুঁজে পেয়েছি যে কীগুলির নাম রাখা উচিত এবং সেগুলি বালতিগুলিতে সঠিকভাবে সংগঠিত করা উচিত।
আমিও একই সমস্যার মুখোমুখি হয়েছি। এস 3-তে অনুসন্ধান করা বর্তমান পরিস্থিতির চেয়ে আরও সহজ হওয়া উচিত। এজন্য, আমি এস 3-তে অনুসন্ধানের জন্য এই ওপেন সোর্স সরঞ্জামটি কার্যকর করেছি।
SSEARCH সম্পূর্ণ ওপেন সোর্স এস 3 অনুসন্ধান সরঞ্জাম। এটি সর্বদা কার্যকরী করা গুরুত্বপূর্ণ বিষয়টি মনে রেখে বাস্তবায়ন করা হয়েছে এবং মানদণ্ড অনুসারে এটি বালতিটি অনুসন্ধান করে যা সেকেন্ডের মধ্যে ~ 1000 ফাইলগুলিতে থাকে।
ইনস্টলেশন সহজ। আপনি কেবল ডকার-রচনা ফাইলটি ডাউনলোড করে এটি চালিয়ে যাচ্ছেন
docker-compose up
SSEARCH শুরু হবে এবং আপনি যে কোনও বালতিতে যে কোনও কিছু অনুসন্ধান করতে পারেন।
২০২০-তে দ্রুত এগিয়ে যাওয়া এবং নিম্নোক্ত কমান্ডটি আমাদের ২ফা হিসাবে আওস-ওক্টা ব্যবহার করে, যখন এই নির্দিষ্ট বালতির (+270,000) সমস্ত বস্তু এবং ফোল্ডারগুলিতে পুনরাবৃত্তি করতে জাহান্নামের চেয়ে ধীরে ধীরে কাজ করে।
aws-okta exec dev -- aws s3 ls my-cool-bucket --recursive | grep needle-in-haystax.txt
এস 3 বালতিটি জিজ্ঞাসা করতে অ্যামাজন অ্যাথেনা ব্যবহার করুন। এছাড়াও, অ্যামাজন ইলাস্টিক অনুসন্ধানে ডেটা লোড করুন। আশাকরি এটা সাহায্য করবে.
কোনও প্রযুক্তিগত উত্তর নয়, তবে আমি একটি অ্যাপ্লিকেশন তৈরি করেছি যা ওয়াইল্ডকার্ড অনুসন্ধানের অনুমতি দেয়: https://bucketsearch.net/
এটি আপনার বালতিটিকে তাত্পর্যপূর্ণভাবে সূচকযুক্ত করবে এবং তারপরে ফলাফলগুলি অনুসন্ধান করার অনুমতি দেবে।
এটি ব্যবহারের জন্য বিনামূল্যে (দানওয়্যার)।
স্থিতি 2018-07: আমাজনের সিএসভি এবং জসন ফাইলগুলির জন্য অনুসন্ধানের মতো দেশীয় স্ক্যুয়াল রয়েছে!