Sobes.tech
Back to questions
Junior — Middle
60

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

Answer from AI

sobes.tech AI

Для сбора данных из трёх различных сервисов, каждый из которых использует свою отдельную базу данных, можно реализовать следующий подход:

  1. Создать отдельные модули или классы для работы с каждой базой данных, инкапсулируя логику подключения и запросов.
  2. Использовать общий слой агрегации данных, который вызывает методы каждого сервиса и объединяет результаты.
  3. При необходимости — реализовать асинхронный вызов для параллельного получения данных, чтобы повысить производительность.

Пример на Python с использованием SQLAlchemy и asyncio:

import asyncio
from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession
from sqlalchemy.orm import sessionmaker

# Инициализация движков для трёх баз
engine1 = create_async_engine('postgresql+asyncpg://user:pass@host/db1')
engine2 = create_async_engine('postgresql+asyncpg://user:pass@host/db2')
engine3 = create_async_engine('postgresql+asyncpg://user:pass@host/db3')

async def fetch_data_from_db(engine):
    async_session = sessionmaker(engine, class_=AsyncSession, expire_on_commit=False)
    async with async_session() as session:
        result = await session.execute("SELECT * FROM some_table")
        return result.fetchall()

async def gather_all_data():
    results = await asyncio.gather(
        fetch_data_from_db(engine1),
        fetch_data_from_db(engine2),
        fetch_data_from_db(engine3)
    )
    # Объединяем данные по необходимости
    combined = []
    for data in results:
        combined.extend(data)
    return combined

# Запуск
all_data = asyncio.run(gather_all_data())

Такой подход позволяет изолировать работу с каждой базой и эффективно собирать данные в одном месте.