Как лучше всего хранить +3 миллиона записей в Firestore?

Я хочу хранить +3 миллиона записей в своей базе данных Firestore, и я хотел бы знать, как лучше всего это сделать на практике.

На самом деле, я хочу хранить все цены на 30 крипто каждые 15 минут, начиная с 01.01.2020.

Например:

  • Цена ETH на 01.01.2020 в 00:00 = xxx
  • Цена ETH на 01.01.2020 в 00:15 = xxx
  • Цена ETH на 01.01.2020 в 00:30 = xxx
  • ...
  • Цена ETH на 04.09.2022 в 14:15 = xxx

и это за 30 крипто (или больше).

Итак, 120 цен в день умножить на 829 дней умножить на 30 крипто ~= 3M записей

Я думал сохранить это так:

[Коллекция крипто] [Документ крипто] [Коллекция дат] [Документ часа] [Цена]

Я не знаю, правильно ли это, поэтому я прихожу сюда :)

Конечно, целью этой базы данных будет получение ВСЕХ исторических цен валюты, которую я бы выбрал. Это позволит мне сделать статистику и т. д. позже.

Спасибо за вашу помощь

Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
1
0
26
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Для текущей структуры вместо того, чтобы создавать документ каждые 15 минут, вы можете просто создать документ «цены» и сохранить массив формата { time: "00:00", price: 100 }, который будет стоить всего 1 чтение для получения цен данной валюты в день вместо 96.

Кроме того, вы можете создать единую коллекцию «цены» и каждый день создавать документ для каждой валюты. Документ в этой коллекции может выглядеть так:

{
  name: "BTC",
  date: "2022/04/09", // or Firestore timestamp
  prices: [
    { time: "00:05", price: 12.345 },
    { time: "00:10", price: 6.345 },
    { time: "00:15", price: 68.586 },
  ]
}

С помощью этой структуры вы также можете запрашивать курсы конкретной монеты в заданном диапазоне дат. Пример для этого запроса:

const qSnap = await getDocs(
  query(
    collection(db, "prices"),
    where("name", "==", "BTC"),
    where("time", ">=", startDateTimestamp),
    where("time", "<", endDateTimestamp)
  )
);

Другие вопросы по теме