Я разработал базу данных с помощью системы ORM для управления данными финансового рынка.
Я использую Python с SQLAlchemy и SQLite.
Мне нужно чтобы получить последнюю запись для каждого актива из таблицы market_data, извлечь ее дату и время, запросить обновленные данные с сервера, а затем вставить новые данные обратно в таблицу market_data. Я планирую выполнять эту операцию несколько раз в минуту, поэтому скорость имеет важное значение. Однако выполнение текущего запроса занимает несколько минут. Я обнаружил, что процесс фильтрации для каждого актива является основным узким местом; без него запрос завершается мгновенно, но возвращает неправильные результаты.
Я думаю, хранить данные каждого актива в отдельной таблице было бы более эффективно, но я не могу создать отдельный класс для каждого актива. поскольку их можно добавлять динамически во время выполнения.
Есть ли способ создать несколько таблиц из одного класса ORM? Альтернативно, есть ли у вас какие-либо предложения по улучшению структуры базы данных для повышения скорости выполнения этого запроса?
Текущие модели базы данных:
class Date(Base):
__tablename__ = "dates"
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True, unique=True)
date: Mapped[datetime.date] = mapped_column(Date, nullable=False, unique=True)
class Time(Base):
__tablename__ = "times"
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True, unique=True)
time: Mapped[datetime.time] = mapped_column(Time, nullable=False, unique=True)
class Region(Base):
__tablename__ = "regions"
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True, unique=True)
name: Mapped[str] = mapped_column(String(30), nullable=False, unique=True)
markets: Mapped[List["Market"]] = relationship()
class Market(Base):
__tablename__ = "markets"
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True, unique=True)
name: Mapped[str] = mapped_column(String(20), nullable=False)
region: Mapped[int] = mapped_column(ForeignKey("regions.id"))
assets: Mapped[List["Asset"]] = relationship()
class Asset(Base):
__tablename__ = "assets"
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True, unique=True)
symbol: Mapped[str] = mapped_column(String(10), nullable=False, unique=True)
name: Mapped[str] = mapped_column(String(30), nullable=True)
market: Mapped[int] = mapped_column(ForeignKey("markets.id"))
class MarketData(Base):
__tablename__ = "market_data"
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True, unique=True)
date: Mapped[int] = mapped_column(ForeignKey("dates.id"))
time: Mapped[int] = mapped_column(ForeignKey("times.id"))
asset: Mapped[int] = mapped_column(ForeignKey("assets.id"))
opening: Mapped[float] = mapped_column(Float, nullable=False)
high: Mapped[float] = mapped_column(Float, nullable=False)
low: Mapped[float] = mapped_column(Float, nullable=False)
closing: Mapped[float] = mapped_column(Float, nullable=False)
volume: Mapped[float] = mapped_column(Float, nullable=True)
Запрос, который я тестировал, чтобы получить последнюю запись x одного актива:
session.query(MarketData).filter_by(asset=asset.id).order_by(desc(MarketData.id)).limit(10).all()
Подробнее здесь: https://stackoverflow.com/questions/792 ... abase-usin
Возможно ли создать отдельную таблицу для каждого объекта в базе данных, используя один класс ORM? ⇐ Python
Программы на Python
1733163887
Anonymous
Я разработал базу данных с помощью системы ORM для управления данными финансового рынка.
Я использую Python с SQLAlchemy и SQLite.
Мне нужно чтобы получить последнюю запись для каждого актива из таблицы market_data, извлечь ее дату и время, запросить обновленные данные с сервера, а затем вставить новые данные обратно в таблицу market_data. Я планирую выполнять эту операцию несколько раз в минуту, поэтому скорость имеет важное значение. Однако выполнение текущего запроса занимает несколько минут. Я обнаружил, что процесс фильтрации для каждого актива является основным узким местом; без него запрос завершается мгновенно, но возвращает неправильные результаты.
Я думаю, хранить данные каждого актива в отдельной таблице было бы более эффективно, но я не могу создать отдельный класс для каждого актива. поскольку их можно добавлять динамически во время выполнения.
Есть ли способ создать несколько таблиц из одного класса ORM? Альтернативно, есть ли у вас какие-либо предложения по улучшению структуры базы данных для повышения скорости выполнения этого запроса?
Текущие модели базы данных:
class Date(Base):
__tablename__ = "dates"
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True, unique=True)
date: Mapped[datetime.date] = mapped_column(Date, nullable=False, unique=True)
class Time(Base):
__tablename__ = "times"
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True, unique=True)
time: Mapped[datetime.time] = mapped_column(Time, nullable=False, unique=True)
class Region(Base):
__tablename__ = "regions"
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True, unique=True)
name: Mapped[str] = mapped_column(String(30), nullable=False, unique=True)
markets: Mapped[List["Market"]] = relationship()
class Market(Base):
__tablename__ = "markets"
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True, unique=True)
name: Mapped[str] = mapped_column(String(20), nullable=False)
region: Mapped[int] = mapped_column(ForeignKey("regions.id"))
assets: Mapped[List["Asset"]] = relationship()
class Asset(Base):
__tablename__ = "assets"
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True, unique=True)
symbol: Mapped[str] = mapped_column(String(10), nullable=False, unique=True)
name: Mapped[str] = mapped_column(String(30), nullable=True)
market: Mapped[int] = mapped_column(ForeignKey("markets.id"))
class MarketData(Base):
__tablename__ = "market_data"
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True, unique=True)
date: Mapped[int] = mapped_column(ForeignKey("dates.id"))
time: Mapped[int] = mapped_column(ForeignKey("times.id"))
asset: Mapped[int] = mapped_column(ForeignKey("assets.id"))
opening: Mapped[float] = mapped_column(Float, nullable=False)
high: Mapped[float] = mapped_column(Float, nullable=False)
low: Mapped[float] = mapped_column(Float, nullable=False)
closing: Mapped[float] = mapped_column(Float, nullable=False)
volume: Mapped[float] = mapped_column(Float, nullable=True)
Запрос, который я тестировал, чтобы получить последнюю запись x одного актива:
session.query(MarketData).filter_by(asset=asset.id).order_by(desc(MarketData.id)).limit(10).all()
Подробнее здесь: [url]https://stackoverflow.com/questions/79242440/is-it-feasible-to-generate-a-separate-table-for-each-entity-in-the-database-usin[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия