Каковы основные различия между базами данных?

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

Например, я использую в основном Oracle, и я вижу, что другие (MySQL, SQL Server, PostgreSQL,...) не могут делать:

То же самое для SQL Server, что другие не могут сделать:

Ответы

Ответ 1

Oracle CONNECT BY - это ограниченная версия стандартного SQL-рекурсивного SQL. Рекурсивные "общие табличные выражения DB2" и MSSQLs немного сложнее кодировать, но предлагают больше возможностей, чем Oracle CONNECT BY. (Следующая версия базы данных Oracle должна получить реальный рекурсивный SQL.)

Flash back - поистине уникальная функция Oracle, которая отражает, как глубокий

Oracle (например, DB2) является примером СУБД, которая почти включает всю операционную систему: она выполняет множество функций, которые СУБД, такие как MSSQL/MySQL/PostgreSQL, позволят обрабатывать файловую систему операционной системы и системы виртуальной памяти. Лично я предпочитаю последний подход, но Oracle способ делает Oracle работать очень точно независимо от того, какая операционная система используется.

По сравнению с MSSQL Oracle работает на многих других платформах (как и большинство других СУБД, MSSQL, вероятно, является единственной важной СУБД, которая работает только в Windows).

Oracle предлагает другой способ кластеризации, чем большинство других СУБД: RAC. Я слышал много страшных историй о RAC, но если вы можете заставить его работать, возможно, справедливо сказать, что у вас очень мощное (и дорогое) решение для кластеризации.

Что касается управления, я нахожу Oracle удивительно сложным для управления, по сравнению с большинством других СУБД.

Тогда, конечно, существуют серьезные ценовые различия: цены на Oracle очень высоки и растут.

Ответ 2

SQL Server имеет встроенную функцию автоматического увеличения, которую вы можете добавить в столбец, если требуется простое инкрементное целое для таблицы.

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

Ответ 4

Вот некоторые особенности Sybase SQL Anywhere, которые (AFAIK) не существуют в других продуктах базы данных:

  • шифрование на уровне таблицы
  • сжатие столбцов (доступно как опция с версией Oracle Enterprise, встроенной во все версии SA)
  • хранимые процедуры могут быть записаны в SQL, java, perl, php, C/С++, С# или VB.NET

Полное раскрытие: я работаю для Sybase - я разработчик в команде сервера SQL Anywhere. Это не означает рекламу или репрессивное блудство. Если потребуется, я помечаю этот ответ как сообщество wiki.

Ответ 5

Основное различие между MySQL и почти каждой другой базой данных, за исключением SQLite, заключается в том, что MySQL знает только один вид соединения - вложенный цикл.

Это нормально для типа OLTP, рабочая нагрузка на barebones MySQL, по-видимому, предназначена для (те же принципы проектирования привели к тому, что на некоторое время не выполнялись такие функции, как триггеры, представления и подзапросы), но это смертельно для большой работы OLAP, Не верьте мне на слово, читайте Петра Зайцева: http://peter-zaitsev.livejournal.com/758.html. Это также ужасно медленно в подзапросах, которые он научился делать совсем недавно. Небольшие шаги, я полагаю..

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

В одном месте, где Oracle терпит неудачу (как и большинство других), это многотерабайтные рабочие нагрузки. Для этого вы хотите обратиться к таким специалистам, как Teradata (лучший в своем классе, чрезвычайно дорогой), Greenplum, AsterData, Netezza и другие.

Я ничего не слышал о SQL Server, кроме того, что он работает только в Windows.

MySQL легко настроить, быстро для OLTP и, как правило, делает подход к выполнению нескольких действий и делает их хорошо.

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

Предполагается, что DB2 будет хорошей; нет личного опыта. Лучше быть хорошим, со всеми этими людьми в Almaden. То же самое с Sybase.

Ответ 6

Различия зависят от ваших намерений - если вы действительно не хотите только исчерпывающий список прачечной. Другими словами, кажется, что вы действительно хотите спросить о значительных различиях, а значение зависит от намерения.

Я предлагаю, чтобы большинство людей обычно находили несколько конкретных вещей:

  • производительности
  • Совместимость
  • портативность
  • расширенные функции
  • простота использования
  • стоимость

Относительная значимость этих характеристик базы данных, по-видимому, в основном зависит от того, находится ли одно намерение в программировании в или в-малом. Поскольку я в основном работаю в мире программирования в целом, я буду говорить оттуда. Когда я работаю (как правило, на собственных проектах) в мире программирования в-малом, я обычно склоняюсь к своим решениям для мира в целом, так как считаю, что это достаточно легко, и я предпочитаю спасаться от головные боли, которые меня передумали, когда мой проект вырастет. Я заметил, что многие проекты с открытым исходным кодом страдают от огромных, иногда смертельных, болей роста, когда их следующее заставляет их пересечь порог от маленького до большого.

