Как стать автором
Обновить

Комментарии 106

после перевода на атомарные пайплайны в монго даже не знаю зачем теперь реляционные нужны. А какой у монго под это дело sqd для строготипизированных языков — вау
Полагаю, что специалисты, например, использующие PostgreSQL (тоже OpenSource) могут с Вами поспорить насчёт реляционных. И реляционные БД живей всех живых, об этом было в статье.) Я использую MongoDB и знаком с ней с 2010 когда её с трудом можно было пользовать, чтобы прям вау не сказал бы, но улучшается с каждым годом и растёт не просто так, есть нужные особенности.

Тщетно пытался найти в интернете хотя бы одну фразу из Вашего текста
атомарные пайплайны
sqd для строготипизированных языков
Что это. Остаюсь пока не узнаю на реляционных.

Атомарные они наверное в той же степени как и все остальные фичи, которые монга обзывает атомарными и надежными. Достаточно погонять в jepsen и вскроется туча багов с потерей и порчей данных.

пусть они буду даже идеальными. но что будет с производительностью?
если еще учесть что современые разработчики привыкли делать ленивые транзакции — это когда каждая операция в транзакции отправляется на сервер отдельным запросом. все будет тормозить.

Проблема в том, что они сначала должны быть идеальными, а потом должен подниматься вопрос производительности. Иначе это не транзакции и не атомарность, а ерунда. Монга делает заявления, что все надежно и круто, прям лидеры индустрии. Это не так, по крайней мере с теми настройками, которые идут из коробки.

Пусть они были бы не идеальными, но меня и авторов jepsen вполне бы это устроило, если бы в документации об этом прямо писали — «транзакции» есть, но не ожидайте от них надежности реальных транзакций реляционных баз данных, где действительно есть железные гарантии.

Если даже отбросить необходимость транзакций. Предположим они совсем не нужны. У монги не нахожу преимуществ совсем. Элемпнтаные действия как то join которые все же там есть хоть и своеобразные или под чет количество строк это квест и не все его проходят. Мангус же этого не реализует. Уже не говорю об элементарном поиске по строке аналоге like. Поддерживаю несколько проектов на столе чужих. Одни траблы. А расхлябанность схеме данных совершает картину. Единственное что у монги на пять с плюсом это пиар. MEAN стек.

У меня примерно тоже самое. Я каждый раз смотрю на эту монгу и думаю, чего же она так популярна. Может я чего-то теряю, что не освоил и не применил нигде ее до сих пор. Но как-то не вижу надобности работать с джисонами без схемы. Да и масштабируемость там всегда была какая-то ущербная. В итоге получается, что как-то не нахожу ей места до сих пор. Для надежности есть постгре или вот сейчас смотрим на cockroach, для жутких нагрузок какая-нить касандра, для индексации текста эластик, для кэша и оптимизаций редис. Куда тут впихнуть монгу непонятно.

Пример из воздуха, надо было проверить гипотезы и "пощупать данные":


  1. на "кластер" монги из 3 машин(дев. ттх) 280 gb данных, 3 млрд записей — записывались данные и по 4 ключам-полям строился индекс 12 часов с небольшим.
  2. Те же данные почти тем же кодом записывались в кластер эластика из большего количества серверов и сервера были условно с прода — 29 часов.

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

Я согласен, про корректность сравнения. Но вопрос стоял, что, нужно было искать по 4 ключам, а не по всем. Плюс для загрузки в эластик понадобился реальный кластер из реальных по ттх машин, а не 3 машинки, единственный плюс которых диски NVMe.

Эластику надо было просто сказать, чего вы от него хотите. Сказать, какие поля ему нужно индексировать и как. Из коробки он принимает все подряд и все подряд индексирует. При чем по своему желанию определяет тип индекса, обычно так, что поддерживается поиск и по полному совпадению, и подстроке, и частичному вхождению, и с учетом лингвистического анализа. Естественно это намного дольше и больше ресурсов требует.
Но как-то не вижу надобности работать с джисонами без схемы

очевидно, что для тех случаев, когда схема меняется.
у меня, например, в одном проекте в json хранится лог: действие и атрибуты, список которых зависит от действия.
(речь не про монгу конкретно, а про «зачем может потребоваться schemaless»)

Не совсем понял, что не так с поиском по строке аналоге like? В монге это работает, и regexp работает. Отсутствие схемы — очень удобно, когда может прийти любой структуры документ. Индексы работают нормально, геоиндекс из коробки — отлично работает. Монга до определенных размеров очень быстро работает и на запись и на чтение. С монгой очень удобно работать, когда надо проанализировать данные, в отношении которых — не всегда очевидна структура документов, база занимает место — при определенных обстоятельствах, меньше других.

