В данный момент для хранения данных использую 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к таблиц с количеством элементов от нескольких тысяч до нескольких миллионов. Такой подход имеет право на жизнь вообще?