Высокоэффективное мнение о базе данных - PullRequest
0 голосов
/ 04 мая 2011

Я занимаюсь разработкой программного обеспечения с использованием базы данных MySql и Hibernate для доступа к ней.Проблема, с которой я сталкиваюсь, заключается в том, что при поиске 1 ключевого слова я уже использую 40 000 запросов, и разрабатываемое мной приложение должно иметь возможность обрабатывать несколько ключевых слов.

Итак, в основном мы имеем дело с базой данных, заполненной строковыми значениями, и необходимо провести много сравнений.На данный момент, используя фильтр, я загружаю все возможные совпадения в память и сравниваю их в коде Java.Это очень рекурсивно и медленно.

Так что, очевидно, MySql и больше всего Hibernate - не тот путь.Может ли кто-нибудь предоставить некоторую информацию о том, какая база данных будет обеспечивать лучшую производительность.Я смотрю в Hypertable, MongoDb, Hbase, Graph Database, ... но я не уверен, какой путь.

Пожалуйста, помогите.Спасибо

Ответы [ 3 ]

2 голосов
/ 04 мая 2011

Ваш подход неверен, и вы делаете что-то, что MySQL делает изначально - он может хранить набор данных в ОЗУ и работать с ним оттуда, что вы и делаете со своим алгоритмом.

Другое дело, что для конкретных вещей, таких как поиск текста, существуют известные методы и различные механизмы хранения, которые специализируются для таких целей. Например, Sphinx является одним из них.

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

Кроме того, как вы думаете, почему решение NoSQL будет быстрее, если сравнивать большой объем строковых данных?

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

0 голосов
/ 04 мая 2011

Возможно, я неправильно понял ваш вопрос, но ...

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

Похоже, вы пытаетесь выполнить работу своей базы данных в оперативной памяти?Создать индекс, написать более качественный SQL-запрос или что-то в этом роде, но вы загружаете все возможные совпадения и просматриваете их?На этом этапе, зачем вообще использовать базу данных?

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

0 голосов
/ 04 мая 2011

Ваша настоящая проблема - использование 40 000 запросов.

Можете ли вы объяснить свою проблему и процесс, который приводит к такому количеству запросов?

Независимо от того, с какой базой данных вы работаете, ваш алгоритм звучит слишком излишне, и поэтому он всегда будет медленным.

Давайте сначала исправим это.

...