Работает полным перебором строк. В то же время в Postgresql bson поля индексируются и поиск идет в примеро с той же скоростью что и по простому текстовому полю

Не полным, постройте индекс по полю и сравните, также доступны text-search.

https://docs.mongodb.com/manual/reference/operator/query/regex/
Фактически оптимизируется только поиск по префиксу.
text-search это из другой оперы. Это токенизация текста и поиск по точному совпадению слов.

Каждая модель СУБД имеет свои плюшки, позволяющие наиболее эффективно решать определенные задачи.


Реляционные СУБД по моему опыту хороши как минимум тремя вещами:


  1. SQL — это фактически стандарт. И в реляционных СУБД его поддержка завсегда лучше, чем в альтернативных, особенно когда дело касается хранения действительно больших объемов данных.
  2. Многие представления предметных областей при хранении лучше таки ложатся на реляционную модель.
  3. Реляционное представление простое и понятное во всех отношениях.

Если же говорить о личных предпочтениях, то мне как-то больше по душе СУБД "ключ-значение". Особенно те, что основаны на MUMPS (их сейчас много развелось, и коммерческие есть, и свободные).
На некоторых задачах они как раз самыми быстрыми оказываются. Да и гибкость при решении различных задач просто запредельная.

Не согласен что SQL фактически стандарт — это реально стандарт

Это с какой стороны посмотреть.
SQL — это, конечно, реальный стандарт, но, как всегда, есть нюансы.
Во-первых, я больше не про сам SQL как язык, а про то, что при "общении" с базами данных как правило предпочитают использовать именно его, хотя часто без него можно прекрасно обойтись (в альтернативных СУБД часто есть механизмы доступа к данным без всякого SQL, позволяющие существенно увеличить скорость доступа на специфических задачах).
Во-вторых, стандарт стандартом, а какую СУБД не возьмешь, везде всплывают какие-то особенности, не позволяющие просто взять и сделать одно и то же единым образом в разных СУБД, если оно хоть немного выходит за рамки примитивных базовых конструкций.

"в альтернативных СУБД часто есть механизмы доступа к данным без всякого SQL, позволяющие существенно увеличить скорость доступа на специфических задачах"
Но ведь prepared запрос это по сути и есть та самая альтернатива, и вы можете "переписать драйвер" и получать сырые строчки, не думаю что там прямо большие накладные расходы. Честно говоря не очень представляю чем именно sql может реально замедлить обработку, единственное чего не будет это map reduce на роды хотя и для sql как языка это работает (exadata/impala/teradata)...

Честно говоря не очень представляю чем именно sql может реально замедлить обработку,

Если СУБД не реляционная, то SQL часто реализуется как еще один уровень над другими механизмами доступа к данным. Соответственно, в таких случаях использование SQL — это всегда дополнительные накладные расходы.
Но разработчики даже в таких случаях все равно часто избирают доступ через SQL, потому, что он привычнее.

Вы как-то, на мой взгляд, неправильно понимаете что такое sql, условно вы можете писать напрямую в бацткоде jvm или например на java и использовать jit оверхед по сути будет только на компиляцию (другой вариант c++ и машкоды) в принципе в теории на машкодах(ассемблере) можно быстрее на практике не всегда из них можно выжать лучший результат, потому большинство используют то что удобней. При этом не стоит забывать что часто сам overhead от подготовки плана выполнения и его исполнения по сравнению с операцтями ввода/вывода и поиска незначительный.
p.s. с появлением серверов с большим объёмом RAM и SSD во многих бд провели оптимизацию в связи с тем что соотношение накладных расходов поменялось и приоритеты немного сместились, причём т.к. движки больших рсубд штука не простая этот процесс шёл не быстро что позволило появится на свет многим узкоспециализированным (в т.ч. nosql ) решениям и занять нишу, за счёт лучшего использования новых возможностей оборудования. Однако сейчас если посмотреть на то что рассказывает к примеру оракл на своих конференциях, выходит что они постепенно поглощают этот функционал, а в след за ними пойдут и open source системы...

Вы как-то, на мой взгляд, неправильно понимаете что такое sql,

Я прекрасно понимаю, что такое SQL. Внезапно, это всего лишь язык такой, текстовый. Другой вопрос, чтобы реализовать SQL в конкретной СУБД, нужно сделать очень многое. Без качественной и эффективной реализации всех этапов исполнения SQL запроса от интерпретации запроса до выдачи результатов в этом самом SQL особого смысла нет.


