Мне интересно, следует ли мне добавлять задачи обслуживания в базу данных. поток базы данных или создайте отдельный поток для обслуживания. После вызова функций обслуживания предпочтительно остановить вставку новых данных в базу данных, но я также хочу избежать замедления потока базы данных дополнительными задачами.
В следующем коде для потока базы данных я добавил задачи обслуживания в поток после вставки 10 массовых записей:
Код: Выделить всё
def db_thread():
helpers.get_logger().info("Database thread is started")
last_id = START_READING_ID # Start reading Redis data from the last entry
nb_of_insertion = 0
while True:
# Read new entries from the stream
entries = read_from_redis_for_db_thread(last_id)
all_data = []
start_deletion_message_id = None
for _, messages in entries:
for message_id, data in messages:
# Update last_id to continue from the last read entry
last_id = message_id
all_data.extend(map_all(data))
start_deletion_message_id = message_id
if all_data and start_deletion_message_id:
helpers.get_logger().info(f"Database thread will insert {len(all_data)} rows")
save_all_data(all_data)
helpers.get_logger().info(f"Database thread inserted {len(all_data)} rows")
nb_of_insertion += 1
if nb_of_insertion == 10:
trim_redis(start_deletion_message_id)
helpers.get_logger().info("Rewriting data files start")
data_streaming_service.rewrite_data_file()
helpers.get_logger().info("Rewriting data files end")
helpers.get_logger().info("Expiring snapshots start")
data_streaming_service.clear_snapshots()
helpers.get_logger().info("Expiring snapshots end")
nb_of_insertion = 0
Подробнее здесь: https://stackoverflow.com/questions/791 ... rations-or