Хорошая идея сделать обработку большого объема данных непосредственно в базе данных? - PullRequest
1 голос
/ 30 августа 2011

У меня есть база данных с большим количеством веб-страниц.

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

Что я хочу знать:

  • сделать некоторую обработку в базе данных, а не в приложении, это хорошо идея?
  • когда это рекомендуется, а когда нет?
  • есть плюсы и минусы?
  • возможно ли расширить язык до новых функций (внешние API / библиотеки)?

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

ТОЛЬКО пример: У меня есть таблица с именем Token. На данный момент он насчитывает 180 000 строк, но он увеличится до 10 миллионов строк. Мне нужно провести некоторую обработку, чтобы узнать, является ли слово между двумя токенами, классифицированными как «Собственное имя», частью имени.

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

Ответы [ 2 ]

5 голосов
/ 30 августа 2011

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

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

Я не знаю, что вы обрабатываете, хотя. Вы анализируете данные XML, хранящиеся в вашей базе данных? Тогда, возможно, вам следует использовать XQuery, и многие современные базы данных поддерживают его.

ТОЛЬКО пример: у меня есть таблица с именем Token. На данный момент оно имеет 180000 строк, но это увеличится до более чем 10 миллионов строк. я нуждаюсь выполнить некоторую обработку, чтобы узнать, классифицировано ли слово между двумя токенами поскольку «Собственное имя» является частью имени или нет.

Есть ли какой-нибудь индикатор в данных, который говорит, что это правильное имя? Извлечение 10 миллионов строк (в высокой степени подверженных исключению OutOfMemoryException) и последующий просмотр их не очень хорошая идея. Если есть определенные параметры для данных, которые могут быть помещены в предложение where в SQL, чтобы ограничить количество извлекаемых данных, это, по моему мнению, путь. Конечно, вам нужно будет сделать пояснения по вашему SQL, проверить правильные индексы, проверить соотношение кластеров индекса, тип индекса, все, что будет иметь значение. Теперь, если вы не можете полностью устранить все «неправильные имена», вам следует попытаться избавиться от как можно большего количества с помощью SQL, а затем обработать все остальное в вашем приложении. Я предполагаю, что это пакетное приложение, верно? Если это веб-приложение, то вам определенно нужно создать пакетное приложение, которое выполнит подготовку данных перед тем, как веб-приложения запросят их.

Надеюсь, мое объяснение имеет смысл. Пожалуйста, дайте мне знать, если у вас есть вопросы.

3 голосов
/ 30 августа 2011

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

...