Запрос по индексированной таблице в базе данных sql по сравнению с использованием собственного HashMap - PullRequest
1 голос
/ 12 января 2011

У меня вопрос производительности в java.

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

Мне часто приходится искать элементы в этой таблице по этому индексу.

Теперь мне интересно, что быстрее:

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

У кого-нибудь есть идеи по этому поводу?(перед созданием тестов скорости и выяснения для myselve).

Ответы [ 3 ]

2 голосов
/ 12 января 2011

Поиск в HashMap будет быстрее, но если данные меняются, у вас есть накладные расходы по управлению данными и обновлению вашего кэша, не говоря уже о том, чтобы решить, какие биты данных вы собираетесь кэшировать.

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

1 голос
/ 20 июля 2013

Использование вашего собственного HashMap для обслуживания сделает вашу жизнь тяжелее. Что если у вас слишком много записей для размещения в памяти Что делать, если ваше приложение перезапускается?Что если вам нужен поиск по еще одному параметру, о котором вы не подумали?Что, если вам нужно выполнить поиск, например, param1 = val1 и param2 = val2

DB предоставляет все это из коробки, если вы поддерживаете правильный набор индексов.И большинство современных БД хранит часто запрашиваемые данные в своем кеше, поэтому все должно быть быстрее.

1 голос
/ 12 января 2011

Вы должны быть в состоянии выполнить индексированный SQL-запрос за 1-10 миллисекунд, а поиск в HashMap должен быть менее 1 микросекунды.

Если у вас уже есть база данных SQL, я бы просто использовал ее, если вы не знаете , вам нужно реплицировать данные в памяти.

...