При этом не стоит забывать что часто сам overhead от подготовки плана выполнения и его исполнения по сравнению с операцтями ввода/вывода и поиска незначительный.

При некоторых условиях дополнительный расход ресурсов на все операции при исполнении запроса помимо ввода/вывода и поиска может быть достаточно значительным, чтобы обратить на это внимание.
Кроме того, построенный план запроса может оказаться очень неоптимальным, что приведет к значительному увеличению операций ввода/вывода и поиска. А при большом количестве динамически генерируемых сложных запросов это может стать реальной проблемой даже в ведущих реляционных СУБД, где на этих вопросах разработчики не одну собаку съели.


что позволило появится на свет многим узкоспециализированным (в т.ч. nosql ) решениям и занять нишу, за счёт лучшего использования новых возможностей оборудования

NoSQL СУБД выигрывают не за счет "лучшего использования новых возможностей оборудования", а за счет принципиально иной организации хранения данных, которая на специфических задачах (часто весьма специфических), дает реальный выигрыш в производительности доступа к этим данным.

хмм… захотелось подробнее прочитать о ClickHouse от Яндекса, эта СУБД вроде вообще относительно недавняя

Лучше сразу сказать, что это не OLTP СУБД, текущие операции бизнеса ей не поддержать, она для анализа накопленных больших данных и быстрого поиска в них. Когда интегрировали её в инфраструктуру на одном из проектов, то несколько багов открыл мой коллега, завёл в github-е issues. Нужно будет проверить всё ли пофиксили.)
Если в качеству РСУБД используется PG то можно посмотреть в сторону TimescaleDB

Спасибо за статью, подчеркнул много нового для себя.

Я что-то пропустил: что насчёт Snowflake и ему подобных?
Snowflake как представитель облачного хранения и анализа данных имеет место быть и есть кто использует, но он не топ. Amazon RDS c ядрами известных СУБД MySQL, PostgreSQL, MariaDB плюс там же Oracle и MS SQL, а также MS Azure, Azure Cosmos DB, и множество типов специфичных AWS СУБД (https://aws.amazon.com/ru/products/databases/) — это то, куда чаще смотрят если хотят облачных БД.
Snowflake действительно доступен только в виде облачного варианта. Но как вы правильно выделили Snowflake хорошо подходит (в силу своей природы) для анализа данных. И я бы его отнес не столько в группу облачных хранилищ, сколько в Columnstore. И в плане популярности тогда сравнивать с реляционными базами не совсем честно. Наиболее похожим хранилищем к Snowflake будет AWS Redshift. Наверно и ClickHouse тоже можно туда отнести. И среди них Snowflakе достаточно популярен и продолжает быстро расти.
Спасибо за статью, однозначно в избранное.

Очень содержательная статья. Я только начинаю работать с бд, но мне очень понравился sql. Всегда интеесовал вопрос, а в чем различие MariaDB и MySQL, где-то я читал, что это разные базы, но кто-то говорит, что это одно и то же.

Да, можно считать, что на текущий момент MariaDB и MySQL примерно одинаковы по функционалу. MariaDB ветка того же проекта MySQL после поглощения его компанией Oracle. Заподозрив в попытке слить его детище Oracle основатель Майкл Видениус создал открытую MariaDB. Протоколы MariaDB полностью совместимы с MySQL, значит приложения работают также.
спасибо, статья очень интересная. узнал много нового о СУБД. как вы думаете, способны ли в будущем российские облачные БД вытеснить зарубежные как минимум на территории России? очевидно, в этом есть плюсы.
Мы не являемся законодателями мод в плане БД и облачных тоже, поэтому путь к преобладанию облачных БД из России у нас будет долгим и тернистым. Но так как в России могут принудительно крупные госкорпорации туда отправить, то этот сегмент перейдёт быстро. Если хранить данные будет дешевле и проще без существенных доработок уже существующего функционала, то бизнес сам решит посчитав деньги.
Ну вот AWS и не надо вытеснять — найдите хоть один кружочек в России на этой карте: aws.amazon.com/about-aws/global-infrastructure

Понятно, что пользователи в России есть, но, полагаю, в основном это компании, ориентированные на западные рынки (особенно в свете недавних ковровых блокировок Роскомнадзором огромных подсетей c миллионами адресов AWS)

Плюсы для пользователей — это когда все ведущие компании представлены на рынке и жестко конкурируют. Тогда растет качество и падают цены. У всех облаков цены падают непрерывно — только последнее изменение биллинга лямбд в AWS до миллисекунд уменьшило у некоторых компаний счета за этот сервис в разы. Законы рынка еще никто не обманул.
НЛО прилетело и опубликовало эту надпись здесь
Затем — что это лучшее облако на рынке.
НЛО прилетело и опубликовало эту надпись здесь
Законы рынка еще никто не обманул.

Такая же бессмысленная фраза как «от судьбы еще никто не ушел»
НЛО прилетело и опубликовало эту надпись здесь

Сейчас бы бесплатный постгрес покупать, ага. Купить за деньги можно Postgresql pro, но, откровенно говоря, я знаю буквально единицы случаев когда поддержка и/или дополнительные плюшки pro версии перевешивали бесплатность community версии.

НЛО прилетело и опубликовало эту надпись здесь

да ну как вам сказать. если бы бюджет был бы бесконечный, то разве плохо иметь поддержку?

НЛО прилетело и опубликовало эту надпись здесь

А вы не пробовали посмотреть список основных коммитеров и кто где работает? не в таких «паразитирующих» компаниях ли подавляющее большинство? )


