@Ne7Le4Der

Какую базу и способ хранения выбрать?

В данный момент для хранения данных использую PostgreSQL имею вот такие модели (структуру генерит ORM, но я думаю набор полей понятен):
@Table({
    tableName: 'instruments',
    timestamps: true
})
export class Instrument extends Model {
    @Column({
        type: DataType.UUID,
        defaultValue: UUIDV4,
        primaryKey: true,
        unique: true,
        allowNull: false
    })
    id: string;

    @Column({
        type: DataType.ENUM,
        allowNull: false,
        values: Object.values(CandleResolution)
    })
    interval: CandleResolution
    
    @Column({
        type: DataType.INTEGER
    })
    ticker: string

    @HasMany(() => Candle)
    candles: Candle[]
}


@Table({
    tableName: 'candles',
    timestamps: true
})
export class Candle extends Model {
    @Column({
        type: DataType.UUID,
        defaultValue: UUIDV4,
        primaryKey: true,
        unique: true,
        allowNull: false
    })
    id: string;

    @Column({
        type: DataType.FLOAT,
        allowNull: false
    })
    open: number;

    @Column({
        type: DataType.FLOAT,
        allowNull: false
    })
    close: number;

    @Column({
        type: DataType.FLOAT,
        allowNull: false
    })
    high: number;

    @Column({
        type: DataType.FLOAT,
        allowNull: false
    })
    low: number;

    @Column({
        type: DataType.FLOAT,
        allowNull: false
    })
    volume: number;

    @Index('time')
    @Column({
        type: DataType.DATE,
        allowNull: false
    })
    time: Date;

    @BelongsTo(() => Instrument)
    instrument: Instrument

    @ForeignKey(() => Instrument)
    instrument_id: string
}


т.е. связь обычная один ко многим. В таблице candles сейчас порядка 5,5кк записей, вес около 1гб, работает шустро. Я хочу выкачать с биржи все интересующие меня инструменты с нужными интервалами, по моим подсчётам это около 140кк записей, что в 25 раз больше имеющегося.

Вопрос: вывезет ли PostreSQL такой объём, если я ничего не буду менять? (предполагаю, что ответ нет, отсюда следующие вопросы).
Вывезет ли оно вообще подобный объём данных, если поменять структуру\использовать какие-нибудь встроенные механизмы оптимизации? (какие, куда копать?)
Или она вообще не предназначена для таких объёмов и нужно смотреть в сторону специализированных под это хранилищ? (каких?)

Дёргать буду маленькими кусками, но на заполнение работает скрипт, который ежедневно доливает новые данные.

Очень интересен реальный опыт, искал на хабре, но, к сожалению, подобного не нашел. Если у кого-нибудь есть опыт, идеи или статьи под рукой - с удовольствием ознакомлюсь

UPD: Ещё рассматривал вариант создать под каждую пару инструмент_таймфрейм отдельную таблицу (SBER_1h, SBER_day и т.д.). Но тогда в базе будет порядка 10к таблиц с количеством элементов от нескольких тысяч до нескольких миллионов. Такой подход имеет право на жизнь вообще?
  • Вопрос задан
  • 119 просмотров
Решения вопроса 2
Melkij
@Melkij
PostgreSQL DBA
База на 30гб? Какая смешная кроха.

Да сгенерируйте себе синтетических данных и поиграйтесь с ними. Я понимаю неудобно на локальной машине щупать базу в десяток террабайт - но лишь только 30гб не проблема просто сгенерировать и посмотреть вживую.
Ответ написан
Вопрос: вывезет ли PostreSQL такой объём, если я ничего не буду менять? (предполагаю, что ответ нет, отсюда следующие вопросы).

В теории выдержит. Лишь бы железа хватило (ну мало ли у тебя там 5 гигов диск)

Но вообще раз это биржа - возможно есть смысл хранить информацию о цене каждого инструмента в базе с временными рядами. А метаданные - в обычном реляционном виде.
В рамках постгреса - TimescaleDB
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы