Ответы пользователя по тегу Базы данных
  • Сопоставление товаров в БД?

    @immelnikoff
    Изучаю БД
    Как я понял, под сопоставлением товаров понимается связь типа "Вместе с товаром A в x% случаев покупают товар B". Если так, то такое "сопоставление" изображается направленным взвешенным и достаточно разреженным (если в случае веса дуги 0% считать, что она отсутствует) графом.
    Почему вы считаете, что таблица N:M будет неудобна для хранения такой структуры?
    id_first (4 байта)
    id_second (4 байта)
    conn_rate (1 байт)
    period_type (1 байт) -- день, неделя, месяц
    date (2 байта) -- дата начала периода

    Далее, делаем индекс B-tree по полям id_first и id_second .
    Пусть, товаров 100 000. Для хранения всех связей за конкретный период понадобится 100 000 * 99 999 ≈ 10 млрд. строк или 90 ГБайт места + примерно столько же для индекса ≈180 ГБайт.
    А периодов за 1 год = 365 + 52 + 12 = 429. Итого, для хранения годичных данных понадобится ≈ 77 ТБайт.
    Понятно, что это нереализуемо.
    Тогда придётся хранить дуги с достаточно большим весом. От этого вряд ли вы что-то потеряете, так как ~ 99-99.99% дуг будут иметь вес x < 0.1%.
    А ещё можно оптимизировать требуемый объем, разделив данную табличку на 3: табличка для дневных данных, табличка для недельных и табличка для месячных.
    Ответ написан
  • Как лучше хранить данные, которые не надо обрабатывать?

    @immelnikoff
    Изучаю БД
    Однозначно, лучше хранить в БД. Когда придет время обрабатывать данные что вы будете делать с файлом? Будете считывать его весь в память, сплитить на список списков, переводить все числовые данные из текста в числа и только потом обрабатывать?
    Это повторное изобретение уже изобретенных механизмов.
    Я уже молчу о том, что хранение данных в файле потребует гораздо больше места на диске. Например, для хранения 7-значных целых чисел в десятичной системе счисления в БД потребуется поле размером в 3 байта (проверьте сами). Для хранения же в файле потребуется 7 байт на число. Увеличение занимаемого места на диске повлечет увеличение нагрузки на СХД (будет дольше происходить чтение) и увеличение расхода памяти. Или ещё, как вы будете осуществлять быстрый поиск/фильтрацию/сортировку данных из файла? В БД для этого существуют индексы.
    Ответ написан
    2 комментария
  • Какой тип баз данных самый быстрый?

    @immelnikoff
    Изучаю БД
    Можно говорить о скорости чтения и о скорости записи.
    Для достижения максимальной скорости в этих двух случаях (в контексте использования НМЖД) существуют два типа БД: строковые и колоночные.
    Строковые БД хранят данные таблиц по строкам, т.е. на дорожку пластины диска последовательно пишется сначала 1-е поле записи, затем 2-е, 3-е и т.д. Затем точно также пишется следующая запись. В данном случае достигается максимальная скорость записи. Но при чтении, даже, если вы запрашиваете одно поле таблицы, в память будут считываться с диска все строки целиком, которые затрагивает запрос.
    Если же нужна максимальная скорость чтения, то выбираем колоночную БД. Данные колоночной БД хранятся на диске по полям (колонкам) и чтение происходит очень быстро.
    Ответ написан
    Комментировать
  • Из каких этапов составит определение домена в БД?

    @immelnikoff
    Изучаю БД
    Смею предположить, что
    1) выбор базового типа данных,
    2) определение ограничений.
    Домен – это множество допустимых значений атрибута. Множество допустимых значений задается базовым типом + дополнительными ограничениями (CHECK CONSTRAINT), например, 5 < atr < 50.

    Кстати, откуда вопросики?
    Ответ написан
    5 комментариев
  • Литература по базам данных?

    @immelnikoff
    Изучаю БД
    Могу посоветовать две очень годные книги для тех, кто действительно хочет разбираться в БД:
    - Системы баз данных. Полный курс, Гектор Гарсиа-Мол...,
    - MySQL по максимуму, Шварц Бэрон, Зайцев Петр, Ткач....
    Книги непростые и начинать нужно не с них.
    Начинать нужно с любой книжки по синтаксису и основ, типа нормальных форм.
    Переходить к данным книгам можно, когда вы освоите синтаксис, разберетесь с устройством всех типов данных и сами сможете сконструировать примеры:
    - таблицы, находящейся в 1НФ, но не в 2НФ,
    - таблицы, находящейся в 2НФ, но не в 3НФ,
    - таблицы, находящейся в 3НФ, но не в НФБК,
    - таблицы, находящейся в НФБК, но не в 4НФ,
    - таблицы, находящейся в 4НФ, но не в 5НФ,
    - таблицы, находящейся в 5НФ, но не в ДКНФ,
    - таблицы, находящейся в ДКНФ, но не в 6НФ.
    Ответ написан
    Комментировать
  • Какую базу данных выбрать?

    @immelnikoff
    Изучаю БД
    По сути, почти любую СУБД можно настроить для этих целей.
    Возьмите, например, MySQL 8.0. Ставите сервер MySQL и устанавливаете наинизший уровень изолированности транзакций – READ UNCOMMITED – для отключения MVCC и, соответственно, повышения конкурентности. Этот сервер будет принимать данные на запись.
    Ставите ещё один сервер MySQL – реплику (основной сервер, соответственно, – мастер). К нему будут делаться запросы на чтение.
    Ответ написан
    1 комментарий