Тут есть два факта:


  • разработчику postgres надо кушать;
  • проект большой, уделять ему пару воскресений в месяц не выйдет.

По сути выход один: работодатель должен оплачивать работу над postgres'ом.

Сразу видно того, кто не особенно разбирался в данном вопросе.
Community версия регулярно получает всякие плюшки из pro, просто это происходит на пару версий позже. И такой подход весьма часто встречается в различном софте. Разработчики этих самых плюшек тоже, знаете ли, хотят кушать, а работа над ними часто занимает очень много времен. Буквально на уровне несовместимости с "поковырять в свободное время".

Смотря для какого проекта и для чего, представьте большой банк который вдруг стал основным банком обороне и оракл ему не положен и попробуйте оценить плюшки pro версии с т.з. такого заказчика...

Мы не являемся законодателями мод в плане БД и облачных тоже, поэтому путь к преобладанию облачных БД из России у нас будет долгим и тернистым. Но так как в России могут принудительно крупные госкорпорации туда отправить, то этот сегмент перейдёт быстро. Если хранить данные будет дешевле и проще без существенных доработок уже существующего функционала, то бизнес сам решит посчитав деньги.

Ещё бы интересно было бы почитать про технические отличия разных БД (максимальные размеры БД, поддерживаемые размеры ячеек и т.д.)

Спасибо за пожелание, возможно напишу ещё по вопросам к этой статье. Современные СУБД редко имеют ограничения в размерах или типах, которые бы останавливали их использование. Устаревшие и без обновлений актуальных, могут такое иметь. Тут больше вопрос для чего нужна БД исходя из этого и подбирается СУБД. Тот же SQLite имеет много ограничений и отсутствующих особенностей, но берёт простотой и компактностью для персональных нужд.

О каких именно "много ограничений" SQLite вы пишите? Желательно в сравнении с аналогичными величинами другой СУБД

НЛО прилетело и опубликовало эту надпись здесь
Первое ограничение SQLite, которое описано в статье, что это персональная СУБД, не поддерживающая схему клиент-сервер. Обычно СУБД поддерживает тысячи коннектов от пользователей, сервисов. Это вообще библиотека, с которой программа компилируется и работает как часть приложения. Это главное, что отличает её от остальных, она для небольших БД отдельных приложений. Когда пишу код для SQLite, то иногда забываю закрывать DB Browser, где менял или смотрел структуры и запущенная программа ждёт пока не освободится БД. Данные хранятся в 1 файле. Нет процедур, которые хранятся в самой СУБД, нет настроек, прав доступа так как персональная… Много чего ещё, чем отличается от MySQL / MariaDB, PostgreSQL. Она просто другая. SQLite небольшого размера, легко используемая с базовым набором функционала работы с данными используя SQL.
Все здорово, молодцы, было любопытно почитать. Но, граждане, столь вольное обращение с запятыми, перегруженные несогласованные предложения — где независимая вычитка? Пожалейте свою аудиторию. Спасибо!
Спасибо, Вам, за позитивный ответ! Если чем-то расстроил, то извиняюсь. Получился такой лонгрид, который быстро не прочитать. Текст честно загонял в Word на предмет глупых опечаток и прочего, модерацию пост на сайте проходил.

