Дерби или MySQL или?

Для каких требований вы бы предпочли Apache Derby (или Java DB) MySQL (или наоборот)? Я огляделся, и люди просто сравнивают их, но никто не говорит о том, когда рассматривать каждый из них. Я разрабатываю веб-приложение с использованием Glassfish + Java / Restlet + MySQL.

Я ожидаю около 100-200 пользователей для этой системы с нагрузкой около 30-50 одновременных пользователей в данный момент времени - в основном.

Мне сказали взглянуть на Дерби, если я хочу сделать веб-приложение загружаемым / распространяемым. Но разве это единственная причина, по которой я буду его использовать? Подходит ли он для веб-приложений? Кто-нибудь им пользовался? Каким был ваш опыт и когда вы выбираете одно из них? (Большинство обсуждений сравнения предшествовало MySQL v5, когда он не поддерживал хранимые процедуры, триггеры и т. Д., Но это уже не так).

Я могу понять модель автономного сервера БД с веб-сервером, отправляющим запросы, но как эта модель изменится со встроенным БД? Или по умолчанию используется Derby в конфигурации сети?


person PhD    schedule 12.02.2011    source источник
comment
Практическое правило: если ваше приложение будет достаточно маленьким, чтобы содержать всю систему на одном сервере / машине: вы можете использовать одно, но, а встроенная база данных упрощает распространение вашего приложения среди конечных пользователей. Если, с другой стороны, вам или вашим пользователям может потребоваться масштабирование приложения за пределы одного сервера, то встроенное приложение - неправильный выбор. При этом этот вопрос не по теме.   -  person    schedule 03.03.2015


Ответы (2)


Почему вы рассматриваете только Derby и MySQL? Если вы скажете Derby, вам также следует проверить HSQLDB, H2, SQLite. Если вы говорите MySQL, вам также следует проверить Postgres (который имеет гораздо больше функций).

Это просто название некоторых бесплатных СУБД. Конечно, как уже сказал Чарли, есть много других и множество причин, чтобы пойти в любом случае. Посмотрите эту (отличную IMO) страницу сравнения в Википедии, где вы найдете преимущества и ограничения любой СУБД:

http://en.wikipedia.org/wiki/Comparison_of_relational_database_management_systems

Что касается вашего требования о том, чтобы ваше веб-приложение было «загружаемым», конечно, вы можете встроить СУБД (любую из Derby, H2, HSQLDB) в свое веб-приложение. Но вы также можете просто настроить свою интеграцию MySQL или Postgres или любую другую интеграцию и дать своим загрузчикам инструкции о том, как самостоятельно настроить ваше веб-приложение. В конце концов, когда вы используете DataSource, сконфигурированный в контейнере для своего веб-приложения, эту настройку можно легко выполнить.

Теперь, даже если вы думаете, что вам будет проще разработать веб-приложение со встроенной базой данных, вы всегда должны думать на шаг впереди. Вопросы вроде:

  • Сможете ли вы напрямую подключиться к этой базе данных, чтобы легко исправить несоответствия данных? (Это случится со всеми нами)
  • Сможете ли вы легко изменить схему?
  • Сможете ли вы легко сделать резервную копию ваших данных?
  • и т. д. и т.п ... есть еще вопросы по обслуживанию

Поскольку ваши комментарии предполагают, что ваши данные со временем увеличиваются и должны сохраняться, я бы не стал выбирать встроенную версию, а буду хранить данные отдельно от приложения. Обратите внимание, что это не исключает Derby из дизайна вашего приложения. Это просто означает, что вам придется запускать Derby как отдельный сервер.

