• Как правильнее заносить и хранить большой объем данных в бд?

    darthunix
    @darthunix
    Знаю PostgreSQL, Ubuntu, DICOM и медицину.
    Я бы использовал PostgreSQL, потому что знаю его) А детальнее - вначале создал бы собственный тип, описывающий цену в момент времени, состоящий из времени и цены. Потом просто создал бы таблицу товаров, в которой бы была колонка с массивом этого нового типа цен в момент времени. И при каждой новой загрузке информации я бы раскладывал для подходящего товара данные о времени и цене в этот массив. Ну и добавил бы первичный ключ по товарам и gin индекс по массиву временных точек цен. По идее в таком виде таблица не станет очень большой и вы сохраните возможность быстро проводить агрегацию по данным. Ну и данные будет легко шардировать, если потребуется.
    Ответ написан
    Комментировать
  • Где ошибка в запросе?

    darthunix
    @darthunix
    Знаю PostgreSQL, Ubuntu, DICOM и медицину.
    Вы делаете кросс джоин, получая все возможные комбинации (12х12=144). Вам нужно сделать соединение по номерам строк. У меня постгреса под рукой нет, но на память типо такого
    with t1_rows as (
      select row_number() over(), items from table1
    ),
    t2_rows as (
      select row_number() over(), items from table2
    )
    select a.items, b.items from t1_rows a
    full join t2_rows b using (row_number)
    Ответ написан
  • Как сделать такой MySQL select из трех таблиц?

    darthunix
    @darthunix
    Знаю PostgreSQL, Ubuntu, DICOM и медицину.
    Вы бы структуру таблиц дали и связи, а то без этого помочь вам затруднительно.
    Ответ написан
  • Как правильно хранить/выбирать данные в PostgreSQL?

    darthunix
    @darthunix
    Знаю PostgreSQL, Ubuntu, DICOM и медицину.
    Мне кажется, что все проблемы от того, что вы храните совершенно разные сущности в одной колонке. До тех пор, пока вы их не разложите по разным местам, вы будете страдать. И даже регулярки/флаги/попытки сохранить числа отдельно от строк проблему не решат на 100% - вы сами привели пример, когда не ясно, сумма лежит в строке или телефон. У вас что-то не так в самой схеме хранения.... Предметную область знаете только вы, так что вам решать, что и где)
    Если это динамические атрибуты, то возможно стоит посмотреть в сторону jsonb, залитого gin. Но нужно детальнее понять, какая аналитика будет над этими полями и почему важны именно числа.
    Ответ написан
    Комментировать
  • Нормально ли хранить логи в основной базе?

    darthunix
    @darthunix
    Знаю PostgreSQL, Ubuntu, DICOM и медицину.
    Ну если основная база от логов сильно распухает и транзакции вам для них особо не нужны - вынесите логи через plproxy в другую базу (на другом диске/сервере - не важно). Храните их в нормализованном виде и анализируйте, будет вам счастье. И основная база будет компактной, и нагрузка на неё будет меньше, и логи хранятся в таком же PostgreSQL (чем меньше зоопарк, тем проще с ним жить)
    Ответ написан
    Комментировать
  • Какие есть варианты разработки базы данных?

    darthunix
    @darthunix
    Знаю PostgreSQL, Ubuntu, DICOM и медицину.
    Я рекомендую использовать pyrseas. В нем dbtoyaml парсит схему базы с поддержкой всех самобытных фишек PostgreSQL в yaml файл, который вы помещаете в систему контроля версий. В отличие от SQL дампа с yaml схемой легко работать и осуществлять слияния в ветках. Я использую PyCharm с подсветкой yaml синтаксиса для этого. Так же yamltodb может сравнить yaml файл с базой и сформировать SQL миграцию. Я этой штукой уже год пользуюсь на работе, все остальные решения рядом не стояли.
    Ответ написан
    Комментировать
  • Как синхронизировать две БД PostgreSQL?

    darthunix
    @darthunix
    Знаю PostgreSQL, Ubuntu, DICOM и медицину.
    Посмотрите в сторону plproxy. На сервере Б пишите логику обновления 5 строк в виде функции fB. На сервер А ставите расширение plproxy, подключаете к нему сервер Б и пишете функцию fA, вызывающую удалённо функцию fB обновления 5 строк на сервере Б. По обновлению строки на сервере А дергаете fA и получаете обновление на сервере Б
    Ответ написан
    2 комментария
  • Как спроектировать базу данных многопользовательских списков?

    darthunix
    @darthunix
    Знаю PostgreSQL, Ubuntu, DICOM и медицину.
    Про второй вариант вообще забудьте, это какой-то адский антипаттерн. Насчёт первого варианта - не волнуйтесь про размер, индексы спасут вас. А вот когда они перестанут вас спасать, вы воспользуетесь шардингом... но к этому моменту вы будете знать про большие данные больше всех в этом обсуждении)) Я бы создал таблицу с пользователями, таблицу с задачами и таблицу соответствия пользователей и задач с составным первичным ключом по этим двум колонкам. И не забыл бы про внешние ключи. Индексы бы делал в обеих таблицах типа автоинкрементируемого bigint (не знаю в терминах mysql) для более компактных и быстрых индексов по сравнению с guid. Если бы это был postgresql, то можно было бы таблицу трансляций сделать вида (пользователь, массив задач), но это плохая практика в плане согласованности данных.
    Ответ написан
    Комментировать
  • Как построить расширяемое хранилище из нескольких iscsi дисков?

    darthunix
    @darthunix Автор вопроса
    Знаю PostgreSQL, Ubuntu, DICOM и медицину.
    Я понял, что aufs не умеет корректно обрабатывать ситуацию, когда один из слоев недоступен (iscsi отвалился). В этом случае вся совокупность слоев помечается сбойной и требует перемонтирования iscsi и пересоздания aufs. Мне этот вариант не подходит.
    На замену нашел mergerfs. Он работает аналогично aufs с точки зрения использования (только через fuse, но это при моих нагрузках не важно), но в отличие от последней, при недоступности одной из точек монтирования, mergerfs продолжает нормально работать. Невозможно прочитать только файлы с недоступного iscsi, остальные отлично работают и даже пишутся... правда есть нюанс. Политики выбора точки записи могут быть типа: где меньше места, где больше, рандомно. И возможна ситуация, когда согласно политике надо писать на недоступный iscsi и тогда мы вываливаемся в честный read only. В принципе неплохо, но возможно я придумаю вариант, как обойти это ограничение. Проблема на текущий момент в том, что после того, как iscsi стал недоступен, его точка монтирования все еще знает его свободное место до факта недоступности. Если я узнаю, как убедить систему, что если диск отвалился, то его размер равен нулю, то в read only я уже не попадаю никогда и это полная победа. Отпишу по результату.
    Ответ написан
    1 комментарий
  • При помощи чего можно просматривать 3D компьютерные томограммы в линуксе?

    darthunix
    @darthunix
    Знаю PostgreSQL, Ubuntu, DICOM и медицину.
    Либо 3D Slicer, либо Invesalius
    Ответ написан
    Комментировать
  • Что должен знать SQL разработчик?

    darthunix
    @darthunix
    Знаю PostgreSQL, Ubuntu, DICOM и медицину.
    Наверное, знать надо все и до бесконечности. Я тоже работаю с PostgreSQL, для разработки и администрировании по моему горькому опыту нужно знать:
    1) Linux
    • стандартный набор консольных утилит
    • система выдачи прав на файлы
    • знания про работу с памятью для тюнинга БД
    • lxc (возможность поднять кучу легковесных контейнеров с разными базами очень помогает)
    • уметь настраивать фаервол (чтобы у сервера БД не торчало лишнее наружу)
    • ssh проброс портов с удаленного компьютера (чтобы удобно подключаться к БД)
    2) Система контроля версий - git, svn и т.д.
    3) PostgreSQL
    • внутренняя работа под капотом (для тюнинга производительности)
    • FTS, триграммы, plproxy
    • pgtap для тестирования
    • система версионирования схемы бд (я рекомендую pyrseas)
    • балансировщики, репликация, PIT бэкапы (рекомендую barman)
    • FDW для подключения к разным другим источникам данных

    А вообще, смотри видео и читай доклады с pgconf и документацию по PostgresPro, это хорошо помогает быть в курсе последних тенденций.
    Ответ написан
    7 комментариев
  • PostgreSQL система контроля версий?

    darthunix
    @darthunix
    Знаю PostgreSQL, Ubuntu, DICOM и медицину.
    Успешно пользую Pyrseas в продакшене. Сохраняет схему в виде yaml файла, удобного для версионирования и работы с ветками. По разнице между yaml файлом и базой автоматически генерирует sql миграцию.
    Ответ написан
    Комментировать