Java: использование алгоритма Soundex для огромной базы данных
Я использовал алгоритм Soundex, который я нашел готовым в Java http://introcs.cs.princeton.edu/java/31datatype/Soundex.java.html. Основное использование программы заключается в том, чтобы подготовить файл.cvs, а затем, после сохранения своих записей в массивах, с помощью этого алгоритма проверяет один из этих массивов на предмет фонетического сходства. (Подробнее об алгоритме soundex http://en.wikipedia.org/wiki/Soundex).
Мой файл.cvs содержит более или менее 200000 записей, поэтому для проверки 30 000 записей требуется 5 часов, что я считаю довольно медленным. [Мой алгоритм проверяет каждую запись массива со всеми остальными записями, кроме уже проверенных - поэтому я не думаю, что здесь есть проблема].
Итак, мой вопрос: есть ли способ сократить это время?
Я думал о прямом подключении своей базы данных к программе с помощью SQL, но я не знаю, есть ли другой способ сделать это, который был бы быстрее.
Пожалуйста, любое предложение будет очень полезным.
2 ответа
Я не знаю, как работает алгоритм Java. Многие базы данных включают в себя soundex()
функция. Это преобразует строку в другую строку, представляющую звук.
Затем вы можете сделать сравнение между полученными строками soundex.
Это должно идти намного, намного быстрее, чем ваш текущий подход. Вам придется проверить его, чтобы увидеть, если он возвращает приемлемые результаты.
На самом деле, я только что посмотрел на код Java. Вы можете принять тот же подход там. Просмотрите файл, рассчитайте soundex для каждой записи. Затем выполните сравнение - возможно, отсортировав файл и найдя дубликаты.
Просто используйте реализацию soundex в вашей базе данных. Большинство крупных популярных баз данных имеют встроенные функции, например, PostgreSQL, MySQL или даже T-SQL от Microsoft. Это будет проще в настройке и, вероятно, будет намного быстрее, чем любая используемая вами библиотека Java.