Ответы пользователя по тегу Базы данных
  • Есть ли какой-то инструмент выполнения запросов в базу данных с отсрочкой?

    @foterio
    Просто пихайте все в очередь. Затем два пути:
    1. Опрашиваем по таймеру. Каждые пять минут consumer подключается к очереди забирает все, что там есть и затем сохраняет в базу весь этот batch.
    2. Consumer берет из очереди по N сообщений, и вставляет в базу batch.

    И там и там есть гибкость. Сегодня каждые пять минут, а в вечер пятницы-субботы, когда условно нагрузки выше (HoReCa, Delivery-сегмент и прочее), можно изменить на каждые три минуты. Тоже самое и по сообщениям. Сегодня N = 10, а завтра N = 50.
    Ответ написан
    Комментировать
  • Как лучше хранить денежные суммы в Postgres?

    @foterio
    Несколько лет назад, я потратил неделю чтобы гарантировано разобраться и принять правильное решение как хранить деньги в Postrgres.
    3 вариант оказался единственно верным. Хранить деньги нужно в копейках, центах в виде int. Операции сложения вычитания так же необходимо проводить в копейках, центах. И только при выводе денег для конечного пользователя вы приводите его в читабельный вид $10.99
    Ответ написан
    2 комментария
  • Есть ли бесплатное API для получения всех улиц и домов конкретного города?

    @foterio
    Заходим на https://overpass-turbo.eu/
    Город необходимо писать на Английском
    [out:json][timeout:25];
    // fetch area “Samara” to search in
    {{geocodeArea:Samara}}->.searchArea;
    (
      node["addr:housenumber"](area.searchArea);
      way["addr:housenumber"](area.searchArea);
      relation["addr:housenumber"](area.searchArea);
    );
    out body;
    >;
    out skel qt;

    После того, как запрос обработается, нажимаем экспорт и выбираем нужный нам форматы:
    GeoJSON, GPX, KML, сырой OSM

    Я обычно работают с GeoJSON. Там вы получите все дома с улицами (и 5% всякого непонятного шлака или дублей). Шлак необходимо будет отфильтровать, там уже по месту разберетесь. Весить будет от 9 до 20 мегабайт.
    Спорные моменты придется перепроверять через геокодинг яндекса.
    Ответ написан
    Комментировать
  • Добавление нескольких валют?

    @foterio
    Мне тоже нужны были исторические данные по ценам и прайслисты.
    Я сделал сущность Price и таблицу к ней prices, со следующими полями
    currency как ENUM("EURO","USD","CNY","RUR")
    value как int, стоит заметить что мы храним деньги в копейках, центах и прочее
    created_at чтобы в будущем фильтровать их по дате

    Теперь везде, где мне нужна цена, я указываю price_id и все.

    Все расчеты внутри компании мы проводим в Долларах США.
    Там, где нужно выйти за пределы компании, можно запросить для каждой цены курс, так как дата этой цены известна в created_at.
    Ответ написан
  • Как спроектировать приложение? Или как лучше хранить данные?

    @foterio
    Обычно лайки храняться в отдельной таблице в базе данных аля likes
    и каждый лайк выглядит вот так
    {
      // Кто поставил лайк
      user_id: 123,
      // Какому изображению поставили лайк
      image_id: 456,
      // Когда поставили лайк, время в любом удобном для вас формате, (опционально)
      created_at: '2023-05-24 11:53'
    }

    И затем вы идете в likes и запрашиваете лайки для нужного вам изображения
    SELECT user_id, image_id, created_at FROM likes WHERE image_id = 456
    Ответ написан
    Комментировать