person Lukas Eder    schedule 08.03.2011
comment
Большой! Именно ту информацию, которую я искал. Да, я просмотрел страницу википедии и, следовательно, многоточие в названии :) С момента публикации вопроса эти опасения меня поразили, и мы решили на данный момент использовать MySQL и предложить решение на основе встроенной базы данных для загрузки и оценки инструмента. с возможностью переключения на MySQL, когда это необходимо. - person PhD; 09.03.2011
comment
Похоже на разумное решение. Удачи! :-) - person Lukas Eder; 10.03.2011
comment
При всем уважении, я не согласен с этим ответом. Идея о том, что вы можете просто попросить своих пользователей настроить базу данных MySQL без какого-либо конкретного базового понимания того, как она работает, является глупой. Для парней вроде нас с вами это не сложно, но для обычного пользователя - давай. Кроме того, ваше предположение о том, что для роста объемов данных и устойчивости требуется решение для базы данных корпоративного уровня, такое как MySQL, немного несправедливо, учитывая предоставленные детали. Наконец, это действительно вопрос о встроенных базах данных и масштабируемой модели клиент-сервер. Предложение другой СУБД неконструктивно для ответа. - person ; 03.03.2015
comment
@TomDworzanski: Ну, я не совсем уверен, что означает / значило веб-приложение в то время. И OP не сказал, какой это будет пользователь. Кроме того, вы можете отправить некоторые устанавливаемые базы данных с вашим продуктом и установить их самостоятельно (например, Oracle XE, SQL Server Express и т. Д.), Не будучи полностью встроенными. Возможно, мы можем согласиться с тем, что вопрос на самом деле не очень значимый - person Lukas Eder; 03.03.2015
comment
Сомнительно, что H2 и HSQLDB быстрее Derby (JavaDB). Может быть, еще в 2011 году, когда был написан этот ответ. Вы можете проверить тесты здесь, polepos.org - person Frankie; 02.07.2018
comment
@Frankie: Похоже, ваши тесты подтверждают, что Derby намного медленнее, чем HSQLDB. Конечно, результаты тестов кажутся весьма ошибочными. В одном тесте Hibernate / HSQLDB значительно превосходит JDBC / HSQLDB, и ни в коем случае MongoDB не так намного быстрее ... Но в любом случае. Я удалил утверждение о том, что один из них работает быстрее, чем другой, потому что я не могу подтвердить это данными - person Lukas Eder; 02.07.2018
comment
@LukasEder определенно. Когда я писал это, я ходил во сне; то, что я на самом деле собирался написать, было с точностью до наоборот и предлагаю вам связать тест. Прости за это. - person Frankie; 03.07.2018
comment
@Frankie: Так бывает с лучшими :-) - person Lukas Eder; 03.07.2018

Требования, которые будут иметь значение, - это так называемые «нефункциональные» требования: емкость, надежность, пропускная способность (и время отклика), доступность и безопасность; это наряду с собственными проблемами программного обеспечения, например, насколько легко оно доступно, насколько сложно будет поддерживать программное обеспечение на его основе и так далее.

Oracle очень быстрый, очень надежный, очень хорошо поддерживаемый и очень дорогой.

MySQL - хороший общий выбор, широко используемый. Его можно настроить для обеспечения высокой доступности и надежности (с помощью зеркалирования и ведущего-ведомого), он хорошо понимается многими программистами и хорошо интегрируется во многие программные платформы, такие как Grails, Rails и JBoss.

Derby хорош тем, что он очень независим от платформы, и многие люди легко читают Java.

SQLite быстрый, легкий и более или менее родной для Mac.

... и так далее.

Сначала выясните, какие нефункциональные требования важны, а затем выберите СУБД.

Обновить

Хорошо, продолжаю следить за вашим комментарием.

Учитывая эти цифры, позвольте мне сначала спросить, зачем вообще нужна отдельная СУБД? Это 1000 строк - подумайте о том, чтобы просто сохранить их в памяти, скажем, в коллекции коллекций, которые вы сериализуете.

Если вам действительно нужна БД, например, из-за того, что вы используете Rails, тогда вы не оспариваете ЛЮБУЮ РСУБД - это может быть сложно выбрать, потому что вы находитесь в домене, где все доступны для выбора. совершенно хорошо. Если да, то выберите наиболее простой в использовании и поддерживаемый, которым вероятно, но не обязательно MySQL, просто потому, что все его используют.

person Charlie Martin    schedule 12.02.2011
comment
Согласовано. И это то, что я хочу знать - для какого типа NFR можно выбрать MySQL вместо Derby (или наоборот). Где именно Дерби (или MySQL) дает сбой, который заставит меня сделать выбор для данного сценария и данных ограничений - ›Максимум 20 таблиц, каждая из которых может увеличиваться до 50 записей, легко и последовательно в разных командах,« хорошо » надежность, приемлемое время отклика (3-10 секунд нормально :), умеренная доступность (приложение для интрасети) - person PhD; 12.02.2011
comment
Извините. Кажется, я не понял - данные являются реляционными, и у меня есть около 15 таблиц, каждая из которых, как ожидается, увеличится до 1000 строк и будет монотонно увеличиваться в течение определенного периода времени (ежегодно?). Предыдущие данные необходимо сохранить как историю. Простая сериализация не подходит для этой задачи - это будет просто кошмар с реляционными аспектами и ленивой загрузкой. Я должен перефразировать свой вопрос на то, каковы ограничения Derby при его использовании для корпоративного приложения (интрасети)? а не MySQL против Дерби - person PhD; 13.02.2011