Насколько быстро MySQL по сравнению с программой C / C ++, работающей на сервере? - PullRequest
2 голосов
/ 04 февраля 2009

Хорошо, мне нужно выполнить некоторые интенсивные операции с текстом.

Как объединение огромных (скажем, 100 страниц стандартного текста), поиск в них и т. Д., Поэтому мне интересно, даст ли MySQL лучшую производительность для этих конкретных операций по сравнению с программой на С, выполняющей то же самое? *

Спасибо.

Ответы [ 10 ]

5 голосов
/ 04 февраля 2009

Любая база данных всегда медленнее, чем обычная программа за пределами базы данных.

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

3 голосов
/ 04 февраля 2009

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

Но я думаю, что MySQL не обеспечит требуемые операции по обработке текста. В мире Oracle есть Text Mining и Oracle Text.

2 голосов
/ 05 февраля 2009

Есть несколько хороших ответов, за которые я проголосовал, но вот еще несколько соображений, по моему мнению:

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

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

Это может означать реляционные базы данных, такие как MySQL, даже если полнотекстовый является препятствием в базах данных, предназначенных для таблиц строк и столбцов. Для MySQL используйте механизм MyISAM для индексации и добавьте полнотекстовый индекс в столбец «blob». (Afaik, движок InnoDB по-прежнему не обрабатывает полнотекстовое индексирование, поэтому вам нужно использовать MyISAM). Для Postgresql вы можете использовать tsearch.

Для большей сложности реализации вы увидите лучшую производительность, интегрирующую приложения для индексирования, такие как Xapian , Hyper Estraier или (возможно) Lucene в ваша программа на C.

Помимо повышения производительности, эти приложения также предоставят вам важные функции, которые отсутствуют в полнотекстовом поиске MySQL, такие как определение слов, поиск по фразам и т. Д., Другими словами, реальные парсеры полнотекстовых запросов, которые не ограничиваются мышление SQL.

1 голос
/ 04 февраля 2009

Спасибо за все ответы.

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

1 голос
/ 04 февраля 2009

Если вы говорите о хранении простого текста в одном поле БД и попытке манипулировать данными, то C / C ++ может быть более быстрым решением. Проще говоря, MySQL должен быть намного больше, чем ваша C-программа, поэтому он должен быть медленнее в простых задачах, таких как манипуляции со строками: -)

Конечно, вы должны использовать правильный алгоритм для достижения хорошего результата. Существует полезная электронная книга об алгоритмах поиска строк с примерами: http://www -igm.univ-mlv.fr / ~ lecroq / string / index.html

P.S. Оцените и дайте нам отчет: -)

1 голос
/ 04 февраля 2009

Реляционные базы данных обычно не подходят для обработки больших текстовых данных. Сила производительности реальных баз данных - это индексация и автоматически сгенерированный план запросов. Текст произвольной формы плохо работает с этой моделью.

0 голосов
/ 04 февраля 2009

MySQL довольно эффективен. Вам необходимо решить, означает ли написание вашей собственной программы на C больше или меньше записей для доступа к окончательному результату, и нужно ли передавать больше или меньше данных по сети для получения окончательного результата.

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

0 голосов
/ 04 февраля 2009

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

0 голосов
/ 04 февраля 2009

MySQL написан на C, поэтому неправильно сравнивать его с C-программой. Это сама программа на C

0 голосов
/ 04 февраля 2009

Если вы в буквальном смысле говорите о конкатенации строк и выполнении регулярных выражений, это звучит как то, что стоит делать в C / C ++ (или в Java или C #, или в любом другом языке, который вам нравится)

Базы данных предоставят вам другие функции, такие как постоянство, транзакции, сложные запросы и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...