Это быстрее, чтобы получить доступ к списку Java (Arraylist) по сравнению с доступом к тем же данным в базе данных MySQL? - PullRequest
0 голосов
/ 17 ноября 2011

У меня есть база данных MYSQL на локальном компьютере, откуда я запускаю java-программу.

Я планирую создать список массивов всех записей конкретной таблицы.С этого момента я не буду обращаться к базе данных, чтобы получить конкретную запись в таблице, вместо этого я буду использовать созданный список массивов.Будет ли это быстрее или медленнее по сравнению с доступом к базе данных для получения определенной записи в таблице?

Обратите внимание, что интересующая меня таблица содержит около 2 миллионов записей.

Спасиботы.

Больше информации: мне нужны только два поля.1 типа Long и 1 типа String.Индекс таблицы - Long, а не int.

Ответы [ 5 ]

5 голосов
/ 17 ноября 2011

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

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

Почему вы думаете сделать это?Вы испытываете медленные запросы?

Чтобы выяснить, в вашем my.cnf активируйте журнал медленных запросов, раскомментировав (или добавив) следующие строки.

# Here you can see queries with especially long duration
log_slow_queries    = /var/log/mysql/mysql-slow.log
long_query_time = 1

Затем посмотрите, какие запросы занимают много времени, изапустите их с EXPLAIN впереди, добавьте индекс, где команда объяснения скажет вам, что индексы не используются, или просто опубликуйте новый вопрос с помощью оператора CREATE TABLE и вашего примера запроса для оптимизации.

1 голос
/ 17 ноября 2011

Этот вопрос слишком расплывчатый и может легко пойти в любую сторону в зависимости от:

  1. Сколько полей в каждой записи, насколько велики поля?
  2. Какой тип доступа вы собираетесь выполнять? Текстовый поиск? Последовательная

Например, если каждая запись состоит из пары байтов данных, гораздо быстрее сохранить их все в памяти (хотя не обязательно ArrayList). Вы можете поместить их в TreeSet, например.

0 голосов
/ 17 ноября 2011

Во-первых, доступ к списку массивов намного быстрее, чем доступ к базе данных.Доступ к памяти намного быстрее, чем к жесткому диску.Если количество записей в массиве велико, и я предполагаю, что это так, то вам нужно рассмотреть возможность использования структуры данных «прямого доступа», такой как HashMap, которая будет действовать как таблица базы данных, где у вас есть значения, на которые ссылаются их ключи

0 голосов
/ 17 ноября 2011

Измеримо ли это быстрее или медленнее.Время это.Определенно быстрее работать со структурами, хранящимися в памяти, чем с таблицами данных, расположенными на диске.Это если у вас достаточно памяти и если у вас нет 20 пользователей, выполняющих один и тот же процесс одновременно.

Как вы получаете доступ к данным?У вас есть целочисленный индекс?

0 голосов
/ 17 ноября 2011

Это зависит от того, что вы будете делать с данными.Если вы просто хотели получить несколько строк, из БД должны быть извлечены только те.Если вы знаете, что вам нужны ВСЕ данные, загрузите всю таблицу в Java, если она может поместиться в памяти.Что вы будете делать с этим после?Последовательное или случайное чтение?Будут ли данные изменены?Карта или набор могут быть более быстрой альтернативой в зависимости от того, как будет использоваться коллекция.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...