ИМХО статья очень разнонаправленная и по верхам. Очень много вольностей в трактовках. Особо опечалило описание rdbms. RDBMS в отличии от всех новомодностей основны на мат модели, и выполняют требования ACID. Что делает допустимым применение только ее, например, в транзакциях денег.Все эти супер новые технологии были реализованы в том или ином виде. Как расширения.
Но никто не хочет вникать. Основной тренд последних лет — не изучать, а хайповать "новые технологии". Зачем изучать теорию и методики нормализации, принципы хранения данных, проводить семантическое моделирование, изучать аналитику в sql. 99% современных тн дата саентистов, думаю, кроме простейшего селекта с группировками и не знают.
Была попытка сделать объектно редакционную субд… Lotus Notes.
Но, не взлетело. Тогда тоже… Трубили фанфары про конец ркляционных бд… Лет 20 назад.
Так будет со всеми этими поделками.
Любая мяу атака и все эти ваши тараниулы с редисками… пишут письма мелким почерком.

Новомодности точно так же основаны на научных работах. Как минимум алгоритмы консенсуса и хэш функции. Новомодности, которые умудряются давать гарантии для распределенных транзакций, уходят еще дальше.

Но никто не хочет вникать. Основной тренд последних лет

Больше похоже, что вам не хочется вникать, если вас причина хайпа и популярности основана на нежелании что-то изучать.

Любая мяу атака и все эти ваши тараниулы с редисками… пишут письма мелким почерком.

При чем тут мяу атака? Она точно так же положит любой постгре и мускл, торчащий в интернет с паролей postgres:postgres. Без кэша из тарантулов и редисок все эти ваши RDBMS непригодны хоть для какого-то хайлоада. А скейлить их приходится все теми же самыми техниками из «новомодностей». Либо вообще выкидывать на помойку, чтобы не обкладывать костылями то, что не работает.
Без кэша из тарантулов и редисок все эти ваши RDBMS непригодны хоть для какого-то хайлоада.

Ничего похожего. Даже старую MySQL можно было вылизать. Чуток архитектуры, щепотку нормализации, изрядная доля мозгов и вот мы уже со скоростью свиста оперируем таблицами с миллиардом строк.

Еще отдельно хотел бы упомянуть, что реальный хайлоад — штука довольно редкая и закладывать все и вся под него не стоит.
Согласен. Тот же Facebook как основную БД использует MySQL. Есть там и другие БД, но они вторичны. И далеко не всем реально нужны хайлоады. По своему опыту скажу, что миллиарды вызовов в день за мелкими порциями данных, сотню тысяч IOPS-ов ( особенно на SSD+NVME) переваривает RDBMS даже на 1 хосте, а ещё можно и шардировать. Но кэши нужны, и они вполне могут быть не на RDBMS.
Если почитать про фейсбук, то сложно назвать mysql основной базой. Всю нагрузку переваривают совсем другие компоненты (TAO), а mysql используется тупо для хранения этого всего на диске. И эти компоненты естественно все кэшируют (слоев кэширования там аж два) в памяти и в итоге работает это все как распределенная база с eventual consistency.

сотню тысяч IOPS-ов

Ну это довольно смешная нагрузка все же. Конечно подобное может и один сервер переварит.
Как раз MySQL использовать не вижу никакого смысла.

uber тоже испольует mysql но это не совсем тот mysql к которому мы привыкли см. https://habr.com/ru/post/354050/

Специалистов по настройке Postgres/Mysql котрые могли бы оптимизировать железо/софт чтобы работало не так уж много. Для фейсбука наверное полюбому не подошло. Но ОК/ВК модно было бы скорее всего и оптимизщировать. Плюс сейчас есть направление к протоколам MySQL/Postgresql создавать кластерные БД. Уже есть как минимум три очень популярные. Они и реляционные и кластерные одновременно.

На мой взгляд, привлекая внимание к вк/фб и т.п. нужно не забывать о контексте в котором совершался выбор того или другого продукта для старта, начиная от даты(сервера меняются и то для чего в 2000м нужен был большой шкаф сейчас может работать в коробочке с пассивным охлаждением) и заканчивая финансовыми возможностями (может у фб с текущими доходами всё получилось бы проще на oracle и железе от ibm, только тогда это было очень дорого для них).

Ну вот про Tarantool вы зря так. Там, ЕМНИП, ACID by design заложен, по крайней мере в пределах одного инстанса приложения. Оно попросту однопоточное, это даже преподносилось как плюшка и одна из главных причин высокой производительности: никаких затратных межядерных синхронизаций и блокировок.


Ну и как замену "взрослым" RDBMS никто tarantool серьёзно и не позиционировал. У него другая область применения и в ней он на самом деле хорош.

