Задать вопрос
Ответы пользователя по тегу Базы данных
  • Как выбрать базу данных?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Есть такая старая поговорка из тайм-менеджмента - "что СРОЧНО - то не важно".

    Если есть некий источник который продуцирует записи со скоростью 10к в секунду и мы хотим писать их сразу (мгновенно) то наверное у нас есть такой-же потребитель который так-же быстро способен их потребить.

    А есть вообще такой? Мне сложно себе представить. Если это биг-дата со стримингом - то там надо использовать не постгрес а другие системы. Kafka+Spark например. Но я не буду давать таких советов потому что люди обычно сидят на консервативных системах типа реляционок и хотят делать на них все. Просто им так удобнее.

    Давайте немного арифметики. Если мы формируем 10к в секунду то за сутки у нас набегает 10000L * 60 * 60 * 24 = 864 000 000 или восемьсот миллионов строк. Это вот если загрузка будет постоянно такая.
    Ответ написан
    Комментировать
  • Как обеспечить консистентность данных между БД и поисковым движком?

    mayton2019
    @mayton2019
    Bigdata Engineer
    В любой информационной системе я-бы выделял single-source-of-truth (типа главный источник правды) и этот главный источник должен быть согласован сам с собой всегда. Будет ли это дисковый файл. Kafka, или база PG - неважно. Важно что он будет арбитром в спорных ситуациях.

    В ситуации с потерей электричества что вы описали - совершенно невозможно правильно восстановить обе системы. Одна из ник полюбому будет опережать другую. В high-load системах она будет опережать не на 1 на на сотню транзакций например. Честно я даже не могу придумать алгоритм восстановления. Особенно если часы где-то разошлись на милисекунду и одна из систем сделала update на уже вставленные данные.

    Мне нравится вариант когда мы сразу пишем информацию в Postgres и делаем commit (по правилам которые нужны бизнесу) и дальше уже индексируем содержимое базы эластиком. После аварийного ребута я будут знать что PG содержит именно то что было закоммичено. То что нужно тоесть. Эластик будет просто догонять.
    Ответ написан
    Комментировать
  • В чем принципиально различие postgres от mysql?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Postgresql - более консервативен. Его можно брать почти для любых проектов. Есть partitioning что свидетельствует о зрелости системы и об Enterprise-ready. Единственное что может быть не очень - это некий кумулятивный эффект от частых inserts/updates который требует вакуума. И со счетчиками транзакций там есть нюанс. Но скорее всего в твоём сегменте разработки PHP/Laravel - тебе будет просто безразлично сущестование вакуума.

    MySQL это лейбл под которым на самом деле могут работать различные engines таблиц. И если анализировать какой-то performance-инцедент то нужно в первую очередь спрашивать с какой опцией таблица создавалась. MyISAM/Innodb/e.t.c. Потому что выбор этого двигателя влиял на какие-то опции скорости и транзакций. Я заменял например в создающих скриптах InnoDb на MyISAM для того чтобы просто быстрее прогрузить 1Тб CSV файл.

    В более современных версиях типа MariaDb (я уже не следил за этими новостями) есть более умные двигатели которые учитывают дефекты старых и по идее они должны быть универсальнее. Тоесть можно их брать смело.

    Что лично меня раздражает в диалекте My/SQL - так это странного вида кавычки-апострофы. Никогда не понимал зачем это.
    Ответ написан
    Комментировать
  • В чем отличие реляционных от нереляционных БД?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Я думаю что главное отличие - это способность осуществлять соединения (JOINS) по любому полю.

    Попробуйте сджойнить две таблицы Cassandra по любому полю. Хрен вам. Это считается неверным дизайном. С точки зрения идеологии Cassandra вы должны были дизайнить модель так чтобы таких джойнов (или таких мыслей) у вас никогда не возникало. Грубо говоря - хотите какую-то выборку - подготовьте ее заранее на уровне архитектуры. Типа мат-вью.

    Да что там джойн. Там даже выбрать по предложению WHERE не всегда можно. Тоже считается антипаттерн. В базовом SQL синтаксисе это не сработает. Надо добавлять опцию allow filtering что как-бы говорит нам - что мы вышли за рамки обычного запроса. Захотели птичьего молока...

    А вот для Oracle/PG/Mysql/MSSQL - получить джойн по любому полю с любым - сущий пустяк. Хотя дать смысл этому джойну будет сложнее. Джойнить величины с величинами.

    Хотя в последнее время различия между реляционными и прочими - стираются. Это как парадигмы в ЯП. Лет 20 назад все говорили о парадигмах. Сейчас - многие языки считаются мультипарадигменными. Тоесть спор сам по себе закрыт на уровне определения.
    Ответ написан
    Комментировать
  • Как реализовать указание полного адреса из заранее подготовленной базы данных?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Оставь только почтовый индекс обязательным. Всё остальное - пускай текстом запишет как есть.
    Ответ написан
    Комментировать
  • Какие существуют бесплатные базы данных?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Для заметок база данных не нужна.

    Я использую git для заметок и когда надо синхронизировать десктоп и ноутбук - делаю соотв pull/push.

    Всё что бесплатное - либо действует 30-60 дней пробного периода. Кроме того никак не помогает вам в решение технических issues. Бесплатный пользователь облаков - это бета-тестер. Не обижайтесь если внезапно версия обновиться без вашего ведома. Чтоб не было сюрпризов вобщем.
    Ответ написан
    1 комментарий
  • Есть ли быстрое хранилище с возможностью подписаться на обновления?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Если честно у меня - путаница. Трекеры и клиенты - это одни и те-же сущности?

    Kafka - хорошая штука но она любит грамотный дизайн топиков. Какой здесь будет маппинг? Если клиентов - 100 мильонов то вряд-ли кафка выдержит столько-же топиков. Если топик делать один на все события - то нужно как-то партицировать по признакам. По каким?

    Вобщем мало информации. Нужны диаграммы и цифры. Без них такого решения как кафка - нельзя принимать. Иначе это будет просто... безответственно. Тоесть мы посоветовали кафку а дальше - бейся сам как хочешь.
    Ответ написан
    6 комментариев
  • Различные варианты database cloud?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Для разработчика ты можешь поднять Postgres, Redis, Mongo в Docker. Это делается (почти) в 1 строку.
    Или если тебе нужен ансамбль из нескольких сервисов тогда - kubernetes.

    Облачные провайдеры дают бесплатный аккаунт только на 1-2 месяца а потом все равно надо платить. Кстати при глубоком изучении тех-же AWS/Azure/GCP я все таки советую оплатить акк. Я замечал что есть некоторая часть проблем которая принципиально не устраняется в бесплатных учетках.
    Ответ написан
  • Как реализовать алгоритм экспайринга элементов в базе данных?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Топик тегирован "Базами Данных". Какими - чорт его знает.

    Поэтому есть следующие коробочные решения. Cassandra, Redis, Amazon DynamoDb. Все они поддерживают дополнительное поле TTL и удаляют записи автоматически без участия разработчика.

    По поводу подводных камней о которых пишет автор. Это всё очень плохо и почти не работает в боевых условиях. Пока бэкап данных делается в обычном плановом режиме - никто не знает о существовании всяких там левых файлов на сервере приложений. Грубо говоря все думают что состояние системы (state) лежит в базе и только в базе. Поэтому попытка размазать состояние системы по нескольким нодам вычислительной сети приводит к сложным и трудноуловимым последствиям.
    Ответ написан
  • Корректно ли генерировать SQL без использования query-builder?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Да. Корректно. Но если вы не пользуетесь билдером то вам придется вручную отслеживать открывающие и закрывающие скобки в тек местах где есть приоритет и вручную форматировать отступы и переносы если есть такое требование. Тоесть в какой-то момент времени сложность кодогенерации перейдет с билдера в ваш рукотворный код и вам эту сложность также придется поддерживать и объяснять ее происхождение коллегам.

    Кстати на каком языке вы разрабатываете? Для Java есть готовые билдеры в QueryDSL, JooQ.
    Ответ написан
    3 комментария
  • Как эффективно хранить canvas попискельно в БД с последующим отображением?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Для оптимизации загрузки landing page, можно хранить копии этой картинки в уменьшенном виде. 2000х1000 => 1000x500 => 500x250 e.t.c. Так игроделы делают для быстрого рендеринга текстур. Mip-уровни кажется называется.
    Обновлять эти mip уровни можно не спеша. Через минутку.

    База mysql вам вобщем-то не нужна. Картинку можно в реальном времени править atomic операциями и хранить в raw формате. Не знаю делают ли такое на PHP. Возможно вам нужен рукастый програмист на C++ или еще на каком-то языке чтобы подружить PHP с С++ и сделать сервис для этой картинки.
    Ответ написан
    Комментировать
  • Порекомендуйте подходящую базу данных?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Бигдата и индексы - обычно не дружат друг с другом. Антагонизмы по сути. Поэтому от индексов надо уходить и двигаться в сторону партишенинга, сложного и полностью ориентированного на аналитические выборки.

    В идеале - реплицировать все данные в другую БД с другой геометрией таблиц или вообще в систему другого типа.

    Любая современная биг-дата будет дешевле по стоимости владения по сравнению с DBMS.
    Ответ написан
    Комментировать
  • Как проверить Теорию 6 рукопожатий в БД с миллионами юзеров?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Поскольку это задача из теории графов - то и решать ее нужно на языках разработки и библиотеках поддержки графов. 1 млн узлов графа - это не много для современной памяти.

    Из java библиотек есть Guava, Jung, GraphT.
    Ответ написан
    Комментировать
  • Как сделать базу данных на XML?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Xml обычно плохо подходит для баз данных. Если тебе надо изменить 1 атрибут в 10 мегабайтном xml файле то с точки зрения xml технологий это будет - создание нового документа с изменениями. Тоесть в перспективе такая бд будет плохо держать нагрузку.

    Рассмотри варианты с mongodb+json. Там разработан специальный бинарный вариант сериализации json при котором эта проблема избыточной дисковой нагрузки будет устранена.
    Ответ написан
  • Можно ли считать словарь Python базой данных?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Я предлагаю словарь Python все таки оставить словарем и не искать натянутых аналогий. База данных (в общем понимании этого слова) это RDBMS с поддержкой ACID.

    В противном случае, и ощипанный петух будет человеком.
    Ответ написан
    Комментировать
  • Как организовать передачу данных с сетевого интерфейса приложению на C++ максимально быстро?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Вопрос поставлен неправильно.
    Чтоб оптимизировать odbc - надо 100% знать что именно он является узким местом. Я бы начал с анализа исполнения и извлечения данных локально на сервере. ДБА здесь поможет. И если ваша задаче связана с ETL - почитайте про техники. Может экспорт в csv файл с загрузкой в с++ приложение будет быстрее. Может репликация бд или миграция.
    Ответ написан
    Комментировать
  • Какие из современных СУБД содержат средства ввода/вывода?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Сервер БД рассматривается как черный ящик. Очень похожий на HTTP-сервер. Основная задача которого - интерактировать с протоколом запроса-ответа на языке SQL. И все данные которые вы из него получаете - можно получить так. Выводить на консоль там некуда т.к. нет консоли (обычно). А отвественные DBA обычно никого не подпускают к SSH консоли чтоб не было проблем с безопасностью и с нагрузкой. Так делают в ентерпрайзе и на предприятиях.

    Но если вы установили БД себе локально - то можете конечно писать себе отчоты на локальную ФС. В Оракле есть пакет UTL_FILE. Писать в текстовую консоль я не советую. Этот output может быть блокирующим и производительность вашей БД упадет т.к. она будет ОЖИДАТЬ прокрутки экрана например.

    Альтернативой можно рассмотреть просто использование утилит экспорта exp/expdp/dump/pg_dump e.t.c. Или вообще любых консольных клиентов. Но возможно вопрос автора лежит в плоскости отладки хранимых процедур например? Здесь все еще сложнее и надо смотреть конкретную DBMS.
    Ответ написан
    Комментировать
  • Mysql все хранить в 1 таблице или нескольких?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Да можно слить 2 таблицы в одну.

    Это называется денормализация.

    Все способы - по своему правильные. Но на развитие этой мысли мне не хватит формата сообщения. Грубо говоря. Если твои данные не будут обновляться. И не будет аномалий обновления. То спокойно храни все в 1 таблице.
    Ответ написан
    Комментировать
  • Какая база подойдет для быстрых операций с JSON?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Баз подойдет много. Mongo подходит. PostgreSQL тоже подходит с их новым типом JSONB и текстовым индексом. На одном из семинаром главный Постгресщик Бартунов хвастался что на тестах производительности этот тип данных обгоняет Mongo. Хотя ХЗ как это проверить на кастомных проектах.

    Берите одно из двух исходя из стоимости владения.
    Ответ написан
    Комментировать
  • Какую БД выбрать для маленького файлового сервиса?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Вопрос в перспективе тянет на экспертную систему по выбору БД.

    При данной постановке - можно брать любую документно-ориентированную. Все одинаково подходят.
    Но если основной контент (80% берем по Паретто) это файлы - то можно брать Amazon S3, в дальнейшем с перспективой трансформировать это в DynamoDb если понадобятся транзакции или в Amazon Document Db (он же Mongo) если понадобится тонкая работа с атрибутами документов (или файлов).

    Автор должен понять что в это вопросе нет единого правильного решения. Есть просто некая сравнительная табличка где есть набор фичей с одной стороны и набор DBMS с другой и нет такого покрытия которое бы закрыло ВСЕ фичи.
    Ответ написан
    Комментировать