हमारे पास कोड का एक परिपक्व निकाय है जो फ़ाइलों से डेटा को डेटाबेस में लोड करता है। कई फ़ाइल प्रारूप हैं; वे सभी निश्चित चौड़ाई वाले क्षेत्र हैं।मैं पर्ल की निश्चित चौड़ाई डेटा की प्रसंस्करण को कैसे बढ़ा सकता हूं?
कोड का हिस्सा पैकेज चर में इनपुट डेटा से फ़ील्ड पढ़ने के लिए पर्ल unpack()
फ़ंक्शन का उपयोग करता है। व्यापार तर्क तब इन क्षेत्रों को 'मानव-पठनीय' तरीके से संदर्भित करने में सक्षम है।
फ़ाइल पढ़ने से पहले फ़ाइल पढ़ने कोड एक प्रारूप विवरण से उत्पन्न होता है।
स्केच रूप में, उत्पन्न कोड इस तरह दिखता है:
while (<>) {
# Start of generated code.
# Here we unpack 2 fields, real code does around 200.
($FIELDS::transaction_date, $FIELDS::customer_id) = unpack q{A8 A20};
# Some fields have leading space removed
# Generated code has one line like this per affected field.
$FIELDS::customer_id =~ s/^\s+//;
# End of generated code.
# Then we apply business logic to the data ...
if ($FIELDS::transaction_date eq $today) {
push @fields, q{something or other};
}
# Write to standard format for bulk load to the database.
print $fh join('|', @fields) . q{\n} or die;
}
कोड रूपरेखा का पता चलता है कि समय की लगभग 35% खोल में बिताया है और अग्रणी अंतरिक्ष पट्टी है। शेष समय डेटा को सत्यापित करने और बदलने और आउटपुट फ़ाइल में लिखने में व्यतीत होता है।
ऐसा प्रतीत होता है कि व्यापार तर्क का कोई भी हिस्सा नहीं है जो रन टाइम के 1-2% से अधिक लेता है।
सवाल यह है कि - क्या हम किसी भी तरह से अनपॅकिंग और स्पेस स्ट्रिपिंग से थोड़ी अधिक गति प्राप्त कर सकते हैं? अधिमानतः FIELDS पैकेज चर को संदर्भित करने वाले सभी कोड को दोबारा प्रतिक्रिया देने के बिना।
संपादित करें:
मामले में यह एक फर्क नहीं पड़ता
$ perl -v
This is perl, v5.8.0 built for PA-RISC1.1
यह जानने में रुचि होगी कि अनपैक के बाईं ओर पैकेज चर की सूची का उपयोग इष्टतम होने की संभावना है। –