-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrandom_seeks.py
84 lines (64 loc) · 2.38 KB
/
random_seeks.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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import random
import time
from pymongo import MongoClient
# Connect to the MongoDB server
client = MongoClient('mongodb://localhost:27017/')
db = client['test_db']
collection = db['test_collection']
# Configuration
num_messages = 10000000 # Total number of messages
access_count = 10000 # Simulate access requests
# Function to initialize the database with sparse messages
def initialize_db(num_messages):
collection.drop() # Clear the collection if it already exists
bulk_operations = []
current_time = time.time()
interval = 86400 * 7 # not important
for i in range(num_messages):
timestamp = current_time - i * interval
message = {
"_id": i + 1,
"timestamp": timestamp,
"message": f"Message {i + 1}"
}
bulk_operations.append(message)
collection.insert_many(bulk_operations)
print(f"Inserted {num_messages} messages.")
# simulate random access
def simulate_access_and_measure_delays(access_count, num_messages):
delays = []
access_ids = random.sample(range(1, num_messages + 1), access_count)
for access_id in access_ids:
start_time = time.time()
result = collection.find_one({"_id": access_id})
end_time = time.time()
delay = (end_time - start_time) * 1000 # Convert to milliseconds
delays.append(delay)
return delays
# simulate accessing index nearby
def simulate_near_index_search(access_count, num_messages):
delays = []
initial_index = 1
access_ids = range(initial_index, initial_index + access_count)
for access_id in access_ids:
start_time = time.time()
result = collection.find_one({"_id": access_id})
end_time = time.time()
delay = (end_time - start_time) * 1000 # Convert to milliseconds
delays.append(delay)
return delays
# Initialize the database with sparse messages
initialize_db(num_messages)
collection.find_one({}) # initial search has delay
# Run the simulation and measure delays
# delays = simulate_access_and_measure_delays(access_count, num_messages)
delays = simulate_near_index_search(access_count, num_messages)
# Analyze the delays
average_delay = sum(delays) / len(delays)
max_delay = max(delays)
min_delay = min(delays)
print(f"Average delay: {average_delay:.5f} ms")
print(f"Max delay: {max_delay:.5f} ms")
print(f"Min delay: {min_delay:.5f} ms")
# Clean up
client.close()