使用Python设计日志存储系统
假设我们有一些日志,每个日志包含一个唯一ID和时间戳。时间戳是一个字符串,格式为:年:月:日:时:分:秒,例如2019:01:01:23:59:59。所有字段都是用零填充的十进制数字。
我们必须设计一个日志存储系统来实现以下功能:
void Put(int id, string timestamp): 此函数将接收日志的唯一ID和时间戳,并将日志存储到存储系统中。int[] Retrieve(String start, String end, String granularity): 此函数将返回时间戳在起始时间和结束时间范围内的日志ID。granularity参数指示要考虑的时间级别。例如,start = "2019:01:01:23:59:59",end = "2019:01:02:23:59:59",granularity = "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","Year");retrieve("2018:01:01:01:01:01","2019:01:01:23:00:00","Hour");
那么输出将为[1,2,3],因为我们需要返回2018年和2019年范围内的所有日志;以及[1,2],因为我们需要返回从2018:01:01:01到2019:01:01:23的所有日志,日志3在范围之外。
为了解决这个问题,我们将遵循以下步骤:
定义初始化器。
logs :=新建一个列表定义一个函数
put()。此函数将接收id和timestamp将id和timestamp插入到logs列表的末尾
定义一个函数
retrieve()。此函数将接收s, e, graindex :=一个类似于{'Year':5, 'Month' : 8, 'Day' : 11, 'Hour' : 14, 'Minute' : 17, 'Second' :20}的映射[gra]start := s[从索引0到index]end := e[从索引0到index]返回 (
tidfor eachtid,timestampinlogsifstart <= timestamp[从索引0到index] <= end)
示例
让我们看看下面的实现,以便更好地理解:
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]
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP