реализация сложных алгоритмов на базе хранимой информации - PullRequest
2 голосов
/ 08 июля 2010

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

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

Моей первой мыслью было выполнение всего этого в SQL с использованием хранимых процедур, функций, представлений и всех других основных инструментов SQL Server, но потом я подумал, что, возможно, мне следует написать управляемый код (я свободно владею C #), выполняется на сервере SQL.

Производительность является проблемой здесь, поэтому я должен принять это во внимание также.

Буду признателен за любые советы о том пути, по которому я должен идти.

Спасибо!

1 Ответ

1 голос
/ 08 июля 2010

Производительность - проблема здесь

Это всегда так. При рассмотрении такого рода кода необходимо учитывать две противоположные тенденции:

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

С другой стороны:

  • Эти расчеты редко бывают изолированными. Необходимо учитывать производительность всего сервера, и ваша база данных, как правило, является наиболее загруженным сервером в вашем центре обработки данных. Это также сложнее масштабировать, как с технической, так и с деловой точки зрения. Технический, потому что вы должны сбалансировать несколько различных компонентов, включая диск, оперативную память и процессор, и не всегда легко узнать, где находятся ваши узкие места. Кроме того, это, как правило, "большие" машины, которые не многие в вашей организации будут иметь опыт настройки. Наконец, они не всегда хорошо масштабируются. Вы не можете добавить другой сервер базы данных, чтобы распределить нагрузку так же легко, как сервер приложений. С точки зрения бизнеса, весь этот технический тупик складывается в стоимость. Более того, лицензия на базу данных сама по себе часто составляет несколько тысяч на процессор .

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

...