Проблема энтерпрайзнутых СУБД в том, что они очень дорогие. Стартапы начинают с открытых баз данных, так как они уже сейчас очень качественные. Смысл тратить десятки тысяч долларов на лицензию Оракл, когда есть постгрес, решающий все базовые потребности, а стоимость лицензии лучше инвестировать в людей, которые будут создавать ценность продукта. А когда стартапы растут, у них уже становится достаточно людей, чтобы поддерживать и создавать все необходимые инструменты на базе опен сорс. И это все еще скорее всего будет дешевле лицензий на СУБД. Вот так компании растут, становятся гигантами вроде Убер, которые уже никогда не будут пользоваться коммерческими СУБД.
НЛО прилетело и опубликовало эту надпись здесь
не понимаю за что оракулы заминусовали тебя) Действительно же все так) Разве что ошибка ORA-nnnnnn становится головной болью Оракла — они ведь поддерживают свой продукт, насколько я понимаю

eumorozov Всё же обычно ora-xxxx ищется сразу и часто это ресурс оракл и если это не ora-00600 то ответ очень легко получить и это очень маловероятно "корректный запрос", всё же оракл очень удачно выбрал формат нумерации ошибок…
x67 Про поддержку ну это такое если вы не человек в очень крупной компании с доступом к поддержке, проще интернет, а вот закрытый metalink это проблема (некоторые проблемы могут иметь уникальное решение которое может не входить в общие патчи, насколько я знаю).

НЛО прилетело и опубликовало эту надпись здесь

Проблемы на стыке, наверное у меня уже глаз замылился, но бд при использовании стандартных драйверов и sql эта не та штука которая настолько тесно интегрируется с другими продуктами что нужно искать сочетание django + bd… Тем и силён sql что он прост как… Ну по крайней мере в основном...

НЛО прилетело и опубликовало эту надпись здесь

Про заплатить — теперь есть облака (90 т.р. в мес и у вас 4 быстрых ядра при загрузке 100% 24/7 терабайт хранения и куча плюшек(как и минусов)).
Про специалистов, а чем оракл сложнее postgre? Настраивается элементарно, инструментов вагон и тележка, гайдов полно… Думаю высшего технического без ИТ за глаза хватит как и для большинства современных продуктов.
p.s. и как бы я не любил opensource приходится признавать что то что в оракл часто просто работает (и даже если очень криво писать запросы) в opensource базах иногда не хочет. Мне очень нравился в своё время Firebird но по возможностям написания для внутреннего софта он сильно отставал, ведь если мы говорим не об ит компании то часто в такой компании пара специалистов и знать всё очень сложно, не говоря уже о вечном беге за отправляющимся паровозом новых технологий.

НЛО прилетело и опубликовало эту надпись здесь
Много работал с Оракл, проблем с документацией и решением кейсов не было, всё гуглилось довольно просто, топ по объяснению концепций и фичей/багов, конечно Том Кайт. Специфические критичные баги есть, многие из них, находились в металинке (багтрекере Оракла) и исправлялись очередными не установленными патчами.
Видел использование и в больших, и в маленьких проектах. В маленьких бесплатных, как правило, не возникало обычно никаких проблем, т.к. весь базовый функционал который требуется в маленьком проекте вылизан у Оракла до идеала, проблемы могут возникать в специфике, да и то легко обходились небольшими костылями

p.s. ошибки для оракл вообще не частая вещь, за 10 лет было две, одна очень плохая — view со сложным запросом с with recursive выдавал 0 строк всегда и молча (запрос не во всю работал версия 11.2.0.х), вторая менее страшная, после обновления с 11.2.0.4 на 12.2.0.1 один сложный запрос начал падать (много with с многократным ступенчатым использованием подзапросов, не мой...) просто пришлось переписать по другому...

Да потому что Ораклу все равно — из чего вы его дергаете, до тех пор, пока драйвер стандартный. Количество ошибок у Оракла конечно и они все нумерованы. По каждой из них можно было найти горы материала в свое время.
Уж более распространенной БД в энтерпрайзе, чем Оракл, еще поискать нужно. По нему много и спецов было и экспертизы. Я работал в конторе и наш продукт был на Оракле — так у нас за эти 10 лет по пальцам одной руки можно было пересчитать ситуации, когда саппорт Оракла понадобился. По моим впечатлениям Оракл — очень стабильная и надежная СУБД. Что не отменяет драконовских цен и политики компании.

Если покупают за чужие деньги (тонкий намек на систему откатов)

