Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでログストレージシステムを設計する


いくつかのログがあり、各ログに一意のIDとタイムスタンプが含まれているとします。タイムスタンプは、年:月:日:時:分:秒の形式の文字列です。たとえば、2019:01:01:23:59:59です。すべてのドメインはゼロが埋め込まれた10進数です。

次の機能を実装するログストレージシステムを設計する必要があります-

  • void Put(int id、string timestamp):これは、ログの一意のIDとタイムスタンプを取得し、ログをストレージシステムに保存します。

  • int [] Retrieve(String start、String end、String Granularity):これは、タイムスタンプが開始パラメーターから終了パラメーターの範囲内にあるログのIDを返します。粒度パラメーターは、検討する時間レベルを示します。たとえば、start ="2019:01:01:23:59:59"、end ="2019:01:02:23:59:59"、粒度="Day"の場合、これは、 2019年1月1日から2019年1月2日までの範囲内のログ。

したがって、入力が次のような場合

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

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

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

  • retrieve( "2018:01:01:01:01:01"、 "2019:01:01:23:00:00"、 "年");

  • retrieve( "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は範囲外に残されています。

これを解決するには、次の手順に従います-

  • イニシャライザを定義します。

  • ログ:=新しいリスト

  • 関数put()を定義します。これにはID、タイムスタンプが必要です

  • ログの最後にID、タイムスタンプを挿入

  • 関数retrieve()を定義します。これにはs、e、graが必要です

  • index:={'Year':5、'Month':8、'Day':11、'Hour':14、'Minute':17、'Second':20} [gra]

    のようなマップ
  • start:=s[インデックス0からインデックスへ]

  • end:=e[インデックス0からインデックスへ]

  • return(各tidの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. Macでシステムストレージを減らす方法

    Macは、生産性と携帯性のためにコンピューターを購入しようとしているユーザーにとって、最も人気のある選択肢です。ただし、Macユーザーが最近明らかにした問題は、システムストレージが通常よりも多くのスペースを占有し、ユーザーのストレージ不足を引き起こしていることでした。 この記事では、いくつかの不要なものを取り除き、いくつかの設定を再構成することにより、システムストレージを削減します。最後まで正確にフォローしてください。 macOSでのシステムストレージのクリア このタスクは段階的に進めていきますので、デバイスのシステムストレージを削減できるように、すべての手順を慎重に実行してください。

  2. SwiftUIでデザインシステムを構築する方法

    1 つの製品をサポートする設計システムを構築するのは簡単ではありません。スケーラビリティのために堅牢で柔軟でなければなりません。困難ではありますが、多くの優れたリソースが、チームが視覚的にもプログラム的にも優れたシステムを構築するのに役立つ有用な原則とアプローチを共有しています。この記事は、SwiftUI で優れたシステムを構築することに焦点を当てることで、彼らの肩に寄り添い、手付かずの地に貢献しようとします。 . なぜこの記事を書くのか ニューヨークの ITP での最初の夏に、幸運にも Line Break Studio で iOS 開発者のインターンとして働く機会がありました。私が割り当