একটি একক ক্ষেত্র রয়েছে এমন একটি টেবিল সহ একটি মাইএসকিউএল ডাটাবেস তৈরি করুন। তারপরে আপনার ফাইলটি ডাটাবেসে আমদানি করুন। এটি একটি নির্দিষ্ট লাইনটি দেখতে খুব সহজ করে তুলবে।
আমি মনে করি না অন্য কিছু দ্রুত হতে পারে (যদি head
এবং tail
ইতিমধ্যে ব্যর্থ হয়)। শেষ পর্যন্ত, যে অ্যাপ্লিকেশনটি লাইনটি সন্ধান করতে চায় তাদের নতুন n
ফাইলগুলি না পাওয়া পর্যন্ত পুরো ফাইলটি অনুসন্ধান করতে হবে n
। কোনও ধরণের অনুসন্ধান ব্যতীত (ফাইলে অফসেট বাইট করার জন্য লাইন-ইনডেক্স) এর চেয়ে ভাল পারফরম্যান্স অর্জন করা যায় না।
এটিতে একটি মাইএসকিউএল ডাটাবেস তৈরি করা এবং এতে ডেটা আমদানি করা কতটা সহজ তা বিবেচনা করে আমার মনে হয় এটি একটি কার্যকর পদ্ধতি।
কিভাবে করতে হবে এখানে আছে:
DROP DATABASE IF EXISTS helperDb;
CREATE DATABASE `helperDb`;
CREATE TABLE `helperDb`.`helperTable`( `lineIndex` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `lineContent` MEDIUMTEXT , PRIMARY KEY (`lineIndex`) );
LOAD DATA INFILE '/tmp/my_large_file' INTO TABLE helperDb.helperTable (lineContent);
SELECT lineContent FROM helperTable WHERE ( lineIndex > 45000000 AND lineIndex < 45000100 );
/tmp/my_large_file
আপনি পড়তে চান ফাইল হবে।
প্রতিটি লাইনে ট্যাব-বিস্মৃত মান সহ একটি ফাইল আমদানির সঠিক বাক্য গঠন, হ'ল:
LOAD DATA INFILE '/tmp/my_large_file' INTO TABLE helperDb.helperTable FIELDS TERMINATED BY '\n' (lineContent);
এর আর একটি বড় সুবিধা হ'ল, যদি আপনি পরে লাইনগুলির অন্য সেটটি বের করার সিদ্ধান্ত নেন তবে আপনাকে আবার প্রক্রিয়াজাতকরণের জন্য কয়েক ঘন্টা অপেক্ষা করতে হবে না (যদি না আপনি অবশ্যই ডাটাবেসটি মুছবেন)।