НЛО прилетело и опубликовало эту надпись здесь
от же любимый вами AWS, Uber, Google, Facebook, Netflix, и так далее — все они почему-то Oracle не используют, насколько я знаю.
Все верно. Эти компании (заметим, профильные в ИТ) с массой, сравнимой с Ораклом, могут себе позволить собственные разработки с собственной поддержкой.

При этом платить на сторону невыгодно.
Не используют — тк он не подходит для их объемов.

Амазон, кстати, активно использовал Оракл до последнего времени и только последние несколько лет как перешел на другие СУБД. Можно за многое ругать Ларри и его компанию, но продукт для своего времени (конец 90х-начало 2000х) был отличный.
И вот совершенно точно припоминаю, что когда читаешь про известные компании, у которых сервера обслуживают пользователей со всего мира, то там никогда не упоминается оракле. Тот же любимый вами AWS, Uber, Google, Facebook, Netflix, и так далее — все они почему-то Oracle не используют, насколько я знаю.

проблема скорее не в том, что у oracle плохой продукт, а в том, что за него хотят много денег.
для мелких-средних проектов он слишком дорог, проще взять что-то опенсорсное (да даже и платное, но не столь дорогое), для совсем крупных слишком дорог, проще держать высококлассных разработчиков, которые пилят своё/дорабатывают опенсорсное.


остаётся всякий крупный не-IT бизнес, те же банки

Можно проектировать онлайн, например, в dbdiagram.io, сами создатели СУБД имеют инструменты типа Oracle SQL Developer Data Modeler, у MS есть в Management Studio, в MySQL в workbench, PostgreSQL имеет кучу бесплатных и кросс-платформенных. Специализированные инструменты умеют строить по текущей структуре схемы и деплоить после изменений. Если бесплатные чем-то не устраивают, то платных для всех топовых СУБД достаточно где есть free тариф с ограничением числа диаграмм и объектов на них.
Спасибо.

Посмотрел dbdiagram.io, там редактор с русскими буквами не дружит (и это в 21 веке) — курсор убегает непонятно куда.
Бесплатно ничего толкового не видел. А если за деньги и для работы — то Sparx EA, PowerDesigner, ERwin (не к ночи будет помянут)
Я, когда искал программу для проектирования БД нашел pgModeler.
Остальное бесплатное, что нашел, не понравилось.
Большое спасибо за статью, много полезной информации
Лицензия на опернсорс БД конечно 0, зато ценник за сопровождение достигает головокружительных высот.

Просто об этом предпочитают молчать. И на сайтах не указывать.

Про сыр в мышеловке напоминает это
Просто это очевидно должно быть — что если продукт бесплатен, то продукт — вы ;)
НЛО прилетело и опубликовало эту надпись здесь
Пользуясь случаем, хочу спросить — пользовались ли вы neo4j и/или другими графовыми СУБД? Есть ли ли от них польза, и если да, то где лучше всего применять?

Есть еще orientdb и arangodb где кстати гибридные то есть графы плюс документы. Последнюю из них пытаюсь задействовать в текущем проекте. Вцелом те же рсубд только с возможностью делать рекурентные запросы, хотя рсубд также могут это

спасибо!
Очевидно, когда у вас данные — граф по природе: с кучей нодов и сложных связей между ними и вам нужно производить над ними операции, специфичные для графов (типа поиска кратчайшего пути или циклов)
Ну вот конкретный пример: у меня была задача — реализовать бота в вк, который имеет многоуровневую структуру (глубину. т.е. тыкаем по кнопке — переходим в другое меню, оттуда тыкаем ещё кнопку — открывается еще одно меню и тд). Я сделал структуру дерева, и я умею хранить дерево в РСУБД, но вдруг наткнулся на neo4j и решил попробовать. Но спустя пару часов положил болт и вернулся на PostgreSQL. Оттолкнул синтаксис и медленная выборка (было что-то ещё, но уже не помню). Возможно, я рукожоп, а может, просто использовал не по назначению. Поэтому и стало интересно. Если вы использовали — можете, пожалуйста, показать конкретный пример, где neo4j (и др.) действительно показывает себя лучше? Буду сильно благодарен.
Но рано или поздно начнёт возникать ситуация, что ваша БД не успевает записывать.… Это называется Master-Master.

Ммм, а почему вы так говорите, будто мастер1 станет писать меньше данных? С чего бы? Объём записи от появления мастер-мастер репликации не уменьшится никак. Мастер1 будет писать то что ему приложения сказали писать, плюс весь поток изменений от мастер2. Аналогично дела у мастер2. Каждая реплика будет писать совокупный объём данных, записанных на оба мастера.
Мастер-мастер — это совсем не про масштабирование записи. Про масштабирование записи шардинг.

