Должны ли задачи обслуживания выполняться в том же потоке, что и операции с базой данных, или в отдельном потоке?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Должны ли задачи обслуживания выполняться в том же потоке, что и операции с базой данных, или в отдельном потоке?

Сообщение Anonymous »

У меня есть приложение, которое получает данные в реальном времени и сохраняет их в поток Redis. Поток базы данных создается после запуска приложения и считывает записи из потока Redis, сохраняя их в базе данных с помощью PySpark, Apache Iceberg и HDFS. После вставки определенного количества строк я хочу выполнить задачи обслуживания базы данных, например перезаписать файлы данных и снимки с истекающим сроком действия.
Мне интересно, следует ли мне добавлять задачи обслуживания в базу данных. поток базы данных или создайте отдельный поток для обслуживания. После вызова функций обслуживания предпочтительно остановить вставку новых данных в базу данных, но я также хочу избежать замедления потока базы данных дополнительными задачами.
В следующем коде для потока базы данных я добавил задачи обслуживания в поток после вставки 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»