Моя первая проблема заключается в том, что я всегда должен иметь возможность изменить свое мнение о моем выборе поставщика и продукта базы данных, поэтому совместимость короля и мобильность - это королева. Имея это в виду, я предпочитаю рассматривать базу данных только как носитель, поэтому я не ставил код в базу данных и избегаю любых функций, которые не имеют отношения к хранению или специфичны для поставщика или продукта. Для РСУБД совместимость в первую очередь означает соответствие стандарту ANSI SQL, поэтому я немедленно отвергаю любой продукт, который несовместим с требованиями. Поскольку я работаю в мирах Linux, Unix и Windows, переносимость означает доступность на всех этих платформах.

Мой код принадлежит вместе и в наилучшей для него среде - не разделен на поврежденную среду ядра базы данных; другой аспект того, что означает рассматривать базу данных как просто носитель данных. Поэтому функции кодирования имеют ограниченное значение для меня. В очень редком случае я создам код в базе данных для триггера или некоторых удобных функций, поэтому я ожидаю соответствия ANSI SQL для базовых возможностей, и это все.

У меня, как правило, много данных, поэтому производительность важна, и я готов обменять некоторые удобства в использовании. Я не против установки большой базы данных или сложной структуры базы данных, если у меня есть некоторые базовые инструменты для облегчения и автоматизации процесса. Это означает, что я должен иметь возможность script устанавливать механизм базы данных (двоичные файлы), а также мою структуру и данные базы данных. Если FORCED использовать графический интерфейс, как единственный вариант, для важных задач базы данных неприемлем.

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

Очевидно, что цена покупки ядра базы данных - это стоимость, но также и потеря свободы в том, как ее использовать. Поэтому я ценю продукты с открытым исходным кодом ОЧЕНЬ высоко.

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

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

Во-вторых, я люблю Oracle, и я предпочитаю его для программирования в целом. Это не дешево, но он может делать все, что мне может понадобиться, с наилучшим сочетанием совместимости, переносимости, производительности и функций.

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

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

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

С наилучшими пожеланиями.

Ответ 7

MySQL: REPLACE. Это "DELETE, затем INSERT", который заменит существующую строку.

Ответ 8

Оба SQL Server и MySQL не поддерживают стандартный "двойной канал" для конкатенации строк, а каждый другой БД. (Обновление: очевидно, MySQL делает... см. Ниже)

Но это может быть исправлено... в коде для MySQL и через http://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=259291 для SQL Server.

Ответ 9

Я являюсь разработчиком команды Sybase SQL Anywhere. Я мог бы размещать здесь всякую информацию о функциях SQL Anywhere (SA) и, если хотите, хотя я не хочу, чтобы вас оставляли забвение за размещение рекламы. Не стесняйтесь обращаться ко мне напрямую, если вы хотите получить дополнительную информацию.

Вот ответы на существующие ответы:

  • SA также поддерживает автоинкремент
  • SA поддерживает || для конкатенации строк
  • SA поддерживает insert ... on existing update для выполнения одного оператора, который может вставлять новые строки и обновлять существующие.

Ответ 10

У меня нет много вклада, кроме как сказать, что Sybase ASE - это, на мой взгляд, рыжий шагающий ребенок из РСУБД. В нем отсутствуют многие удобные функции, которые вы считаете само собой разумеющимися в SQL Server или Oracle (и даже в других аспектах Sybase), вы не можете связывать серверы и распространять запросы без сторонних инструментов, инструменты управления Sybase и IDE ограничены и очень бедный (опять же, мое мнение), и это просто больно работать. Я предполагаю, что у Sybase есть только 3% доли рынка.

Примечание: если, как и я, вы должны работать с несколькими RDBMS ', и вам нужен хороший инструмент для этого, посмотрите Aqua Data Studio из AquaFold. Я только начал использовать его, и это действительно хорошо. Он также получил некоторые большие утилиты, такие как моделирование ER и инструменты для сравнения.

Ответ 11

Я не знаю другого сервера базы данных, но с PostgreSQL вы можете

INSERT INTO mytable
   ( field_1, field_2,... ) 
VALUES
   ( value_1, value_2 )
RETURNING anyfield

любое поле должно быть полем таблицы.

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

см. PostgreSQL - INSERT