Шутка ли тысячи светлых голов коммитят в репозитории качественный код, тестируют на реальных проектах и денег не просят.

Упоминание тысяч участвующих вызывает лишь улыбку. Вот PostgreSQL большой и известный проект? Как думаете, сколько человек участвует в разработке? Много наверное, со всего мира люди трудятся. Но просто посмотрим в release notes:
The following individuals (in alphabetical order) have contributed to this release as patch authors, committers, reviewers, testers, or reporters of issues.

И вот это вот всё суммарно 380 имён для 13 версии. Тысячи?

Тысячи разработчиков — это как раз про коммерческие СУБД. Сколько там у оракла? «38,000 developers and engineers». Даже если всего 1% из них занимается кодом базы — это по-прежнему больше в несколько раз, чем работает над кодом postgresql. А потом учесть сколько людей занимаются кодом fulltime, а кто в свободное время напишет пару patch review на интересные лично для него штуки (и уже попадёт в список контрибьюторов).

1% от 38 000 человек — это как раз 380 человек

Вот я и сомневался, выделить ли в цитате «or reporters of issues». Если вы только сообщили о баге, но кто-то другой его исправил — вам тоже спасибо, вы тоже контрибьютор в этом году. То есть для аналогии понадобится посчитать не только сотрудников, но и всех клиентов оракла, по чьим сообщениям в саппорт что-то исправляли.

Возможно, конечно, что это дополнение не настолько сильно увеличит число 38000 по сравнению с уменьшением списка контрибьюторов postgresql после исключения багрепортов. Но вот предположение, что действительно только 1% работает над базой — весьма сомнительно.

Тут ведь как считать, есть поддержка по регионам, есть обеспечение (логистика/доставка) есть разработка оборудования (хexadata вплоть до собственных чипов) есть java есть датацентры и их сотрудники куча продуктов вокруг (аналитика и т.п.) и даже бухгалтер есть Так что ИМХО 1% это хороший процент для работы над ядром и багфиксами...

Ммм, а почему вы так говорите, будто мастер1 станет писать меньше данных?

Чтобы не возникало недопонимания дополнил текст "… ваша БД не успевает записывать из-за общей нагрузки.". Обычно помимо нагрузки на запись есть ещё нагрузка на чтение.

Пример с прошлой недели, проект распределен по датацентрам (и шардинг там тоже есть) начинаются очереди сообщений на RabbitMQ, мониторинг Zabbix фиксирует повышение нагрузки на разных хостах одного датацентра. Часть сайтов через переключатель CDN переводится на другой хостинг, часть остаётся и уравновешивается нагрузка. Запись идёт в оба master, они синхронизируют изменения, которых не стало меньше, но проблем стало меньше, сайты не 500-ят.

Упоминание тысяч участвующих вызывает лишь улыбку. Вот PostgreSQL...

Фраза про open source проекты в целом, никакие конкретные СУБД не упоминаются. Если вспоминать про PostgreSQL, до 13 версии тоже наверняка был кто-то.
Статья хорошая, хотя я не со всеми утверждениям согласен. Возможно я ошибаюсь, но БД NOSQL появились несколько раньше, чем SQL. Да это были несовершенные программы, но сделать NOSQL базу данных проще. Особенно если взять dbm/ndbm как хранилище.
Также несогласен в том, что хранение JSON/XML это великое благо принесённое в реляционные СУБД. Но, к сожалению вместо развития сложных типов вроде координат и геометрии реляционные СУБД пошли на хранение структурированных (JSON/XML) и типизированных данных в столбцах таблиц.
Впрочем, моё мнение, несмотря на всё неприятие разрушения реляционной модели не является единственно верным.
Также могу отметить, что мне встречались ситуации, когда реляционная СУДБ не до конца отвечала требованиям решения и приходилось создавать некий гибрид из быстрого хранилища для поглощения входящих данных, реляционной СУБД для обработки и OLAP для архива и мономерных отчётов.
Спасибо за Ваши комментарии.
… но БД NOSQL появились несколько раньше, чем SQL

В статье написано про термин NoSQL. Он появился уже позже. en.wikipedia.org/wiki/NoSQL
Также несогласен в том, что хранение JSON/XML это великое благо…

Это не описано как благо, а как существующая реальность и фича СУБД. Нравится это или нет, но так есть. В реляционные БД их пишут, а потом ещё и строят поверх индексы JSON или XML.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации