-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdb.py
70 lines (51 loc) · 1.43 KB
/
db.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import time
def open(name):
return Database(name)
class Database(object):
def __init__(self, name):
self.name = name
self.data = {}
def read(self, key):
# reading is fast
time.sleep(0.000007)
return self.data.get(key, None)
def write(self, key, value):
# writing is slow
time.sleep(0.00007)
self.data[key] = value
def delete(self, key):
time.sleep(0.000085)
del self.data[key]
def size(self):
return len(self.data)
def log(message):
print(message)
def main():
when = time.time()
log("step 1. Create two books")
book1 = open("book1")
book2 = open("book2")
count = 10000
keys = [f"key-{n}" for n in range(count)]
values = [f"value-{n}" for n in range(count)]
time.sleep(1)
log(f"step 2. Write {count} values to book 1")
for key, value in zip(keys, values):
book1.write(key, value)
time.sleep(1.5)
log(f"step 3. Copy {count} values from book 1 to 2")
for key in keys:
value = book1.read(key)
book2.write(key, value)
time.sleep(1.5)
log(f"step 4. Read {count} values from book 2")
for key in keys:
value = book2.read(key)
time.sleep(1.5)
log("step 5. Clear book 1")
for key in keys:
book1.delete(key)
log("step 6. Done")
print("Ran for", time.time() - when, "seconds")
if __name__ == "__main__":
main()