কম্পিউটার

পাইথনে ডিজাইন লগ স্টোরেজ সিস্টেম


ধরুন আমাদের কিছু লগ আছে, প্রতিটি লগে একটি অনন্য আইডি এবং টাইমস্ট্যাম্প রয়েছে। টাইমস্ট্যাম্প হল একটি স্ট্রিং যার বিন্যাস রয়েছে:বছর:মাস:দিন:ঘণ্টা:মিনিট:সেকেন্ড, উদাহরণস্বরূপ,2019:01:01:23:59:59৷ সমস্ত ডোমেইন শূন্য-প্যাডেড দশমিক সংখ্যা।

নিম্নলিখিত ফাংশনগুলি বাস্তবায়ন করার জন্য আমাদের একটি লগ স্টোরেজ সিস্টেম ডিজাইন করতে হবে -

  • void Put(int id, স্ট্রিং টাইমস্ট্যাম্প):এটি লগের অনন্য আইডি এবং টাইমস্ট্যাম্প নেবে এবং এটি স্টোরেজ সিস্টেমে লগ সংরক্ষণ করে৷

  • int[] পুনরুদ্ধার (স্ট্রিং শুরু, স্ট্রিং শেষ, স্ট্রিং গ্রানুলারিটি):এটি লগগুলির আইডি ফিরিয়ে দেবে যার টাইমস্ট্যাম্পগুলি শুরু থেকে শেষ পরামিতিগুলির মধ্যে রয়েছে৷ গ্রানুলারিটি প্যারামিটার বিবেচনার জন্য সময় স্তর নির্দেশ করে। উদাহরণস্বরূপ, start ="2019:01:01:23:59:59", end ="2019:01:02:23:59:59", এবং granularity ="দিন", এর মানে হল যে আমাদের খুঁজে বের করতে হবে 1লা জানুয়ারী 2019 থেকে 2শে জানুয়ারী 2019 পর্যন্ত রেঞ্জের মধ্যে লগগুলি৷

সুতরাং, যদি ইনপুট মত হয়

  • put(1, "2019:01:01:23:59:59");

  • put(2, "2019:01:01:22:59:59");

  • put(3, "2018:01:01:00:00:00");

  • পুনরুদ্ধার করুন("2018:01:01:01:01:01","2019:01:01:23:00:00","বছর");

  • পুনরুদ্ধার করুন("2018:01:01:01:01:01","2019:01:01:23:00:00","ঘন্টা");

তাহলে আউটপুট হবে [1,2,3] কারণ আমাদের 2018 এবং 2019 এবং [1,2] রেঞ্জের মধ্যে সমস্ত লগ ফেরত দিতে হবে, কারণ আমাদের 2018:01:01:01 থেকে 2019 পর্যন্ত সমস্ত লগ ফেরত দিতে হবে:01:01:23, যেখানে লগ 3 রেঞ্জের বাইরে রেখে দেওয়া হয়।

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • ইনিশিয়ালাইজার সংজ্ঞায়িত করুন।

  • লগ :=একটি নতুন তালিকা

  • একটি ফাংশন পুট() সংজ্ঞায়িত করুন। এটি আইডি, টাইমস্ট্যাম্প লাগবে

  • লগের শেষে আইডি, টাইমস্ট্যাম্প প্রবেশ করান

  • একটি ফাংশন retrieve() সংজ্ঞায়িত করুন। এর জন্য s, e, gra লাগবে

  • সূচক :=একটি মানচিত্র যেমন {'বছর':5, 'মাস' :8, 'দিন' :11, 'ঘণ্টা' :14, 'মিনিট' :17, 'দ্বিতীয়' :20}[gra]

  • শুরু :=s [সূচী ০ থেকে সূচীতে]

  • শেষ :=e[সূচী ০ থেকে সূচক পর্যন্ত]

  • প্রত্যাবর্তন (প্রতিটি টিডের জন্য tid, লগগুলিতে টাইমস্ট্যাম্প যদি শুরু হয় <=টাইমস্ট্যাম্প[সূচী 0 থেকে সূচক পর্যন্ত] <=শেষ)

উদাহরণ

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

class LogSystem(object):
   def __init__(self):
      self.logs = []
   def put(self, id, timestamp):
      self.logs.append((id, timestamp))
   def retrieve(self, s, e, gra):
      index = {'Year':5, 'Month' : 8, 'Day' : 11, 'Hour' : 14, 'Minute' : 17, 'Second' :20}[gra]
      start = s[:index]
      end = e[:index]
      return (tid for tid, timestamp in self.logs if start <= timestamp[:index] <= end)
ob = LogSystem()
ob.put(1, "2019:01:01:23:59:59")
ob.put(2, "2019:01:01:22:59:59")
ob.put(3, "2018:01:01:00:00:00")
print(list(ob.retrieve("2018:01:01:01:01:01","2019:01:01:23:00:00","Year")))
print(list(ob.retrieve("2018:01:01:01:01:01","2019:01:01:23:00:00","Hour")))

ইনপুট

ob.put(1, "2019:01:01:23:59:59")
ob.put(2, "2019:01:01:22:59:59")
ob.put(3, "2018:01:01:00:00:00")
ob.retrieve("2018:01:01:01:01:01","2019:01:01:23:00:00","Year")
ob.retrieve("2018:01:01:01:01:01","2019:01:01:23:00:00","Hour")

আউটপুট

[1, 2, 3]
[1, 2]

  1. পাইথনে একটি লগ হিস্টোগ্রাম কীভাবে তৈরি করবেন?

  2. ম্যাকের সিস্টেম স্টোরেজ কীভাবে মুছবেন

  3. কিভাবে ম্যাকে সিস্টেম স্টোরেজ কমাতে হয়

  4. SwiftUI এর সাথে কীভাবে ডিজাইন সিস্টেম তৈরি করবেন